如何高效學習數據結構與算法 《三鑽算法學習筆記》

前言

本文是個人基於覃超老師的《算法訓練營》的學習筆記,此筆記的內容都是學習後的個人記錄、個人總結、理解和思想。僅供參考學習。

很多同學在大學的時候會覺得數據結構與算法很枯燥,很多小夥伴都不願意聽這門課程。甚至以前還覺得能開發一個項目就能成爲一個合格的程序員。但是學會算法,或者接觸過數據結構與算法後,發現懂這門知識的程序員編寫出來的代碼相對有更高的質量。代碼的性能、寫法、底層邏輯和解決問題的能力都會高於不懂數據結構與算法的程序員。

到了如今,如果想成爲一個高級開發工程師或者進入大廠,不論崗位是前端、後端還是AI,算法都是重中之重。也無論我們需要進入的公司的崗位是否最後是做算法工程師,前提面試就需要考算法。所以小時不學算法,長大掉頭髮

這系列的《算法學習筆記》,與大家一起重溫或者學習數據結構與算法。

這裏也贈送大家一句話:

好記性不如爛筆頭,好記性更不如好筆記

願大家在技術銀河中終身漂泊學習時,習慣編寫自己的筆記,以後這些筆記必定成爲我們最珍貴的寶藏!✨

如何系統化學習算法

深入到精通一門知識的我們都需要一個系統化的學習方法,如果這門知識越是有難度,前期就越是枯燥無味,或者甚至覺得很困難。所以學習算法也是一樣的:

  • 枯燥無味
    • 所以需要系統化學習;
    • 小步快跑的方式進行學習;
    • 不懂就找答案不要埋頭苦學;
  • 不牢固
    • 越是龐大的知識,越學就會越覺得之前學到的知識忘的差不多了;
    • 其實就是缺乏知識的穩固性;
  • 預習
    • 學習任何一門知識,都要先了解和預習這門知識;
    • 同理,在學習一門新的開發語言時,我們都會先來一個hello world
  • 堅持leetcode刷題
    • 要學會算法,並且穩固這一門知識,不斷的刻意練習是重中之重;

系統化的效果

系統化學習和拿起一本書最終的效果是不一樣的。很多時候我們開始學習一門知識,我們都會看:《xxx深入淺出》、《xxx指南》和《從0到1學會xxx》,其實裏面的知識是很龐大的。只靠知識是無法支撐我們的實戰和經驗的,所以我們需要系統化的學習方法最終達到的目標也是不一樣的,例如:

  • 提升到職業頂尖水平
  • 通過一線互聯網大廠的面試
  • 要有Leetcode 300+ 刷題量

推薦閱讀《Outliner》這本書中的學習方法

精通一個領域

前面說到,任何一個領域的知識都是很龐大的。而且只靠看書,看文章學習都是不夠的。所以一套好的學習方法,可以爲我們打開一扇大門。而且在打開這扇大門的同時不會因爲艱苦、困難、煎熬或者是枯燥而最後放棄。

  • 切碎知識點 Chunk it up
    • 庖丁解牛
    • 脈絡相連 - 從根部開始學習,到分支,再到樹葉。讓每一個知識點都有關聯關係
  • 刻意練習 Deliberate Practicing
  • 反饋 Feedback

數據結構有什麼?

  • 一維:
    • 基礎: 數組 array (string),鏈表 linked list
    • 高級:棧 stack,隊列 queue, 雙端隊列 duque,集合 set,映射 map (hash or map),等等
  • 二維:
    • 基礎:樹 tree, 圖 graph
    • 高級:二叉搜索樹 binary search tree(紅黑樹 red-black tree, AVL),堆 heap,並查集 disjoint set,字典樹 Trie
  • 特殊:
    • 位運算 Bitwise,步隆過濾器 BloomFilter
    • LRU Cache (緩存)

參考:覃超老師的《數據庫腦圖》

算法有什麼?

任何的高級算法與數據結構都會轉換成If Else,for循環,其實也是最樸素的計算機的知識,沒有什麼AI,人工智能的知識。高級算法重點是找到重複單元

  • 跳轉語句 (Branch) :If-else,switch
  • 循環 (Iteration) :for, which,while loop
  • 遞歸 (Recursion) : Divide & Conquer, Backtrace
  • 搜索 (Search) :深度優先搜索 Depth first search,廣度優先搜索 Breadth first search,啓發式搜索 A*
  • 動態規劃 (Dynamic Programming)
  • 二分查找 (Binary Search)
  • 貪心 (Greedy)
  • 數學 (Math),幾何 (Geometry)

參考:覃超老師的《算法腦圖》

刻意練習 - Deliberate practice

無論是科學家、國家運動員、技術專家還是遊戲職業選手,他們的優秀的背後都有一個共同點:刻意練習

什麼是刻意練習?

  • 刻意練習 - 過遍數,持續多邊形的練習,用數遍達到質變!(五毒神掌);
  • 練習不擅長的地方;
  • 如果感到不舒服、不爽、枯燥的話,那證明我們正在爬坡,正在提升!

反饋 - Feedback

很多時候在學習中,特別是在自學的過程,我們永遠不知道自己的學習的成果是怎麼樣的。或者我們有時候會遇到難點但是無法突破,甚至有時候我們以爲自己很努力,或者已經很強了。但是其實還只是坐井觀天而已。所以我們在學習的時候需要反饋。所謂的反饋有幾種:

  • 即時反饋
    • 學會使用一門語言;
    • 能寫出能執行的代碼;
    • 能寫出一個項目;
    • 能實現一個功能;
  • 主動型反饋
    • 高手代碼(Github、LeetCode);
    • 第一視角止步(看視頻,看高手寫的代碼,學習思路);
  • 被動式反饋(高手指點)
    • 代碼審查 code review;
    • 例如:教練看你打,給你反饋;

切題四件套

我個人認爲也可以叫解題四大法則

  • 理解題目(Clarification)
    • 在LeetCode看題後,先思考,認真確認和理解題目;
    • 避免忽略了一些條件或者是誤解題目;
    • 面試的時候更加應該跟面試官確認清楚題目、條件、場景等;
  • 多種解題方案(Possible solutions)
    • 對比時間和空間複雜度 compare (time/spaace)
    • 最優解 optimal (加強)
  • 多編寫(Coding)
    • 代碼反覆練習和編寫;
    • 每一種解法都反覆練習和編寫;
  • 多測試案例(Test cases)
    • 在LeetCode上可以改變測試案例;
    • 多測試幾種案例,確保自己的代碼可以適應各種特殊情況;

刷題方式(五毒神掌)

第一遍

  • 5分鐘:讀題 + 思考;
  • 5分鐘過後,沒有思路就直接看解法;
  • 記錄多個解題方法,比較解題方法的優弊;
  • 嘗試默寫代碼,訓練刻意手寫代碼;

第二遍

  • 自己編寫,這時候就不要再看題解了;
  • LeetCode提交代碼,確保能通過;
  • 有Bug沒有關係,重複debug到通過爲止;
  • 編寫出多種解題方法;
  • 持續優化 - 重點是 執行時間 (可參考LeetCode中打敗了多少的人,也可以點擊比較優秀的人,學習更好的寫法);

第三遍

  • 過了一天後,再重複做題;
  • 根據自己不熟悉的題目與程度做專項練習;
  • 專項練習就是針對自己不熟悉的種類的題,從而刻意練習哪一種題;

第四篇

  • 過了一週後,再反覆練習;

第五遍

  • 面試前,提前2-3周開始重複練習;

總結

這篇筆記中,我們記錄了一下關鍵知識重點點:

  • 如何深入學習一門知識
    • 通過系統化學習一門知識;
    • 最高效和持續的學習算法就是通過系統化的學習;
    • 這裏推薦大家,真的想學好一個技術,最好的方法就是找對老師,找對課程,找對人;
  • 如何攻破龐大的知識體系變成編程職業高手
    • 切碎知識點與建立脈絡
    • 刻意練習
    • 反饋
  • 數據結構中有什麼? - 看腦圖
  • 算法中有什麼?- 看腦圖
  • 算法練習方法
    • 切題四件套
    • 五毒神掌

我是三鑽,一個在技術銀河中和你們一起來終身漂泊學習。
點贊是力量,關注是認可,評論是關愛!下期再見 👋!

推薦閱讀

  • 📖《28關學會HTML與HTML5基礎》 — 一個系列的文章和大家一起闖關進攻前端全方位知識點。沒有闖過這些關卡的童鞋,無論前端能力如何,這個可以鍛鍊我們自己,也可以深入知道我們自己的前端水平和差距。想學習前端的童鞋可以從零開始學習,一起排除困難共同打開前端大門!

  • 📖《44關深入淺出CSS基礎之第一篇》 — 這周我們一起闖過了22關,下一期我們會一起把剩餘的22關完成。學習是一種像爬山一樣的過程,要經歷過漫長的上坡路,一步一個腳印。“路漫漫其修遠兮,吾將上下而求索。”, 在追尋知識的道路上,前方的道路還很漫長,但我們將百折不撓,不遺餘力地,上天下地的去追求和探索。讓我們繼續堅持學習,終身學習成長。在大前端的時代爬到技術的巔峯,做一個有深度的技術人員。

  • 🔥《前端必看的8個HTML+CSS技巧》 — CSS是一個很獨特的語言。看起來非常簡單,但是某種特殊效果看似簡單,實現起來就頗有難度。這篇文章主要是給在學習前端的童鞋分享一些新的CSS技巧,一些在前端教程和培訓課堂中不會講到的知識。第二就是讓還在前端開發這條道路上的童鞋們,重新燃起對前端排版和特效的熱愛和熱情!🔥

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