精选文章 - 算法学习第12天|Algorithm Picks

精选文章 - 算法学习第12天(续)

进阶算法学习资源推荐

1. 宫水三叶的刷题笔记 - 动态规划专题

宫水三叶(三叶解题)是我个人极力推荐的中文算法博主。她的刷题笔记在 GitHub 上广受好评,尤其擅长 动态规划(Dynamic Programming, DP) 的讲解。DP 是算法面试中的重中之重,也是很多同学的噩梦——但她的讲解逻辑清晰、层层递进,能帮你真正理解 DP 的核心思想。

推荐理由:她的笔记不只给答案,而是从 状态定义(State Definition) 开始,解释为什么这样定义、转移方程(Transition Function)怎么来的。很多同学做 DP 题是背套路,她教的则是思考方式。

适合人群:DP 入门困难户、想提升解题思维深度的同学。


2. 英文原版:Grokking Dynamic Programming - Educative.io

如果想要一份系统化的英文 DP 课程,Grokking Dynamic Programming 是绝佳选择。这门课程将 DP 问题分为多个模式:斐波那契数列模型、0/1 背包模型、最长公共子序列模型、字符串编辑距离模型 等,每种模型配有大量练习题和可视化解析。

推荐理由:课程采用 渐进式学习 设计,从最简单的 DP 问题开始,逐步引入复杂变体。交互式编程环境让你可以直接在浏览器中敲代码,无需配置环境。面试前冲刺阶段,这门课程效率极高。

适合人群:有一定算法基础、想在 DP 专题做针对性提升的同学。


3. 论文解读:MapReduce - 分布式计算的奠基之作

想要理解现代大数据处理的底层逻辑?那就不能不读 Google 的经典论文 “MapReduce: Simplified Data Processing on Large Clusters”。这篇 2004 年发表的论文提出了 MapReduce 编程模型,是分布式计算领域的里程碑。

核心概念速览

  • Map 阶段:将原始数据切分成若干 key-value 对,进行并行处理
  • Shuffle 阶段:将 Map 输出按 key 分区、排序、合并
  • Reduce 阶段:对相同 key 的 value 列表进行聚合操作

为什么重要:理解 MapReduce 有助于你理解 Hadoop、Spark 等大数据框架的设计哲学,也是面试中展示系统设计能力(System Design)的重要素材。


常见陷阱与进阶建议

陷阱一:DP 状态定义不合理 很多同学做 DP 题时,状态定义过于复杂,导致转移方程写不出来。一个通用原则:选或不选、维度从小到大。先尝试一维 DP,如果不够用再扩展到二维。

陷阱二:忽视空间复杂度优化 很多人满足于 O(n²) 时间、O(n²) 空间的解法,却不知道很多 DP 问题可以 空间降维 到 O(n) 甚至 O(1)。面试中如果能主动提出空间优化,会给面试官留下深刻印象。

陷阱三:递归实现不熟悉 很多 DP 解法可以用 记忆化递归(Memoization) 实现,代码更简洁、容易理解。但如果不熟悉递归栈(Call Stack)的工作原理,容易出现栈溢出(Stack Overflow)问题。

实战技巧

  • 做 DP 题前,先在纸上写出状态转移方程,再开始写代码
  • 空间优化时注意是从前一个状态转移还是从更早的状态,避免覆盖还未使用的数据
  • 系统设计面试中,MapReduce 模型可以用来拆解大规模数据处理问题

今日练习建议

结合今天的资源,推荐以下练习路径:

入门路线:宫水三叶 DP 笔记 → 两道简单 DP(爬楼梯、最小路径和)→ 理解状态转移

进阶路线:Grokking DP 课程 → 0/1 背包问题专项 → 字符串编辑距离问题

拓展路线:阅读 MapReduce 论文 → 了解分布式算法设计思想 → 思考如何在单机上模拟分布式处理

每天进步一点点,算法能力稳扎稳打 💪

有问题欢迎在评论区交流,我们一起进步!