清華學生總結的算法學習方法


作者| longyue0521
來源 | Python與算法社區 公眾號
今天查資料時看到一個比較好的算法學習方法總結,來自清華大學算法訓練營 longyue0521 ,提出的 “做中學” 方法,個人也是比較認同的,大家不妨看看下面的詳細介紹。

   一、事半功倍


Learning by doing 做中學


   二、經歷描述


在我初學編程時,因沒有掌握計算機相關專業的學習方法,走了不少彎路。
我總是想先“打好基礎”,再走下一步,但這需要時間、毅力與堅持。
我花了很大氣力學習,但都事倍功半!
我想找到效率更高的學習方法,于是我開始瀏覽美國計算機四大名校的課程網站。

經過一番研究,自學幾門課程后,我發現了他們的教學套路:
  • 教授理論知識(一),小作業,用于鞏固理論知識(一)
  • 教授理論知識(二),小作業,用于鞏固理論知識(二)
  • 大作業,編程實踐,需要用到理論知識(一)與(二)
  • 教授理論知識(三),小作業,用于鞏固理論知識(三)
  • 教授理論知識(四),小作業,用于鞏固理論知識(四)
  • 大作業,編程實踐,需要用到理論知識(三)與(四)
  • 項目作業,編程實踐,多人協作,需要用到理論知識(一)~(四)+ hits
  • 重復上述過程,一般重復4~6次,中間穿插期中考試,最后期末考試

由此“套路”總結出另一種學習方法——“迭代學習”法:
  • 理解待解決的問題
  • 學習部分理論知識
  • 動手實踐嘗試解決,無法解決,回到1或2
  • 成功解決抓緊總結

即使現在回頭看,我也不能說第一種學習方法有錯,“迭代”學習法更好!但這兩種學習方法都是以同一個核心為基礎的—— 動手做,做中學!
你可以都嘗試一下,然后選取自己喜歡、又高效的學習方法!
當然也歡迎分享你的學習方法!


   三、經驗總結


  • 越早適應“迭代”學習法對你越有利。
  • 大多數時候你沒有足夠的時間來“學完再做”。
  • 若你在“迭代”學習過程產生的焦慮、沮喪、挫敗感,請及時排解
  • 排解后記得回來,堅持才能勝利!


   四、個人建議


學習《算法設計》在借鑒學習《數據結構》的經驗的同時, 需要做適當調整——在每次大迭代中應用“迭代”學習法:
第一次迭代 ,熟悉常用的算法設計策略,掌握策略的使用方法及適用的場景
  • 其實學習《數據結構》時你已經學了不少經典算法
  • 帶著學到的算法設計策略回頭總結、歸納經典算法
  • 可以在紙上畫畫設計策略與經典算法的關系圖,是一對一,一對多,還是多對多
  • 這個階段的重點,在腦中建立常用算法設計策略與經典算法的對應關系
  • 如果個人能力不錯,可考慮與《數據結構》第三次迭代同時進行
第二次迭代 ,靈活運用算法設計策略,解決實際問題
  • 大量的解決問題,在此過程中總結出你個人解決問題的流程
  • 可以針對某項設計策略進行專項訓練,但要考慮實際需求——工作、面試、競賽
  • 此階段的重點就是解決《數據結構》第三次迭代中的隱藏關卡,同時培養解決問題的感覺、自覺
  • 別忘了“迭代”學習方法
  • 大量訓練、多與他人探討、擴展自己的思路并及時總結
第三次迭代 ,對給定問題能運用數學證明你的算法設計策略是正確的、可行的、高效的
  • 這個階段要做的事本應該融入到前兩次迭代中的,甚至更早比如在離散數學課上
  • 之所以單抽出來是因為有太多的人因這個“攔路虎”而徘徊在“算法設計”的大門前遲遲不敢踏入半步,更有甚者轉身離開了就再也沒回來......
  • 如果你不擅長數學,或不打算從事科研及對數學要求較高的工作,可以跳過
  • 對于打算從事科研及對數學要求較高的工作的人來說,這也可以算迂回策略
  • 可以先從教材對經典算法的證明學習,然后重走第二次迭代實踐(這才是看CLRS的時機)
  • 這個階段的重點,有意識地運用數學來決定設計策略的選取


   五、追求目標


你在學習《算法設計》的初期沒能養成良好的推理、證明習慣,后期改正要費些功夫信心/底氣不足,有強大的數學理論作為支撐你敲代碼、測試或和別人辯論也底氣十足盡管不完美但比起那些徘徊在門口、轉身離開的人,你已進入“算法設計”的大門!

這難道不值得高興嗎?

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP