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