如何學習數據結構與算法? (加油,你可以的)


精通一個領域(數據結構與算法)

  • Chunk it up 切碎知識點

    數據結構(https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c)

    庖丁解牛 把數據結構的一個又一個知識點分解開來

    It is important to view knowledge as sort of a semantic tree —— ElonMusk

    覃超建議 把數據結構這么分:

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

    算法(所有這些復雜的算法,其實到了最后就是找它的重復單元是什么???)(https://naotu.baidu.com/file/0a53d3a5343bd86375f348b2831d3610?token=5ab1de1c90d5f3ec)

    • if-else, switch -> Branch

    • for, while loop -> Iteration

    • 遞歸 Recursion(Divide & Conquer, Backtrace)

    • 這里做個分割 下面的就是一些高級一點的算法

    • 搜索 Search:深度優先搜索 Depth first search,廣度優先搜索Breadth first search,A*, etc

    • 動態規划 Dynamic Programming

    • 二分查找 Binary Search

    • 貪心 Greedy

    • 數學 Math,幾何 Geometry

      注意:在頭腦中回憶上面每種算法的思想和代碼模版

      (動手繪制腦圖去)

  • Deliberate Practicing 刻意練習

    • 基本功練習(基本功是區分業余和職業選手的根本)
    • 基礎動作的分解訓練和反復練習 ——>>最大的誤區(如果你做一個算法題,如果你只做一遍,這就是你進行練習和切題的最大誤區,這是遠遠不夠的)
    • 刻意練習——過遍數(五遍刷題,五毒神掌)
    • 練習缺陷、弱點地方走出自己的舒適區(枯燥 無味 煩躁 就是成長)一只腳踏在舒適區之外
    • 職業化訓練 CSGO 開一些專項練習的地圖(自己就練過233333,無論是CS還是CS go)
    • 奧沙利文是真的牛逼
    • 別怕動態規划啥的 經過幾十題的練習 肯定就很熟練了
  • Feedback 反饋

    • 即時反饋
    • 主動型反饋(自己去找)
      • 高手代碼(GitHub, LeetCode, etc)
      • 第一視角直播
    • 被動式反饋(高手給你指點(現在這點對於我來說有點難啊,只能多去找朋友了))
      • code review

    LeetCode上面有很多別人寫的非常好的代碼

刷題的方式(切題四件套)

  • Clarification(多看幾遍題目 && 和面試官多溝通,確保自己對題目的理解是對的)

    把題目看清楚 題目要干嘛 很重要

  • Possible Solutions

    所有可能的想法。不要只用想到的第一種解法去解。要去用所有可能想到的方法,從中找出最優解法

    • compate (time / space)
    • optimal (加強)
  • Coding(多寫)

  • Test cases(測試用例要多寫幾個,給面試官大人感覺,自己要有始有終)

五毒神掌

刷題第一遍

  • 五分鍾:讀題 + 思考 (如果基礎薄弱 可以給自己10分鍾 最多15分鍾)這里不能略過
  • 有思路 直接做 直接寫 || 超時 ——>> 直接看解法!注意!多解法,比較解法優劣(理解學習和運用算法 不是讓你去造輪子)
  • 背誦、默寫這樣好的寫法(並不是死記硬背即可,先背誦記住了之后,一般來說肯定就能理解了。很多題目以后看到就條件反射了)(不能打擊自己的積極性)

刷題第二遍

  • 馬上自己寫(一開始可能會有bug 沒關系 debug debug debug 修改修改修改) ——>LeetCode提交
  • 多種寫法、體會 ——>優化!(最重要的是執行時間)

刷題第三遍

  • 過了24 小時的時間以后,再次重復做題
  • 不同解法的熟練程度 ——> 專項練習

刷題第四遍

  • 過了一周之后: 反復回來練習相同的題目

刷題第五遍

面試前一周恢復性的訓練


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM