labuladong的算法秘籍-階段總結(jié)
最近學(xué)習(xí)的知識(shí)點(diǎn)太多了,labuladong的算法秘籍、金字塔原理、認(rèn)知顛覆以及各種思維模型等等的知識(shí)點(diǎn),有點(diǎn)消化不良,決定把有些知識(shí)緩一緩放一放,按重要程度分類。金字塔原理>算法秘籍>認(rèn)知顛覆。
每學(xué)習(xí)完一章都要留一到兩天時(shí)間消化,將其加入自己的知識(shí)體系中,與舊知識(shí)產(chǎn)生聯(lián)系。避免學(xué)完就忘。
并且會(huì)整理以后學(xué)習(xí)的方法論。
學(xué)習(xí)labuladong的算法秘籍有段時(shí)間了。到目前為止,學(xué)習(xí)了以下內(nèi)容。
什么是數(shù)據(jù)結(jié)構(gòu)?
數(shù)據(jù)+結(jié)構(gòu)
數(shù)據(jù)(描述客觀事物的符號(hào))
結(jié)構(gòu)(組合的方式)
數(shù)據(jù)結(jié)構(gòu)即是研究數(shù)據(jù)組合的方式的學(xué)問
結(jié)構(gòu)分為物理結(jié)構(gòu)和邏輯結(jié)構(gòu)
物理結(jié)構(gòu)
1、順序存儲(chǔ):邏輯上相鄰的元素物理上也相鄰
2、鏈?zhǔn)酱鎯?chǔ):邏輯上相鄰的元素物理上不相鄰,使用一定的空間存儲(chǔ)下一個(gè)元素位置
順序存儲(chǔ)優(yōu)缺點(diǎn)
查詢方便,通過起始值計(jì)算得到任意元素的位置。
插入刪除不方便,需要移動(dòng)后續(xù)的元素。
鏈?zhǔn)酱鎯?chǔ)優(yōu)缺點(diǎn)
插入刪除方便,只需要改變下一個(gè)元素位置即可
查詢不方便,需要從頭遍歷
邏輯結(jié)構(gòu)
1、集合 元素之間沒有聯(lián)系,只是單純的集合
2、線性 元素之間存在一對(duì)一關(guān)系
3、樹形 元素之間存在一對(duì)多關(guān)系
4、圖形 元素之間存在多對(duì)多關(guān)系
按上述的說法,所有的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)就是數(shù)組和鏈表
現(xiàn)在回到算法秘籍
關(guān)于數(shù)組和鏈表的算法技巧
1、虛擬頭節(jié)點(diǎn):創(chuàng)建一個(gè)假的節(jié)點(diǎn),用來處理鏈表頭的邊界問題
2、雙指針:兩個(gè)指針
2.1、左右指針:兩個(gè)指針相背而行
2.2、快慢指針:兩個(gè)指針相向而行,一個(gè)在前一個(gè)在后,步調(diào)可以一致也可以不一致。
2.3、滑動(dòng)窗口:控制左右指針的間隔
動(dòng)態(tài)規(guī)劃
將問題分為幾個(gè)子問題,然后求解每個(gè)子問題,得到總解決方案
回溯算法
通過回退選擇,重新選擇。跟深度優(yōu)先遍歷有點(diǎn)類似。
深度優(yōu)先遍歷遍歷的節(jié)點(diǎn),回溯算法遍歷的路徑。
目前就這么多