通過一段時間的數據結構與算法的學習,和學習了前人的經驗,爲了更好的指導本身(但願也能幫助到別人)以後數據結構與算法的學習,總結一下數據結構與算法學習的方法。以及推薦你們看看一套學習教程,有助於快速入門:https://4m.cn/7MHVd
1、記住數據結構,記住算法思想(是什麼)算法
我以爲這個是數據結構與算法學習最基礎的部分。
學完以後,你至少得能給人說明白,什麼是」堆棧「,什麼是」平衡二叉樹「等等等吧。我之因此說」記住「,是但願這些可以造成長久記憶,存儲到你的」硬盤「裏,而不單單在學習的時候過了一遍你的」內存「。還有一個問題,什麼才叫」記住數據結構「。我以爲,第一步,數據結構最直觀的東西你得記住吧(如標題背景圖,來自數據結構和算法動態可視化 (Chinese))。這種直觀的記憶可能在不知不覺中就完成了,但爲了更好的記住,還需去刻意記憶和偶爾的複習。第二步,你得記憶該數據結構的定義與性質與特色等等等吧。例如,學習哈夫曼樹的時候。哈夫曼樹的定義:WPL(帶權路徑長度)最小的二叉樹;哈夫曼樹的特色:(1)沒有度爲1的結點(2)n個葉子結點的哈夫曼樹共有2n-1個結點(3)哈夫曼樹的任意非葉節點的左右子樹交換後還是哈夫曼樹。關於」數據結構「,須要記憶的內容也須要本身在其中慢慢領悟。
至於」記住算法思想「,舉個例子,思考咱們如何構造一個」哈夫曼樹「。固然,在知道它的定義後,咱們能夠本身去設計一個算法。若是,本身能夠想出來,恭喜你。若是本身沒想到,再看到先人的解決辦法後,不是僅僅「驚歎」一聲,更要去記住它。
我強調「記住」,並無死記硬背的意思,而是,不少東西的理解和創新都是以記憶爲前提的。編程
2、進行大量相關編程練習,用編程語言去實現某一數據結構上的算法(怎麼辦)
就我而言,這個過程是最難的。不少時候,理解一個算法很容易,很容易在紙上去模擬一個算法的實現過程。但,具體實現,則是另外一回事。必定得先本身思考,而後再去看書中給的編程語言實現。在我看來,這一過程已經不屬於「數據結構與算法」的內容了。而是你綜合素質的體現,如何真正理解問題和用編程技巧實現,很考驗本身。這一過程,很難靠記憶。而在不斷敲代碼的過程當中去體會一些直覺上的東西。如何用遞歸解決問題,如何使用循環,如何使用"哨兵」等等等等。固然,敲完後須要去思考總結,看看能不能總結出一些」小套路「並記住。數據結構
3、」記住「特定情景下,利用某一特定的數據結構,去解決問題 (爲何+怎麼辦)
每介紹一種數據結構,浙大數據結構與算法的MOOC課程都會有一個實際問題來做爲「引子」,回答了「這種數據結構爲何會出現」。有的是爲了實現特定的操做,有的是爲了時間和空間上(大部分考慮的是時間複雜性)效率的更高(因此,沒事的時候,分析一下算法的時間複雜性)。這些東西,咱們也須理解記憶。每一數據結構都有其特性,去解決某一類問題,咱們須要去記憶,去感悟。
最後,在學習過程當中,如何造成一個屬於本身的知識體系(準備在「印象筆記」中單開一個「數據結構與算法」的筆記本);如何去「記住」(記好筆記,多多複習);在學習過程當中,遇到挫折,產生挫敗感該如何處理(這個是必然會發生的,總有難以理解不會的地方);如何進行心態方面的調整(欲速則不達,不過也有」敏捷學習「的概念)。固然這邊能夠推薦你們看看這套教程, 讓你少走彎路,少花時間 :4m.cn/7MHVd數據結構和算法