【算法】常用的数据结构与算法
學(xué)習(xí)了王爭(zhēng)老師的數(shù)據(jù)結(jié)構(gòu)與算法之美之后,比較有感觸,他把我們常用的數(shù)據(jù)結(jié)構(gòu)和算法都講了一遍,而且講的還不錯(cuò)。整理匯總一下作為筆記。
一.復(fù)雜度分析
非常重要。我們必須掌握,基本上要做到,簡(jiǎn)單代碼能很快分析出時(shí)間、空間復(fù)雜度;對(duì)于復(fù)雜點(diǎn)的代碼,比如遞歸代碼,也要掌握這兩種分析方法:遞推公式和遞歸樹。
難易程度:Medium
是否重點(diǎn):10 分
掌握程度:能自行分析大部分?jǐn)?shù)據(jù)結(jié)構(gòu)和算法的時(shí)間、空間復(fù)雜度
二.數(shù)組、棧、隊(duì)列
這一部分內(nèi)容非常簡(jiǎn)單,初學(xué)者學(xué)起來(lái)也不會(huì)很難。但是,作為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),數(shù)組、棧、隊(duì)列,是后續(xù)很多復(fù)雜數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ),所以,這些內(nèi)容我們一定要掌握。
難易程度:Easy
是否重點(diǎn):8 分
掌握程度:能自己實(shí)現(xiàn)動(dòng)態(tài)數(shù)組、棧、隊(duì)列
三.鏈表
鏈表非常重要!雖然理論內(nèi)容不多,但鏈表上的操作卻很復(fù)雜。所以,我們經(jīng)常會(huì)被考察,一定要掌握。而且,我們這里說(shuō)“掌握”不只是能看懂相關(guān)的內(nèi)容,還能將相關(guān)的經(jīng)典鏈表題目,比如鏈表反轉(zhuǎn)、求中間結(jié)點(diǎn)等,輕松無(wú) bug 地實(shí)現(xiàn)出來(lái)。
難易程度:Medium
是否重點(diǎn):9 分
掌握程度:能輕松寫出經(jīng)典鏈表題目代碼
四.遞歸
對(duì)于初學(xué)者來(lái)說(shuō),遞歸代碼非常難掌握,不管是讀起來(lái),還是寫起來(lái)。但是,這道坎你必須要跨過(guò),跨不過(guò)就不能算是入門數(shù)據(jù)結(jié)構(gòu)和算法。我們后面講到的很多數(shù)據(jù)結(jié)構(gòu)和算法的代碼實(shí)現(xiàn),都要用到遞歸。
遞歸相關(guān)的理論知識(shí)也不多,所以還是要多練。你可以先在網(wǎng)上找些簡(jiǎn)單的題目練手,比如斐波那契數(shù)列、求階乘等,然后再慢慢過(guò)渡到更加有難度的,比如歸并排序、快速排序、二叉樹的遍歷、求高度,最后是回溯八皇后、背包問(wèn)題等。
難易程度:Hard
是否重點(diǎn):10 分
掌握程度:輕松寫出二叉樹遍歷、八皇后、背包問(wèn)題、DFS 的遞歸代碼
五.排序、二分查找
這一部分并不難,我們只需要能看懂相關(guān)的內(nèi)容即可。
難易程度:Easy
是否重點(diǎn):7 分
掌握程度:能自己把各種排序算法、二分查找及其變體代碼寫一遍就可以了
六.跳表
對(duì)于初學(xué)者來(lái)說(shuō),并不需要非得掌握跳表,所以,如果沒(méi)有精力,這一章節(jié)可以先跳過(guò)。
難易程度:Medium
是否重點(diǎn):6 分
掌握程度:初學(xué)者可以先跳過(guò)。如果感興趣,看懂相關(guān)內(nèi)容即可,不需要掌握代碼實(shí)現(xiàn)
七.散列表
總體上來(lái)講,這塊內(nèi)容理解起來(lái)并不難。但是,作為一種應(yīng)用非常廣泛的數(shù)據(jù)結(jié)構(gòu),我們還是要掌握牢固散列表。
難易程度:Medium
是否重點(diǎn):8 分
掌握程度:對(duì)于初學(xué)者來(lái)說(shuō),自己能代碼實(shí)現(xiàn)一個(gè)拉鏈法解決沖突的散列表即可
八. 哈希算法
這部分純粹是為了開拓思路,初學(xué)者可以略過(guò)。
難易程度:Easy
是否重點(diǎn):3 分
掌握程度:可以暫時(shí)不看
九. 二叉樹
這一部分非常重要!二叉樹經(jīng)常會(huì)被考到,所以要重點(diǎn)掌握。但是我這里說(shuō)的二叉樹,并不包含紅黑樹的內(nèi)容。紅黑樹我們待會(huì)再講。
難易程度:Medium
是否重點(diǎn):9 分
掌握程度:能代碼實(shí)現(xiàn)二叉樹的三種遍歷算法、按層遍歷、求高度等經(jīng)典二叉樹題目
十.紅黑樹
對(duì)于初學(xué)者來(lái)說(shuō),這一節(jié)課完全可以不看。
難易程度:Hard
是否重點(diǎn):3 分
掌握程度:初學(xué)者不用把時(shí)間浪費(fèi)在上面
十一.B+ 樹
雖然 B+ 樹也算是比較高級(jí)的一種數(shù)據(jù)結(jié)構(gòu)了,但是對(duì)初學(xué)者來(lái)說(shuō),也不是重點(diǎn)。有時(shí)候還是會(huì)被考察的,所以這一部分內(nèi)容,我們能看懂相關(guān)的講解就可以了。
難易程度:Medium
是否重點(diǎn):5 分
掌握程度:可看可不看
十二.堆與堆排序
這一部分內(nèi)容不是很難,初學(xué)者也是要掌握的。
難易程度:Medium
是否重點(diǎn):8 分
掌握程度:能代碼實(shí)現(xiàn)堆、堆排序,并且掌握堆的三種應(yīng)用(優(yōu)先級(jí)隊(duì)列、Top k、中位數(shù))
十三.圖的表示
圖的內(nèi)容很多,但是初學(xué)者不需要掌握那么多。一般不怎么考察。但是,最基本圖的概念、表示方法還是要掌握的。
難易程度:Easy
是否重點(diǎn):8 分
掌握程度:理解圖的三種表示方法(鄰接矩陣、鄰接表、逆鄰接表),能自己代碼實(shí)現(xiàn)
十四. 深度廣度優(yōu)先搜索
這算是圖上最基礎(chǔ)的遍歷或者說(shuō)是搜索算法了,所以還是要掌握一下。這兩種算法的原理都不難哈,但是代碼實(shí)現(xiàn)并不簡(jiǎn)單,一個(gè)用到了隊(duì)列,另一個(gè)用到了遞歸。對(duì)于初學(xué)者來(lái)說(shuō),看懂這兩個(gè)代碼實(shí)現(xiàn)就是一個(gè)挑戰(zhàn)!可以等到其他更重要的內(nèi)容都掌握之后,再來(lái)挑戰(zhàn),也是可以的。
難易程度:Hard
是否重點(diǎn):8 分
掌握程度:能代碼實(shí)現(xiàn)廣度優(yōu)先、深度優(yōu)先搜索算法
十五. 拓?fù)渑判颉⒆疃搪窂健* 算法
這幾個(gè)算法稍微高級(jí)點(diǎn)。如果你能輕松實(shí)現(xiàn)深度、廣度優(yōu)先搜索,那看懂這三個(gè)算法不成問(wèn)題。不過(guò),這三種算法不是重點(diǎn)。我們不會(huì)被考察的。
難易程度:Hard
是否重點(diǎn):5 分
掌握程度:有時(shí)間再看,暫時(shí)可以不看
十六.字符串匹配(BF、RK)
BF 非常簡(jiǎn)單,RK 稍微復(fù)雜點(diǎn),但都不難。這個(gè)最好還是掌握下。
難易程度:Easy
是否重點(diǎn):7 分
掌握程度:能實(shí)踐 BF 算法,能看懂 RK 算法
十七.字符串匹配(BM、KMP、AC 自動(dòng)機(jī))
這三個(gè)算法都挺難的,對(duì)于算法有一定基礎(chǔ)的人來(lái)說(shuō),看懂也不容易。所以,對(duì)于初學(xué)者來(lái)說(shuō),千萬(wàn)別浪費(fèi)時(shí)間在這上面。即便有余力,看懂就好了,不用非得能自己實(shí)現(xiàn)。
難易程度:Hard
是否重點(diǎn):3 分
掌握程度:初學(xué)者不用把時(shí)間浪費(fèi)在上面
十八.字符串匹配(Trie)
這個(gè)還是要能看懂,不過(guò)不需要能代碼實(shí)現(xiàn)。有些人喜歡考這個(gè)東西,主要是結(jié)合應(yīng)用場(chǎng)景來(lái)考察,只是看你知不知道要用 Trie 樹這個(gè)東西。
難易程度:Medium
是否重點(diǎn):7 分
掌握程度:能看懂,知道特點(diǎn)、應(yīng)用場(chǎng)景即可,不要求代碼實(shí)現(xiàn)
十九.位圖
位圖不是重點(diǎn),如果有余力最好掌握一下。
難易程度:Easy
是否重點(diǎn):6 分
掌握程度:看懂即可,能自己實(shí)現(xiàn)一個(gè)位圖結(jié)構(gòu)最好
二十.四種算法思想
這個(gè)是重點(diǎn),也是難點(diǎn)。貪心、分治、回溯、動(dòng)態(tài)規(guī)劃,每一個(gè)都不簡(jiǎn)單,其中動(dòng)態(tài)規(guī)劃又是最難、最燒腦的。要攀登大山,必須拿下這塊內(nèi)容。但是呢,學(xué)習(xí)要循序漸進(jìn),這塊內(nèi)容的學(xué)習(xí)可以放到最后,做個(gè)長(zhǎng)時(shí)間的學(xué)習(xí)計(jì)劃來(lái)攻克。這塊內(nèi)容理論的東西不多,要想真的掌握,還是要大量刷題。
難易程度:Hard
是否重點(diǎn):10 分
掌握程度:可以放到最后,但是一定要掌握!做到能實(shí)現(xiàn) Leetcode 上 Medium 難度的題目
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯黃海廣老師《機(jī)器學(xué)習(xí)課程》視頻課
本站qq群851320808,加入微信群請(qǐng)掃碼:
總結(jié)
以上是生活随笔為你收集整理的【算法】常用的数据结构与算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Windows平台RTMP直播推送集成简
- 下一篇: Android平台基于RTMP或RTSP