FILE NO. —TOPIC —
演算手稿:把算法写成可以复查的推导
之前算法栏一直挂着「建设中」。现在它有名字了——演算手稿(Algorithm Field Notes),也终于有了值得打开的样子。
为什么叫「手稿」
我刷题的最大教训是:只记答案的笔记会在两周后失效。题目一换条件,记下的模板就用不上;而真正帮到我的,是那些写了一半划掉又重来的草稿——它们记录了我是怎么走到正确答案面前的。
所以这个专栏按「问题—直觉—推导—实现—验证」的顺序组织每一篇手记:
- 问题描述:先把题意说清楚,包括那些容易忽略的约束;
- 直觉与观察:第一反应是什么,为什么对或者不对;
- 推导过程:从直觉到算法,中间每一步都可以复查;
- 算法不变量:找到那句「从头到尾都为真」的话,正确性就有了把手;
- 代码实现:Python 为主,附 C++ / Java 对照;
- 验证:复杂度、边界情况、常见错误,以及我曾经写错的位置。
专栏里有什么
- 题解手记:按主题(数据结构 / 查找与排序 / 图论 / 动态规划 / 贪心 / 字符串 / 数学与位运算)、难度和整理状态筛选,每条记录都附一句核心结论;
- 知识地图:算法之间的关系图——哪些是先修、哪些已掌握、哪些是接下来想探索的;
- 复杂度手册:常见结构与算法的复杂度速查表,外加递推式的直觉推导。
每篇手记都有三位档案编号(从 043 开始——前面的号码留给那些写了但还没整理完的草稿)。适合在文章里演示的算法(比如二分查找)会配一个可以逐步单步的演示器,用键盘左右方向键就能走完整个过程。
一点私心
我会刻意保留「走不通的路径」:比如 Dijkstra 那篇里记了我曾经以为「负权边只是实现问题」的错误理解,以及它为什么错。错误复盘比正确答案更难伪造,也更有复习价值。
如果这些手稿对你也有一点点用,那就更好了。
—— F.
评论