刷爆Leetcode!字節(jié)算法大佬進(jìn)階專屬算法筆記:GitHub標(biāo)星97k+
數(shù)據(jù)結(jié)構(gòu)與算法
數(shù)據(jù)結(jié)構(gòu)就是指一組數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。算法就是操作數(shù)據(jù)的一組方法。
數(shù)據(jù)結(jié)構(gòu)和算法是相輔相成的。數(shù)據(jù)結(jié)構(gòu)是為算法服務(wù)的,算法作用在特定的數(shù)據(jù)結(jié)構(gòu)之上。因此,我們無(wú)法孤立數(shù)據(jù)結(jié)構(gòu)來(lái)講算法,也無(wú)法孤立算法來(lái)講數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)是靜態(tài)的,它只是組織數(shù)據(jù)的一種方式。如果不在它的基礎(chǔ)上操作、構(gòu)建算法,孤立存在的數(shù)據(jù)結(jié)構(gòu)就是沒(méi)用的。

數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系
程序=算法+數(shù)據(jù)結(jié)構(gòu)。算法的設(shè)計(jì)取決于數(shù)據(jù)的邏輯結(jié)構(gòu),算法的實(shí)現(xiàn)取決于數(shù)據(jù)的物理存儲(chǔ)結(jié)構(gòu)。所以說(shuō),數(shù)據(jù)結(jié)構(gòu)是算法實(shí)現(xiàn)的基礎(chǔ),算法總是要依賴某種數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)的。算法的操作對(duì)象是數(shù)據(jù)結(jié)構(gòu)。兩者是相輔相成的存在,是不可分割的關(guān)系。

好啦,接下來(lái)和小軒一起來(lái)看看算法的其中奧妙吧。
由于文章篇幅受限,部分內(nèi)容只能以截圖的方式展示出來(lái),需要完整版的小伙伴可以后臺(tái)私信【學(xué)習(xí)】或【筆記】獲取。
其次,我們來(lái)看一下內(nèi)容:
內(nèi)容涵蓋15大章節(jié):綜述,數(shù)組,簡(jiǎn)單排序,棧和隊(duì)列,鏈表,遞歸,高級(jí)排序,二叉樹(shù),紅-黑樹(shù),2-3-4樹(shù)和外部存儲(chǔ),哈希表,堆,圖,帶權(quán)圖,應(yīng)用場(chǎng)合,共30W字。
綜述
第Ⅰ章“綜述”,給讀者一個(gè)各主題的總體印象并介紹少量后面要用到的術(shù)語(yǔ)。對(duì)于那些面向?qū)ο缶幊滩惶煜さ淖x者,本章總結(jié)了一些相關(guān)的知識(shí)。對(duì)于那些知道C++而不熟悉Java的程序員,本章對(duì)這兩種語(yǔ)言的主要差別進(jìn)行了描述。

數(shù)組
第⒉章“數(shù)組”。集中討論數(shù)組。這里面包含有兩層意思:如何使用類來(lái)對(duì)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)進(jìn)行封裝和類的接口。其中包括數(shù)組和有序數(shù)組的查找、插入、刪除、線性查找和二分查找。專題 apple通過(guò)對(duì)無(wú)序和有序的數(shù)組進(jìn)行操作來(lái)解釋上述算法。

簡(jiǎn)單排序
第3章“簡(jiǎn)單排序”介紹三種簡(jiǎn)單的(但是慢速的)排序方法:冒泡排序、選擇排序和插入排序。每一種排序都有一個(gè)相應(yīng)的專題applet.

棧和隊(duì)列
第4章“棧和隊(duì)列”涉及到三種可以被認(rèn)為是抽象數(shù)據(jù)類型(ADT)的數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)和優(yōu)先級(jí)隊(duì)列。這些結(jié)構(gòu)在本書中大量重復(fù)出現(xiàn),是許多算法的基礎(chǔ)。每一種結(jié)構(gòu)都有一個(gè)相應(yīng)的專題applet.ADT的概念也會(huì)在本章中討論。

鏈表
第5章“鏈表”介紹了鏈表中的雙向鏈表和雙端鏈表。本章還解釋了Java中被稱作“無(wú)痛指針”的使用,并用一個(gè)專題applet演示了鏈表的插入、查找和刪除是如何進(jìn)行的。

遞歸
第6章“遞歸”探索了遞歸的知識(shí),這是書中僅有的非數(shù)據(jù)結(jié)構(gòu)的幾章之一。本章給出了大量的遞歸例子,包括漢諾塔問(wèn)題和歸并排序,它們都有相應(yīng)的專題applet。

高級(jí)排序
第7章“高級(jí)排序”研究了幾種高級(jí)的排序方法:希爾排序和快速排序。專題applet演示了希爾排序,快速排序的基礎(chǔ)—?jiǎng)澐? partitioning)和兩種形式的快速排序。

二叉樹(shù)
第8章“二叉樹(shù)”開(kāi)始了對(duì)樹(shù)的探索。本章中介紹了最簡(jiǎn)單最通用的樹(shù)型結(jié)構(gòu):不平衡的二叉搜索樹(shù)。一個(gè)專題applet演示了此類樹(shù)的插入、別除和遍歷是如何進(jìn)行的。

紅-黑樹(shù)
第9章“紅-黑樹(shù)”解釋了紅-黑樹(shù),它是最有效的平衡樹(shù)之一。專題applet 演示了平衡這種樹(shù)所需的旋轉(zhuǎn)和顏色轉(zhuǎn)換。

2-3-4樹(shù)和外部存儲(chǔ)
第10章“2-3-4樹(shù)和外部存儲(chǔ)”將2-3-4樹(shù)作為多叉樹(shù)的一個(gè)例子進(jìn)行了講解。專題applet 會(huì)演示它們是如何工作的。我們還將討論2-3樹(shù)和2-3-4樹(shù)與B樹(shù)的關(guān)系,這些知識(shí)對(duì)于存儲(chǔ)外部(磁盤)的文件十分有用。

哈希表
第11章“哈希表”轉(zhuǎn)到哈希表這個(gè)新的討論領(lǐng)域。專題applet演示了幾種方法:線性、二次探測(cè)和再哈希及鏈接地址法。本章中還討論了哈希表方法在組織外部文件方面的應(yīng)用。

堆
第12章“堆”討論了一種特殊的樹(shù)——堆,用它作為優(yōu)先隊(duì)列的一種有效的實(shí)現(xiàn)手段。

圖與帶權(quán)圖
第13章“圖”和第14章“帶權(quán)圖”處理圖的相關(guān)問(wèn)題,前者處理未加權(quán)圖和簡(jiǎn)單地查找算法,后者處理未加權(quán)圖和更加復(fù)雜的算法,如最小生成樹(shù)和最短路徑。


應(yīng)用場(chǎng)合
第15章“應(yīng)用場(chǎng)合”總結(jié)了前幾章描述過(guò)的各種數(shù)據(jù)結(jié)構(gòu),還著重討論了如何在給定情況下用合適的數(shù)據(jù)結(jié)構(gòu)的問(wèn)題。

好啦,今天的分享就到這啦。我們下次再見(jiàn)!
由于文章篇幅受限,部分內(nèi)容只能以截圖的方式展示出來(lái),需要完整版PDF的小伙伴可以點(diǎn)贊+轉(zhuǎn)發(fā),關(guān)注我后私信【學(xué)習(xí)】獲取。
本文就是愿天堂沒(méi)有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學(xué)習(xí)更多的話可以到微信公眾號(hào)里找我,我等你哦。
