學習資料結構與演算法心得

八戒程式猿發表於2021-01-04

經過一段時間的資料結構與演算法的學習,和學習了前人的經驗,為了更好的指導自己(希望也能幫助到別人)之後資料結構與演算法的學習,總結一下資料結構與演算法學習的方法。

一、記住資料結構,記住演算法思想(是什麼)

我覺得這個是資料結構與演算法學習最基礎的部分。
學完之後,你至少得能給人說明白,什麼是”堆疊“,什麼是”平衡二叉樹“等等等吧。我之所以說”記住“,是希望這些能夠形成長久記憶,儲存到你的”硬碟“裡,而不僅僅在學習的時候過了一遍你的”記憶體“。還有一個問題,什麼才叫”記住資料結構“。我覺得,第一步,資料結構最直觀的東西你得記住吧(如標題背景圖,來自資料結構和演算法動態視覺化 (Chinese))。這種直觀的記憶可能在不知不覺中就完成了,但為了更好的記住,還需去刻意記憶和偶爾的複習。第二步,你得記憶該資料結構的定義與性質與特點等等等吧。例如,學習哈夫曼樹的時候。哈夫曼樹的定義:WPL(帶權路徑長度)最小的二叉樹;哈夫曼樹的特點:(1)沒有度為1的結點(2)n個葉子結點的哈夫曼樹共有2n-1個結點(3)哈夫曼樹的任意非葉節點的左右子樹交換後仍是哈夫曼樹。關於”資料結構“,需要記憶的內容也需要自己在其中慢慢領悟。
至於”記住演算法思想“,舉個例子,思考我們如何構造一個”哈夫曼樹“。當然,在知道它的定義後,我們可以自己去設計一個演算法。如果,自己可以想出來,恭喜你。如果自己沒想到,再看到先人的解決辦法後,不是僅僅“驚歎”一聲,更要去記住它。
我強調“記住”,並沒有死記硬背的意思,而是,很多東西的理解和創新都是以記憶為前提的。

二、進行大量相關程式設計練習,用程式語言去實現某一資料結構上的演算法(怎麼辦)

就我而言,這個過程是最難的。很多時候,理解一個演算法很容易,很容易在紙上去模擬一個演算法的實現過程。但,具體實現,則是另一回事。一定得先自己思考,然後再去看書中給的程式語言實現。在我看來,這一過程已經不屬於“資料結構與演算法”的內容了。而是你綜合素質的體現,如何真正理解問題和用程式設計技巧實現,很考驗自己。這一過程,很難靠記憶。而在不斷敲程式碼的過程中去體會一些直覺上的東西。如何用遞迴解決問題,如何使用迴圈,如何使用”哨兵”等等等等。當然,敲完後需要去思考總結,看看能不能總結出一些”小套路“並記住。

三、”記住“特定情景下,利用某一特定的資料結構,去解決問題 (為什麼+怎麼辦)

每介紹一種資料結構,浙大資料結構與演算法的MOOC課程都會有一個實際問題來作為“引子”,回答了“這種資料結構為什麼會出現”。有的是為了實現特定的操作,有的是為了時間和空間上(大部分考慮的是時間複雜性)效率的更高(所以,沒事的時候,分析一下演算法的時間複雜性)。這些東西,我們也須理解記憶。每一資料結構都有其特性,去解決某一類問題,我們需要去記憶,去感悟。
最後,在學習過程中,如何形成一個屬於自己的知識體系(準備在“印象筆記”中單開一個“資料結構與演算法”的筆記本);如何去“記住”(記好筆記,多多複習);在學習過程中,遇到挫折,產生挫敗感該如何處理(這個是必然會發生的,總有難以理解不會的地方);如何進行心態方面的調整(欲速則不達,不過也有”敏捷學習“的概念)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31513645/viewspace-2747303/,如需轉載,請註明出處,否則將追究法律責任。

相關文章