學習資料結構與演算法心得
經過一段時間的資料結構與演算法的學習,和學習了前人的經驗,為了更好的指導自己(希望也能幫助到別人)之後資料結構與演算法的學習,總結一下資料結構與演算法學習的方法。
一、記住資料結構,記住演算法思想(是什麼)
我覺得這個是資料結構與演算法學習最基礎的部分。
學完之後,你至少得能給人說明白,什麼是”堆疊“,什麼是”平衡二叉樹“等等等吧。我之所以說”記住“,是希望這些能夠形成長久記憶,儲存到你的”硬碟“裡,而不僅僅在學習的時候過了一遍你的”記憶體“。還有一個問題,什麼才叫”記住資料結構“。我覺得,第一步,資料結構最直觀的東西你得記住吧(如標題背景圖,來自資料結構和演算法動態視覺化 (Chinese))。這種直觀的記憶可能在不知不覺中就完成了,但為了更好的記住,還需去刻意記憶和偶爾的複習。第二步,你得記憶該資料結構的定義與性質與特點等等等吧。例如,學習哈夫曼樹的時候。哈夫曼樹的定義:WPL(帶權路徑長度)最小的二叉樹;哈夫曼樹的特點:(1)沒有度為1的結點(2)n個葉子結點的哈夫曼樹共有2n-1個結點(3)哈夫曼樹的任意非葉節點的左右子樹交換後仍是哈夫曼樹。關於”資料結構“,需要記憶的內容也需要自己在其中慢慢領悟。
至於”記住演算法思想“,舉個例子,思考我們如何構造一個”哈夫曼樹“。當然,在知道它的定義後,我們可以自己去設計一個演算法。如果,自己可以想出來,恭喜你。如果自己沒想到,再看到先人的解決辦法後,不是僅僅“驚歎”一聲,更要去記住它。
我強調“記住”,並沒有死記硬背的意思,而是,很多東西的理解和創新都是以記憶為前提的。
二、進行大量相關程式設計練習,用程式語言去實現某一資料結構上的演算法(怎麼辦)
就我而言,這個過程是最難的。很多時候,理解一個演算法很容易,很容易在紙上去模擬一個演算法的實現過程。但,具體實現,則是另一回事。一定得先自己思考,然後再去看書中給的程式語言實現。在我看來,這一過程已經不屬於“資料結構與演算法”的內容了。而是你綜合素質的體現,如何真正理解問題和用程式設計技巧實現,很考驗自己。這一過程,很難靠記憶。而在不斷敲程式碼的過程中去體會一些直覺上的東西。如何用遞迴解決問題,如何使用迴圈,如何使用”哨兵”等等等等。當然,敲完後需要去思考總結,看看能不能總結出一些”小套路“並記住。
三、”記住“特定情景下,利用某一特定的資料結構,去解決問題 (為什麼+怎麼辦)
每介紹一種資料結構,浙大資料結構與演算法的MOOC課程都會有一個實際問題來作為“引子”,回答了“這種資料結構為什麼會出現”。有的是為了實現特定的操作,有的是為了時間和空間上(大部分考慮的是時間複雜性)效率的更高(所以,沒事的時候,分析一下演算法的時間複雜性)。這些東西,我們也須理解記憶。每一資料結構都有其特性,去解決某一類問題,我們需要去記憶,去感悟。
最後,在學習過程中,如何形成一個屬於自己的知識體系(準備在“印象筆記”中單開一個“資料結構與演算法”的筆記本);如何去“記住”(記好筆記,多多複習);在學習過程中,遇到挫折,產生挫敗感該如何處理(這個是必然會發生的,總有難以理解不會的地方);如何進行心態方面的調整(欲速則不達,不過也有”敏捷學習“的概念)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31513645/viewspace-2747303/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構學習心得資料結構
- 關於資料結構的學習心得資料結構
- 資料結構與演算法學習-陣列資料結構演算法陣列
- 資料結構與演算法學習-開篇資料結構演算法
- 學習JavaScript資料結構與演算法 (一)JavaScript資料結構演算法
- 資料結構與演算法學習-連結串列上資料結構演算法
- 資料結構與演算法學習-連結串列下資料結構演算法
- 資料結構與演算法學習總結--遞迴資料結構演算法遞迴
- 《資料結構與演算法之美》資料結構與演算法學習書單 (讀後感)資料結構演算法
- 學習javascript資料結構與演算法(六)——圖JavaScript資料結構演算法
- 資料結構與演算法-學習筆記(16)資料結構演算法筆記
- 資料結構與演算法學習筆記01資料結構演算法筆記
- 資料結構與演算法-學習筆記(二)資料結構演算法筆記
- 在 JavaScript 中學習資料結構與演算法JavaScript資料結構演算法
- 演算法與資料結構學習路線圖演算法資料結構
- 《學習JavaScript資料結構與演算法》閱讀總結JavaScript資料結構演算法
- 資料結構與演算法學習-複雜度分析資料結構演算法複雜度
- 我是如何學習資料結構與演算法的?資料結構演算法
- 《資料結構與演算法JavaScript描述》選讀:為什麼要學習資料結構和演算法資料結構演算法JavaScript
- 資料結構與演算法分析學習筆記(四) 棧資料結構演算法筆記
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 《資料結構與演算法之美》為什麼要學習資料結構和演算法 (讀後感)資料結構演算法
- 前端學習 資料結構與演算法 快速入門 系列 —— 連結串列前端資料結構演算法
- 前端學習 資料結構與演算法 快速入門 系列 —— 棧前端資料結構演算法
- 資料結構學習資料結構
- 《資料結構與演算法之美》如何抓住重點,系統高效地學習資料結構與演算法 (讀後感)資料結構演算法
- 資料結構與演算法資料結構演算法
- 《資料結構與演算法之美》學習筆記之開篇資料結構演算法筆記
- 前端學習 資料結構與演算法 快速入門 系列 —— 陣列前端資料結構演算法陣列
- 前端學習 資料結構與演算法 快速入門 系列 —— 遞迴前端資料結構演算法遞迴
- 資料結構:初識(資料結構、演算法與演算法分析)資料結構演算法
- 《學習JavaScript資料結構與演算法》——前端工程師演算法入門JavaScript資料結構演算法前端工程師
- 資料結構學習之樹結構資料結構
- 資料結構和演算法-學習筆記(一)資料結構演算法筆記
- 通過動畫學習演算法和資料結構動畫演算法資料結構
- 資料結構學習筆記-佛洛依德演算法資料結構筆記演算法
- 資料結構與演算法:圖形結構資料結構演算法
- 《資料結構與演算法之美》學習筆記之複雜度資料結構演算法筆記複雜度