如何開始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法
今天,由于高級(jí)語(yǔ)言的進(jìn)步,您可以在不深入研究這些概念的情況下開始編程生涯。這既是好事也是壞事。
一方面,你可以加快學(xué)習(xí)編碼的速度,減少基本工作的挫敗感。大多數(shù)著名的數(shù)據(jù)結(jié)構(gòu)、算法和設(shè)計(jì)模式都融入了流行的編程語(yǔ)言。另一方面,不知道幕后發(fā)生了什么會(huì)導(dǎo)致選擇錯(cuò)誤的解決方案和技術(shù),并編寫出不是最佳的代碼。
對(duì)于自學(xué)者來(lái)說(shuō)尤其如此,自學(xué)者在開發(fā)者社區(qū)中占了相當(dāng)大的比例。有一段時(shí)間,我一直在尋找一本關(guān)于數(shù)據(jù)結(jié)構(gòu)和算法的入門書籍。
學(xué)習(xí)基礎(chǔ)知識(shí)
雖然這個(gè)名字聽起來(lái)有點(diǎn)傻(對(duì)于編程,我喜歡非常平淡的名字,比如“機(jī)器學(xué)習(xí)入門”或“高級(jí)JavaScript安全性”),有趣的數(shù)據(jù)結(jié)構(gòu)實(shí)際上很有深度。
這本書從計(jì)算機(jī)體系結(jié)構(gòu)的一些基礎(chǔ)知識(shí)開始,包括內(nèi)存結(jié)構(gòu),變量和數(shù)組是如何存儲(chǔ)的,數(shù)據(jù)結(jié)構(gòu)是什么樣子的,等等。請(qǐng)注意,JavaScript和Python等高級(jí)語(yǔ)言使用自己的動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)范例,您需要查看它們的詳細(xì)文檔(例如,V8引擎中的內(nèi)存存儲(chǔ))。然而,了解內(nèi)存存儲(chǔ)的基本原理總是很有幫助的。
帶你了解所有主要的算法。您將了解流行的搜索算法,如快速排序、樹排序和冒泡排序。您還將了解主要數(shù)據(jù)結(jié)構(gòu)的機(jī)制,如鏈表、雙向鏈表、堆棧、堆、四叉樹和八叉樹。
即使您不打算手動(dòng)實(shí)現(xiàn)這些算法和數(shù)據(jù)結(jié)構(gòu),了解它們也是很重要的。例如,有幾種方法可以存儲(chǔ)數(shù)組和索引列表。這些數(shù)據(jù)類型的接口在很大程度上是重疊的,在某些情況下它們可以互換使用。但是他們使用的算法是非常不同的,這可能導(dǎo)致不同的性能水平取決于你如何使用它們。每種語(yǔ)言的文檔通常會(huì)說(shuō)明哪種算法在每種類型的容器的幕后工作。
這些算法和結(jié)構(gòu)中的一些針對(duì)索引訪問(wèn)進(jìn)行了優(yōu)化,而另一些則適合順序訪問(wèn)。有些在規(guī)模靜態(tài)時(shí)性能更好,而有些則設(shè)計(jì)為動(dòng)態(tài)增長(zhǎng)。了解這些小細(xì)節(jié)非常重要,尤其是在處理非常大的數(shù)據(jù)集時(shí)。
因此,了解排序和存儲(chǔ)的機(jī)制將非常有助于為變量選擇最佳的存儲(chǔ)方法。(我必須再次指出,不同的語(yǔ)言在數(shù)據(jù)存儲(chǔ)方面有各自的細(xì)微差別,但基本思想是相同的。)
有趣的例子
我喜歡的一件事是有趣的數(shù)據(jù)結(jié)構(gòu)庫(kù)比卡展示例子的方式。在整本書中,你會(huì)看到一些關(guān)于咖啡豆的假設(shè)例子來(lái)解釋復(fù)雜的軟件概念。
Kubica使用類似Python的偽代碼來(lái)顯示例子,有好有壞。一方面,這些例子很容易瀏覽,尤其是當(dāng)它們變長(zhǎng)的時(shí)候。另一方面,您必須自己完成完整的實(shí)現(xiàn)。話又說(shuō)回來(lái),這并不是一件太糟糕的事情,因?yàn)樗仁鼓憔帉懽约旱拇a并更好地學(xué)習(xí)。
期間有趣的數(shù)據(jù)結(jié)構(gòu)不是數(shù)據(jù)結(jié)構(gòu)和算法的最終指南,顧名思義,它是一個(gè)有趣的主題介紹。作為一個(gè)多次研究和實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和算法的人,我發(fā)現(xiàn)這本書令人耳目一新,尤其是在一些更高級(jí)的主題上,如跳過(guò)列表和bloom filters。
Kubica的書可能是一個(gè)很好的開端,讓你踏上深入探索數(shù)據(jù)結(jié)構(gòu)和算法的旅程。
- 上一篇
應(yīng)用程序現(xiàn)代化的神話
公司已經(jīng)開始認(rèn)識(shí)到軟件是對(duì)抗殘酷競(jìng)爭(zhēng)的戰(zhàn)略性公司資產(chǎn)。今天,現(xiàn)代化不再僅僅是以軟件為中心的組織的事情。該方法還跨越多個(gè)職能部門。幾個(gè)誤區(qū),阻礙了組織認(rèn)識(shí)到應(yīng)用程序現(xiàn)代化的需要,并阻礙了它們的長(zhǎng)期發(fā)展。
- 下一篇
負(fù)責(zé)任的人工智能和生成性人工智能的興起
隨著一年的結(jié)束和另一年的開始,我們花時(shí)間回顧這一年的成就和變化,空前的勞工行動(dòng)和越來(lái)越多的極端天氣事件。這是一個(gè)動(dòng)蕩的時(shí)代。
相關(guān)資訊
- 大數(shù)據(jù)分析的理解和探索
- 物聯(lián)網(wǎng)如何推動(dòng)房地產(chǎn)領(lǐng)域的智能
- 為云計(jì)算實(shí)現(xiàn)遺留應(yīng)用程序現(xiàn)代化
- 區(qū)塊鏈和數(shù)字貨幣對(duì)于社交和網(wǎng)絡(luò)
- 全球物聯(lián)網(wǎng)市場(chǎng)規(guī)模將在2023年增
- 物聯(lián)網(wǎng)技術(shù)正在改變音樂(lè)產(chǎn)業(yè)
- 網(wǎng)絡(luò)洞察2023 | Web3的到來(lái)
- 數(shù)字化轉(zhuǎn)型中數(shù)據(jù)建模的問(wèn)題分析
- 網(wǎng)絡(luò)性能優(yōu)化:如何減少延遲和提高
- 智能體熱潮:大模型引領(lǐng)人機(jī)交互的