資料結構與演算法 01 如何學習資料結構與演算法

2022-09-05 16:51:13 字數 1558 閱讀 4227

過於學術的概念定義比較抽象,難以理解。我們從廣義和狹義兩個層面,來理解資料結構與演算法這兩個概念。

從廣義上講,資料結構就是指一組資料的儲存結構(怎麼放)演算法就是運算元據的一組方法(怎麼用)

我們以圖書館的場景為例來進一步理解:

圖書館書籍量十分巨大,首先要分類設定閱覽室,譬如社科類、科技類、報刊類等。每個閱覽室內,再根據圖書的索引號排列擺放。這就是「資料結構」。當我們想借閱某本書時,可以到每個閱覽室去,一本一本地找,也可以通過檢索索引號,直接到對應的閱覽室去查詢。這些不同的查詢方式,其實就是「演算法」。

從狹義上講,是指某些典型的資料結構和演算法。比如佇列、棧、堆、二分查詢、動態規劃等。

資料結構和演算法這兩個概念,有點「焦不離孟,孟不離焦」的意思。我們之所以總是把它們放在一起,是因為資料結構和演算法是相輔相成的。資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。我們無法孤立資料結構來講演算法,也無法孤立演算法來講資料結構。資料結構是靜態的,它只是組織資料的一種方式。如果不在它的基礎上操作、構建演算法,孤立存在的資料結構是沒有用處的。

資料結構和演算法的目的是更省、更快地儲存和處理資料,因此需要乙個考量效率和資源消耗的方法,這就是複雜度分析。它是這門課的內功根基,一定要掌握。

我們首先來看一張框架圖,以便對資料結構與演算法建立整體認識:

作為非演算法工程師,並不需要掌握上圖所有知識點。很多高階的資料結構與演算法在日常開發中很少用到,比如二分圖、最大流等。學習要抓主要矛盾,攻克下面兩個「十大」,就足夠應對面試和日常工作了:

陣列、鍊錶、棧、佇列、雜湊表、二叉樹、堆、跳表、圖、trie 樹;

遞迴、排序、二分查詢、搜尋、雜湊演算法、貪心演算法、分治演算法、回溯演算法、動態規劃、字串匹配演算法。

掌握了這些基礎的資料結構和演算法,再學更加複雜的資料結構和演算法,就很容易上手。

學習資料結構和演算法,是非常好的思維訓練過程,不能死記硬背,要多辯證思考,多問為什麼。

抓住四個問題:

面試前刷題要適量,不要浪費太多時間。除非你要面試 google、facebook 這樣的公司,它們的演算法題目非常非常難,必須大量刷題,才能在短期內提公升應試正確率。如果是應對國內公司的技術面試,即便是 bat,只要熟練掌握原理,適度練習,就足以應對。

上大學時看新東方的單詞課,其中乙個觀念讓我受益匪淺:學習一定要設立詳盡的時間規劃,不要把戰線拉得太長,用集中的時間來完成學習。否則乙個學期過去,你可能還停留在 abandon。我認為這是個通用的道理,學習資料結構和演算法,也要給自己制定好時間規劃。

在枯燥的學習過程中,可以給自己設立乙個切實可行的目標,就像打怪公升級一樣。比如,每部分學完都寫一篇部落格,或者找找資料中講得有誤或者可以改善的地方。這樣可以使學習形成積極的反饋。

學習是反覆迭代、不斷沉澱的過程,不要期望一蹴而就。有些知識點學了一遍,不能透徹理解,這是正常的。反覆學習幾次,一定能「溫故而知新」。

資料結構 資料結構與演算法01

1 求一組整數中的最大值。演算法 基本操作是 比較兩個數的大小 模型 仔細想想 你並不知道這個整數到底是多大?整數過大你該怎麼去表示?2 足協的資料庫管理的程式 演算法 需要管理的專案?如何管理?使用者介面?模型 3 資料與資料結構 資料 所有能被輸入到計算機中,並被計算機處理的符號的集合計算機操作...

01 資料結構與演算法基礎 學習資料整理

1 時間複雜度 演算法的時間複雜度是指執行演算法所需要的時間。一般來說,計算機演算法是問題規模n 的函式f n 演算法的時間複雜度也因此記做。t n f n 因此,問題的規模n 越大,演算法執行的時間的增長率與f n 的增長率正相關,稱作漸進時間複雜度 2.空間複雜度 演算法的空間複雜度是指演算法需...

資料結構 01 資料與資料結構

1.資料data 資料是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。2.資料元素data elements 資料元素是組成資料的 有一定意義的基本單位,在計算機中通常作為整體進行處理。3.資料物件data object 資料物件是性質相同的資料元素的...