JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

下一步去哪:一份練習路線圖

你已經爬完了整條階梯——接下來要做的,是讓它扎下根並持續成長。這篇收尾導讀給出一份分階段的練習計畫(操練模式、間隔重複、讀別人的解法,再去攻進階主題),並就那件最要緊的事說幾句誠實話:持之以恆。

分階段的練習計畫

讀懂一個[[dsa-algorithm|演算法]],和在壓力下隨手取用它,是兩回事。這道鴻溝只能靠練習來填——但練習是有章法的。漫無目的地刷題會把你耗盡;分階段、刻意的練習則會累積複利。下面是一個行之有效的順序。

  1. 一次只操練一個模式。挑一個模式——比如雙指標——連著解上五六道全都用到它的題。集中做這些題,能訓練你的眼睛認出該模式何時適用,而這正是能遷移的本領。
  2. 間隔重複。別一道題做完一次就永遠翻篇。過幾天回頭再做,再過幾週再做一次。間隔重複,正是讓模式從「我跟著看懂了」變成「我能自己寫出來」的途徑。
  3. 讀別人的解法——但要在你自己試過之後。當你真正嘗試過,再去研究別人一份乾淨的解答。你會吸收到一些寫法、更俐落的複雜度,以及你自己想不到的模式。然後憑記憶自己再解一遍。
  4. 記錄你做不出的題。給那些難住你的題列一個簡短清單,並寫下每道題需要的模式。回顧這份清單,就是一幅你自己弱點的地圖——遠比統計「解了多少題」有用。
A spaced-repetition practice loop (don't just solve once and move on):

   day 0          day 3            week 2             month 2
   solve  ----->  re-solve  ----->  re-solve  ----->  re-solve
   (from           (recall,          (recall,          (should be
    scratch)        not re-read)      fast now)         automatic)
     |                                                     |
     +----------- the gaps are where it consolidates ------+

Goal: move each pattern from "I followed that" to "I can produce that."
按逐漸拉長的時間表回頭重做做過的題;兩次嘗試之間的間隙,正是技能扎根之時。

可以成長進去的進階主題

一旦核心模式變得自然,更廣闊的世界就敞開了。這些你不必全學,眼下更不必——但記住它們的名字,能讓你在某個問題需要時認出正確的工具,並挑一個讓你興奮的方向。

  1. 字串演算法——高效的字串匹配,如 KMP 演算法,能在 O(n + m) 內(而非樸素的 O(n·m))在文本中找出一個模式串;還有後綴陣列與 Z 演算法。對文本處理和生物資訊學不可或缺。
  2. 網路流——把問題建模為帶容量的圖中的流動(最大流/最小割)。出人意料地,許多匹配與分配問題都能歸約為流問題。
  3. 計算幾何——處理點、線、多邊形的演算法:凸包、線段相交、最近點對。它是圖形學、地圖與機器人的主場。
  4. 隨機化與近似演算法——用受控的隨機性換取速度或簡潔(隨機化快速排序、雜湊、蒙地卡羅方法),並為那些難以精確求解的問題,接受可證明接近最優的答案。別害怕那些名字陌生的主題;每一個不過是又一級台階。

唯一要緊的:持之以恆

如果你只從整條階梯裡記住一件事,那就記住這個:穩定而適度的練習,勝過偶爾的英雄式爆發。大多數日子裡專注的半小時,一年下來會比每月一次的瘋狂通宵帶你走得更遠。大腦是在兩次練習之間的間隙裡慢慢鞏固這些技能的——所以那些間隙是工作的一部分,不是被浪費的時間。

要預料到高原期,也要預料到那種卡住的感覺——兩者都正常,也都會過去。這個領域的進步很少是一條平滑的線;它是一段樓梯,長長的平段之後,會在某個東西豁然開朗時突然抬升一級。當你撞上一段平段,別就此斷定自己到了極限。繼續出現就好。下一級台階,通常比感覺上要近。