數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)(野路子補(bǔ)基礎(chǔ)系列)

  1. 算法五個(gè)重要特征:
  • 有窮性:保證執(zhí)行有限步驟之后結(jié)束祥楣;
  • 確切性:每一步驟都有確切的定義开财;
  • 輸入:每個(gè)算法有零個(gè)或多個(gè)輸入,以刻畫運(yùn)算對(duì)象的初始情況误褪,所謂零個(gè)輸入是指算法本身定除了初始條件责鳍;
  • 輸出:每個(gè)算法有一個(gè)或多個(gè)輸出,顯示對(duì)輸入數(shù)據(jù)加工后的結(jié)果兽间。沒(méi)有輸出的算法是毫無(wú)意義的历葛;
  • 可行性:在原則上算法能夠精確地運(yùn)行,進(jìn)行有限次運(yùn)算后即可完成一種運(yùn)算渡八。
  1. 常用基本算法:
    快排 堆排序 歸排序 二分查找 線性查找 廣度優(yōu)先 深度優(yōu)先 動(dòng)態(tài)規(guī)劃

  2. 常見(jiàn)算法思想:
    枚舉 遞推 遞歸 分治 貪心 迭代

  3. 時(shí)間復(fù)雜度和空間復(fù)雜度:

  • 時(shí)間頻度 一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間啃洋,從理論上是不能算出來(lái)的,必須上機(jī)運(yùn)行測(cè)試才能知道屎鳍。但我們不可能也沒(méi)有必要對(duì)每個(gè)算法都上機(jī)測(cè)試宏娄,只需知道哪個(gè)算法花費(fèi)的時(shí)間多,哪個(gè)算法花費(fèi)的時(shí)間少就可以了逮壁。并且一個(gè)算法花費(fèi)的時(shí)間與算法中語(yǔ)句的執(zhí)行次數(shù)成正比例孵坚,哪個(gè)算法中語(yǔ)句執(zhí)行次數(shù)多,它花費(fèi)時(shí)間就多。一個(gè)算法中的語(yǔ)句執(zhí)行次數(shù)稱為語(yǔ)句頻度或時(shí)間頻度卖宠。記為T(n)巍杈。

  • 時(shí)間復(fù)雜度 在剛才提到的時(shí)間頻度中,n稱為問(wèn)題的規(guī)模扛伍,當(dāng)n不斷變化時(shí)筷畦,時(shí)間頻度T(n)也會(huì)不斷變化。但有時(shí)我們想知道它變化時(shí)呈現(xiàn)什么規(guī)律刺洒。為此鳖宾,我們引入時(shí)間復(fù)雜度概念。 一般情況下逆航,算法中基本操作重復(fù)執(zhí)行的次數(shù)是問(wèn)題規(guī)模n的某個(gè)函數(shù)鼎文,用T(n)表示,若有某個(gè)輔助函數(shù)f(n),使得當(dāng)n趨近于無(wú)窮大時(shí)因俐,T(n)/f(n)的極限值為不等于零的常數(shù)拇惋,則稱f(n)是T(n)的同數(shù)量級(jí)函數(shù)。記作T(n)=O(f(n)),稱O(f(n)) 為算法的漸進(jìn)時(shí)間復(fù)雜度抹剩,簡(jiǎn)稱時(shí)間復(fù)雜度撑帖。

  • 時(shí)間復(fù)雜度(從小到大)
    常數(shù)階<對(duì)數(shù)階<線性階<線性對(duì)數(shù)階<平方階<立方階<K次方<指數(shù)階
    優(yōu)先多項(xiàng)式,指數(shù)容易爆炸吧兔。

  • 順序結(jié)構(gòu)可以求和磷仰,取max,循環(huán)結(jié)構(gòu)用乘法境蔼。復(fù)雜結(jié)構(gòu)可分灶平,然后去低階、去常數(shù)箍土、去高階常參逢享。

  • 空間復(fù)雜度
    一個(gè)程序的空間復(fù)雜度是指運(yùn)行完一個(gè)程序所需內(nèi)存的大小。利用程序的空間復(fù)雜度吴藻,可以對(duì)程序的運(yùn)行所需要的內(nèi)存多少有個(gè)預(yù)先估計(jì)瞒爬。一個(gè)程序執(zhí)行時(shí)除了需要存儲(chǔ)空間和存儲(chǔ)本身所使用的指令、常數(shù)沟堡、變量和輸入數(shù)據(jù)外侧但,還需要一些對(duì)數(shù)據(jù)進(jìn)行操作的工作單元和存儲(chǔ)一些為現(xiàn)實(shí)計(jì)算所需信息的輔助空間。程序執(zhí)行時(shí)所需存儲(chǔ)空間包括以下兩部分航罗≠骱幔  
    (1)固定部分。這部分空間的大小與輸入/輸出的數(shù)據(jù)的個(gè)數(shù)多少粥血、數(shù)值無(wú)關(guān)柏锄。主要包括指令空間(即代碼空間)酿箭、數(shù)據(jù)空間(常量、簡(jiǎn)單變量)等所占的空間趾娃。這部分屬于靜態(tài)空間缭嫡。
    (2)可變空間,這部分空間的主要包括動(dòng)態(tài)分配的空間抬闷,以及遞歸棧所需的空間等妇蛀。這部分的空間大小與算法有關(guān)。
    一個(gè)算法所需的存儲(chǔ)空間用f(n)表示饶氏。S(n)=O(f(n)) 其中n為問(wèn)題的規(guī)模讥耗,S(n)表示空間復(fù)雜度。

  1. 常見(jiàn)數(shù)據(jù)結(jié)構(gòu)
    數(shù)組 隊(duì)列 堆 棧 鏈表 樹 圖 散列表
  • 四大結(jié)構(gòu):集合結(jié)構(gòu) 線性結(jié)構(gòu) 圖形結(jié)構(gòu) 樹形結(jié)構(gòu)
  • 數(shù)據(jù)類型:在C語(yǔ)言中疹启,數(shù)據(jù)類型可以分為:
    原子類型:不可以再分解的基本類型,例如整型蔼卡、浮點(diǎn)型喊崖、字符型等。
    結(jié)構(gòu)類型:由若干個(gè)類型組合而成雇逞,是可以再分解的荤懂,例如整型數(shù)組是由若干整型數(shù)據(jù)組成的。
  • 兩種存儲(chǔ)方式:順序存儲(chǔ) 鏈?zhǔn)酱鎯?chǔ)
  • 棧:一端 先進(jìn)后出 常見(jiàn)操作:push pop peek length clear
  • 隊(duì)列:兩端 后進(jìn)先出
  • 圖:有向 無(wú)序 簡(jiǎn)單 兩個(gè)數(shù)據(jù):頂點(diǎn)塘砸、表明是否訪問(wèn)的哈希值
  • 二叉樹的特點(diǎn):
    每個(gè)結(jié)點(diǎn)最多有兩棵子樹节仿,所以二叉樹中不存在度大于2的結(jié)點(diǎn)。二叉樹中每一個(gè)節(jié)點(diǎn)都是一個(gè)對(duì)象掉蔬,每一個(gè)數(shù)據(jù)節(jié)點(diǎn)都有三個(gè)指針廊宪,分別是指向父母、左孩子和右孩子的指針女轿。每一個(gè)節(jié)點(diǎn)都是通過(guò)指針相互連接的箭启。相連指針的關(guān)系都是父子關(guān)系。
  • 二叉樹的五種基本形態(tài):
    空二叉樹
    只有一個(gè)根結(jié)點(diǎn)
    根結(jié)點(diǎn)只有左子樹
    根結(jié)點(diǎn)只有右子樹
    根結(jié)點(diǎn)既有左子樹又有右子樹

參考:SegmentFault 技術(shù)周刊 Vol.31 - 碼農(nóng)也要學(xué)算法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛉迹,一起剝皮案震驚了整個(gè)濱河市傅寡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌北救,老刑警劉巖荐操,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異珍策,居然都是意外死亡托启,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門膛壹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)驾中,“玉大人唉堪,你說(shuō)我怎么就攤上這事〖缑瘢” “怎么了唠亚?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)持痰。 經(jīng)常有香客問(wèn)我灶搜,道長(zhǎng),這世上最難降的妖魔是什么工窍? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任割卖,我火速辦了婚禮,結(jié)果婚禮上患雏,老公的妹妹穿的比我還像新娘鹏溯。我一直安慰自己,他們只是感情好淹仑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布丙挽。 她就那樣靜靜地躺著,像睡著了一般匀借。 火紅的嫁衣襯著肌膚如雪颜阐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天吓肋,我揣著相機(jī)與錄音凳怨,去河邊找鬼。 笑死是鬼,一個(gè)胖子當(dāng)著我的面吹牛肤舞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屑咳,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼萨赁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了兆龙?” 一聲冷哼從身側(cè)響起杖爽,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绪颖,失蹤者是張志新(化名)和其女友劉穎苫耸,沒(méi)想到半個(gè)月后滴劲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魄梯,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偶妖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年亥揖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烛亦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坝咐。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铃剔,死狀恐怖撒桨,靈堂內(nèi)的尸體忽然破棺而出查刻,到底是詐尸還是另有隱情,我是刑警寧澤凤类,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布穗泵,位于F島的核電站,受9級(jí)特大地震影響谜疤,放射性物質(zhì)發(fā)生泄漏佃延。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一夷磕、第九天 我趴在偏房一處隱蔽的房頂上張望履肃。 院中可真熱鬧,春花似錦坐桩、人聲如沸尺棋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)陡鹃。三九已至,卻和暖如春抖坪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闷叉。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工擦俐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人握侧。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓蚯瞧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親品擎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子埋合,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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