如何學好資料結構和演算法

edithfang發表於2014-10-30
資料結構和演算法是電腦科學中最重要的課程,作為一名Google的軟體工程師,我經常看到一些求職者或剛畢業的學生,他們對於資料結構和演算法的學習是遠遠不夠的。這不是說他們看的書是有問題的,或教授們教錯了內容,而是學生對這個課程的理解是不到位的。
      
紮實掌握資料結構和演算法的關鍵並不是要對每一種資料結構和它的子形式都做詳盡的調查,然後記住它們的時間複雜度和空間複雜度。記住這些看起來很棒,也很吸引人,但說實話,你在實際中很少會用到它們。不管怎樣,在你的職業生涯中都不會讓你實現一個紅黑樹結點刪除的演算法,但是,你必須要做到而且輕鬆的發現在什麼時候你需要用二叉搜尋樹來解決問題,這個是你經常要用到的技能。



所以,停止背誦那些沒用的東西吧,從現在開始學好下面這兩件基本並且重要的事情:
     
1.形象化資料結構。

直觀的理解某種資料結構是什麼樣的,使用起來是什麼樣的,在抽象和實際的記憶體中是如何儲存的。這是一件單獨的並且很重要的事情,從最簡單的棧和佇列到很複雜的平衡樹。你可以把它們畫出來,直觀地展現在你腦海裡,無論你用什麼方式,最重要的就是你要直觀地去理解。
       
2.知道在自己的程式碼中何時,並如何去使用這些不同的資料結構和演算法。

這一點對於學生來說可能有點難,因為在他們的作業中不需要思考這些。沒有關係,你以後會意識到如果你不參加一個實際的專案,你就永遠不會理解資料結構,你也不會發現雜湊演算法是你解決效能問題的方法。但是,即使是學生,你也應該學習一些實用性強的內容,比如什麼時候用雜湊表?什麼時候用樹結構?什麼時候最小堆是最好的解決方案?
      
在Google面試時,我會問一個可以把二叉搜尋樹作為潛在答案的問題,一個較好的回答可以在幾分鐘後就可以想到二叉搜尋樹,並順著它用10-15分鐘去解決那些我設定的問題,最終得出答案。但是有一次,我遇到了一個更優秀的面試者,他很形象地理解了樹的概念,可以直觀地把我的問題展現出來,他可能會被演算法精確的複雜度卡住,但是他可以一直在解決問題,因為他做到了把“樹結構”直觀的展現出來。他最終也得到了這個職位。

希望大家在學習資料結構和演算法時,專注於理解並運用它們,而不是僅僅背誦演算法的內容和複雜度。

原文:http://www.quora.com/How-do-I-strengthen-my-knowledge-of-data-structures-and-algorithms/answer/Robert-Love-1

(翻譯:PHP100_Zeroing)
來自:PHP100
相關閱讀
評論(1)

相關文章