數(shù)據(jù)結(jié)構(gòu)隨想(一)

              #原創(chuàng)                

之前老是對(duì)牛頓的“站在巨人肩膀上”有點(diǎn)誤解,咱不否認(rèn)牛頓在數(shù)學(xué)玄叠,物理上的才華與對(duì)人類的貢獻(xiàn)欣尼,因?yàn)榕nD啥人品咱也都知道祸穷,誤解他在所難免∶溃現(xiàn)在發(fā)現(xiàn)楊絳先生的“你的問題主要在于讀書不多而想得太多”愈發(fā)正確,書是人們智慧的載體粱哼,天才的存在使得書更有價(jià)值。多讀書檩咱,站在巨人的肩膀上是有意義的揭措,與其活在自己的世界里踽踽獨(dú)行,不如包容的心態(tài)學(xué)習(xí)前人的經(jīng)驗(yàn)刻蚯。曾一直思考绊含,其實(shí)歲月悠悠,哦炊汹,shit躬充,大爺直接過來把自習(xí)室燈關(guān)了,我就一人還在這黑燈瞎火的抒情,咳咳充甚,繼續(xù)以政,說那兒了,伴找,盈蛮,,技矮,(此處卡頓30s)哦抖誉,你思考的問題早有人為你思考過了,多看書是快速生長(zhǎng)的一種方法衰倦,不用摸著石頭過河了嘛袒炉!

廢話不多說,看題樊零,非計(jì)算機(jī)學(xué)生慎看我磁。

編碼工作常被運(yùn)用于密文或壓縮傳輸。這里我們用一種最簡(jiǎn)單的編碼方式進(jìn)行編碼:把一些有規(guī)律的單詞編成數(shù)宇淹接。
字母表中共有26個(gè)字母{a十性,b,…塑悼,z}劲适,這些特殊的單詞長(zhǎng)度不超過6且字母按升序排列。把所有這樣的單詞放在一起厢蒜,按字典順序排列霞势,一個(gè)單詞的編碼就對(duì)應(yīng)著它在字典中的位置。
例如:
a→1 b→2 z→26 ab→27 ac→28
你的任務(wù)就是對(duì)于所給的單詞斑鸦,求出它的編碼愕贡。
輸入輸出格式
輸入格式:
僅一行,被編碼的單詞巷屿。
輸出格式:
僅一行固以,對(duì)應(yīng)的編碼。如果單詞不在字母表中嘱巾,輸出0憨琳。
輸入樣例 :ab 輸出樣例:27

該題目來源于洛谷,洛谷平臺(tái)未標(biāo)注出題作者


OK旬昭,進(jìn)入正題篙螟,首先搞清升序與非遞減的區(qū)別,即按字典序升序就保證了該編碼制度下沒有相同的字母问拘。

所以a->1,b->2,c->3, ,z->26,aa->27,ab->28, , ,ba->53是錯(cuò)誤的,也就是說不能看成由a~z組成的26進(jìn)制編碼成10進(jìn)制遍略,對(duì)吧惧所?

Alright,發(fā)動(dòng)你聰明的小腦瓜绪杏,抽象出該題背后的數(shù)據(jù)結(jié)構(gòu)下愈,想想它長(zhǎng)什么樣子了。

那些對(duì)“數(shù)據(jù)結(jié)構(gòu)”概念一臉迷茫的孩子寞忿,可以繼續(xù)閱讀驰唬,牛犇可以略過。

數(shù)組結(jié)構(gòu)的核心技術(shù)是分解和抽象腔彰。

首先對(duì)數(shù)據(jù)進(jìn)行分解和抽象叫编,通過分解劃分出數(shù)據(jù)的層次(數(shù)據(jù)-數(shù)據(jù)元素-數(shù)據(jù)項(xiàng));再經(jīng)過抽象霹抛,舍棄數(shù)據(jù)元素的具體內(nèi)容搓逾,得到數(shù)據(jù)的邏輯結(jié)構(gòu)。

其次是處理的分解和抽象杯拐,通過分解將需求劃分成各個(gè)功能霞篡;再經(jīng)過抽象舍棄實(shí)現(xiàn)細(xì)節(jié)得到算法。

好吧端逼,我也不羅嗦了朗兵,你肯定想掌握數(shù)據(jù)結(jié)構(gòu)最重要的東西吧。

邏輯結(jié)構(gòu)是你學(xué)數(shù)據(jù)結(jié)構(gòu)必須掌握的顶滩,否則余掖,嘿嘿嘿,你可能要叨念"Data structure fucks me"或者"Life sucks because of data structure "了礁鲁。

邏輯結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu)盐欺。

線性結(jié)構(gòu)元素之間的關(guān)系是一對(duì)一對(duì)的,如線性表仅醇,向量冗美,棧(重要),隊(duì)列(重要)析二,優(yōu)先隊(duì)列粉洼,字典等。

非線性結(jié)構(gòu)可能是一對(duì)多叶摄,即樹(真重要)漆改,多對(duì)多,即圖(真重要)本人覺得數(shù)據(jù)結(jié)構(gòu)的博大精深從這兒開始就體現(xiàn)出來了准谚。

/這是我的第一篇簡(jiǎn)書:-),還可以去gitee.com/cipolee/

下面是我理解的該題背后的結(jié)構(gòu)去扣。

理科男靈魂畫師一個(gè)柱衔,不會(huì)畫圖樊破,嗚嗚嗚,唆铐,

哎哎哎哲戚,對(duì)了,這才叫抽象嘛艾岂,嘿嘿嘿顺少,邏輯結(jié)構(gòu)要的就是抽象。

image

咳咳咳王浴,前方高能脆炎。

每種邏輯結(jié)構(gòu)背后都有,查找氓辣,遍歷秒裕,插入,建立钞啸,刪除几蜻。如果繼續(xù)抽象,遍歷屬于查找体斩,建立屬于插入梭稚。

這個(gè)題不就是讓你找到編碼規(guī)律后為單詞編碼(第一步),存起來(第二步)絮吵,然后給你個(gè)單詞你往存起來的地方查找弧烤,找到你就能輸出答案了,就這么easy源武。

第一步扼褪,編碼規(guī)律你已經(jīng)知道,就是上面的樹粱栖,可以用DFS把樹的每一條枝子(路徑)即一個(gè)單詞搜索一遍得到編碼結(jié)果话浇。

第二步,存起來闹究,用什么存容易查找呢幔崖,還能代碼容易實(shí)現(xiàn),時(shí)間復(fù)雜度還低渣淤?

ummm赏寇,如果你夠懶你會(huì)說我啥也不想用,就想給我單詞我就能把編碼輸出价认。對(duì)嗅定!你這個(gè)想法很聰明,這時(shí)你會(huì)發(fā)現(xiàn)你需要一個(gè)由單詞到數(shù)字的映射用踩。用map存渠退!

所有大的問題都解決忙迁,開始寫代碼,代碼中出現(xiàn)的細(xì)節(jié)在代碼里注釋碎乃。


#include<iostream>

#include<map>

using namespace std;

map<string,int>M;//可以理解有一個(gè)M對(duì)象它從string字符串映射到一個(gè)整數(shù)及答案姊扔。

int cnt=1;

//cnt是計(jì)數(shù)器,初始a為1梅誓。

string all,one;

//all是為了給各個(gè)單詞存編碼而生成的所有種類的字符串(枚舉的思想)恰梢,而one是你要輸入的字符串。

void DFS(int length,int k)//length是單詞長(zhǎng)度梗掰,k深搜的層數(shù)

{

if(k>length)//深搜邊界

{

M[all]=cnt++;

return ;

}

char i,j;

if(k==1)

j='a';

else

j=all[k-2]+1;//k-2=k-1(回到上一層)-1(數(shù)組從0開始編號(hào)嵌言,找到上一個(gè)字母)+1(保證升序,大一個(gè))

for(i=j;i<='z';i++)

{

all[k-1]=i;

DFS(len,k+1);

//為什么它就能按深搜的那個(gè)過程走一遍愧怜,你看執(zhí)行到邊界return呀页,就回溯到上一層,上一層按順序往后執(zhí)行拥坛,然

//后依此類推

}

int main()

{

int n;//單詞字母?jìng)€(gè)數(shù)蓬蝶。

for(n=1;n<=6;n++)

{

all.clear();

all.resize(n);

DFS(n,1);

}

cin>>one;

cout<<M[one]<<endl;

return 0;

}

其實(shí)仔細(xì)思考DFS(depth first search深度優(yōu)先搜索)和BFS(breadth first search廣度優(yōu)先搜索),就會(huì)發(fā)現(xiàn)其中的哲學(xué)思想猜惋,一個(gè)是一下子走到底丸氛,不到黃河不死心,玩深度著摔;一個(gè)是先把最近的先走一遍缓窜,再往下走,重廣度谍咆。

而棧禾锤,先進(jìn)后出,隊(duì)列摹察,先進(jìn)先出恩掷。這先進(jìn)先出,先進(jìn)后出所反映的思想在算法甚至在生活中也普遍存在供嚎。如果深度理解黄娘,你會(huì)發(fā)現(xiàn)DFS是棧的操作,BFS是隊(duì)列的操作克滴。

是不是發(fā)現(xiàn)這幾行代碼比一篇網(wǎng)絡(luò)小說的信息量大多了逼争。

新時(shí)代大學(xué)生,在每日巨大的信息沖擊下劝赔,很難接受文藝的辭藻華麗的詩詞誓焦,從接受信息獲得快感的閾值越來越高,為此他們會(huì)瀏覽更多的信息着帽,為此不浪費(fèi)碎片的時(shí)間去看快手杂伟,抖音竿秆,在花花綠綠的信息流中接受須臾的感官刺激,垃圾信息害人太慘稿壁,代碼中都是智慧的結(jié)晶,不僅包含的信息多歉备,質(zhì)量還高傅是。

多讀書不愿意?多讀代碼就好了蕾羊。

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喧笔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子龟再,更是在濱河造成了極大的恐慌书闸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件利凑,死亡現(xiàn)場(chǎng)離奇詭異浆劲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哀澈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門牌借,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人割按,你說我怎么就攤上這事膨报。” “怎么了适荣?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵现柠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我弛矛,道長(zhǎng)够吩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任汪诉,我火速辦了婚禮废恋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扒寄。我一直安慰自己鱼鼓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布该编。 她就那樣靜靜地躺著迄本,像睡著了一般。 火紅的嫁衣襯著肌膚如雪课竣。 梳的紋絲不亂的頭發(fā)上嘉赎,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天置媳,我揣著相機(jī)與錄音,去河邊找鬼公条。 笑死拇囊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的靶橱。 我是一名探鬼主播寥袭,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼关霸!你這毒婦竟也來了传黄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤队寇,失蹤者是張志新(化名)和其女友劉穎膘掰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佳遣,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡识埋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苍日。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惭聂。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖相恃,靈堂內(nèi)的尸體忽然破棺而出辜纲,到底是詐尸還是另有隱情,我是刑警寧澤拦耐,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布耕腾,位于F島的核電站,受9級(jí)特大地震影響杀糯,放射性物質(zhì)發(fā)生泄漏扫俺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一固翰、第九天 我趴在偏房一處隱蔽的房頂上張望狼纬。 院中可真熱鬧,春花似錦骂际、人聲如沸疗琉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盈简。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柠贤,已是汗流浹背香浩。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工臼勉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宴霸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓降允,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親幢尚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尉剩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算管嬉,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,806評(píng)論 0 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 1)這本書為什么值得看: Python語言描述础倍,如果學(xué)的Python用這本書學(xué)數(shù)據(jù)結(jié)構(gòu)更合適 2016年出版沟启,內(nèi)容...
    孫懷闊閱讀 12,471評(píng)論 0 15
  • 文/鴻運(yùn) 自由盤旋天地間 棕色外衣繡銀邊 一心只把害蟲滅 呵護(hù)森林和良田
    HONGYUNDANGTOU閱讀 185評(píng)論 5 5
  • iOS 全屏返回 BBGestureBack iOS 全屏手勢(shì)返回 滑動(dòng)返回 pop 動(dòng)畫效果 這種手勢(shì)主流App...
    Bonway_Huang閱讀 244評(píng)論 0 0