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. 随机化与近似算法——用受控的随机性换取速度或简洁(随机化快速排序、哈希、蒙特卡洛方法),并为那些难以精确求解的问题,接受可证明接近最优的答案。别害怕那些名字陌生的主题;每一个不过是又一级台阶。

唯一要紧的:持之以恒

如果你只从整条阶梯里记住一件事,那就记住这个:稳定而适度的练习,胜过偶尔的英雄式爆发。大多数日子里专注的半小时,一年下来会比每月一次的疯狂通宵带你走得更远。大脑是在两次练习之间的间隙里慢慢巩固这些技能的——所以那些间隙是工作的一部分,不是被浪费的时间。

要预料到平台期,也要预料到那种卡住的感觉——两者都正常,也都会过去。这个领域的进步很少是一条平滑的线;它是一段楼梯,长长的平段之后,会在某个东西豁然开朗时突然抬升一级。当你撞上一段平段,别就此断定自己到了极限。继续出现就好。下一级台阶,通常比感觉上要近。