Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第一部分 · 数据结构与算法(DSA)

note

这一整部分的目标:用工程实战级的深度,把 DSA 在脑子里重新 "焊一遍"。读完你应该能在日常工程里:看一段代码就能说出大概的复杂度,看一个需求就能给出合理的数据结构选型,并能落地到至少两种语言。

为什么从头学 DSA

很多有经验的工程师会把 DSA 视为"面试才用得上"的东西。这是一个严重的认知偏差。真实世界里,DSA 决定的不是能不能写出代码,而是:

  • 你能不能在几亿行日志里 5 分钟内找到重复事件;
  • 你的服务体系结构能不能替换一个 maplsm-tree写入吞吐翻一个量级
  • 你能不能看出来某个"看起来正确"的缓存实现其实是 O(n²),被一个意外输入直接打挂。

DSA 不是面试题,是 "数据形态 × 性能空间" 的设计空间本身

这里和别处有什么不同

  • 每个数据结构:语义 → 复杂度 → 实现 → 工程取舍 → 易错点 → 经典题
  • 多语言实现:Go / TypeScript / Python / C++,对照看会让你发现"语言运行时帮你藏了多少东西"。
  • 重视 amortized / worst-case / cache 的差异,而不是只记一张表。
  • 每章末尾有"反推设计":给一个真实负载,让你反推出该用什么。

阅读路径建议

算法 = 空?→ 先读《复杂度分析》
        │       因为后面每一章都会用 O(·) × θ(·) × Θ(·)
        ↓
结构 → 数组/链表/栈队列/哈希
        ↓
树 → 二叉搜索树 → 平衡 → 堆 → 字典树/并查集
        ↓
图 → 表示 → 路径 → MST → 拓扑 → 网络流
        ↓
算法范式 → 分治/贪心/DP/回溯/分支限界
        ↓
专题 → 排序/搜索/字符串/数论
        ↓
附录 → snippets + LeetCode 路线

tip

如果你不是第一次学,可以快速翻过前面,但复杂度分析树的非递归实现这两节建议精读——这俩最容易"以为自己懂了"。