算法與數據結構(二)如何學習

在上文 面試指北:算法與數據結構(一)開篇 中講了爲什麼學習算法與數據結構和它包括哪些內容。

概括來說,掌握算法與數據結構之後,我們會更容易跟上計算機潮流、更快了解其他框架底層原理、更可能進入理想的公司。

它包括:

  • 時間複雜度分析;
  • 空間複雜度分析;
  • 十個核心算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分支算法、回溯算法、動態規劃、字符串匹配算法;
  • 十個核心數據結構:數組、鏈表、棧、隊列、散列表、二叉樹、堆、跳錶、圖、Trie 數。

算法簡單來說就是處理數據的方法,數據結構爲表示、存儲數據的結構。算法和數據結構相輔相成。

其中複雜度分析是重中之重,任何代碼在理論上分析其性能都離不開復雜度分析。算法的主要目標是在如何更好的節省 CPU、內存資源的情況下,處理數據解決問題。而我們又不可能每次通過在機器上跑一下的方式來衡量一個算法。這就需要用到複雜度分析。而且在學習排序、查找等算法時,也必然會常常用到複雜度分析。

對於一個數據結構或者算法,我們也要去了解其發展歷史、自身有什麼特點、和另外一個相比有什麼異同、適合的問題場景、有什麼實際的應用等等。這樣才能從多個維度去了解一個知識點,更好的掌握記憶。

學習數據結構和算法只需要有高中數學和基礎編程知識即可。

1. 實踐:一定要動手寫

碰到一個排序算法或者查找算法,一定要自己儘量在不看示例代碼的情況下先寫一遍。然後和示例代碼對比,思考自己沒有考慮到的細節和自己代碼上能夠優化的點。然後在自己多寫幾遍,同時結合 LeetCode 上的題目,做兩三道相關題目。

近年來,無論是一萬小時定律,還是刻意練習。都在強調練習、實踐的重要性。通過練習,一方面是肌肉記憶加深印象;另一方面,只有在練習過程中,你才能觸碰到知識點的細節,讓你對其有所思考,進而加強相關的神經細胞。

2. 總結、分享

在學完知識之餘,也要花工夫去總結和分享。在這個過程中,你會發現自己薄弱的地方。因爲分享時你需要去考慮對方是否能夠理解你講的內容,曝露出自己的不瞭解的知識之後,你就會去補足這個缺少的知識,這樣不斷的慢慢的完善自己的知識體系。

分享出去之後,也能夠和讀者碰撞出一些思維的火花。已有的想法通過碰撞,產生新的想法,這是一件令人激動的事情。

費曼學習法中所強調的就是學習之後一定要教給別人,通過自己做老師這個過程,不斷的讓自己對這個知識點產生更加深入的理解、更加全面的理解,最終達到深入掌握知識的目的。

3. 慢慢來

學習不像打遊戲,會不斷獲得反饋,這恐怕是打遊戲停不下來的一個重大因素。任何知識的學習都需要一個沉澱的過程,你不可能一口喫成一個胖子。

碰到問題時一定不要氣餒和懷疑自己。因爲碰到問題這時每個人都會遇到,你並不孤獨。有很多事情我們當時不能理解,可以先把它放下,等一段時間的消化之後再來看看可能就會恍然大悟。這個時候你需要換個角度來看問題,我們一生會碰到很多問題,很多需要死磕才能解決的問題。這個時候就需要跨過去這個坎,掌握這個知識、工具,那就可以在以後的人生裏使用它,這樣看來,投入的那些精力是不是相當划算。

4. 使用工具

最後,爲了幫助大家更好的學習數據結果與算法,我開發了一個可視化小程序。在這個小程序上你可以可視化的看到比如快速排序算法的執行過程,把枯燥的代碼形象的展示或許會更好的幫助你學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章