数据结构与算法自学:从工程直觉到复杂度思维

一本写给有编程经验、但没系统学过数据结构与算法的工程师的自学书。


这本书为谁写

说明
适合你,如果你 有 1–3 年工作经验,会写循环、函数、类,用过 List<T>Dictionary
不需要 高等数学、算法基础、竞赛经历
代码语言 C# 12 / .NET 8(每段都附等效伪代码,可用任意语言对照)
数学要求 只用四则运算、乘方、对数概念、求和。不涉及微积分与概率论
深度 中级:覆盖本科数据结构与算法核心,砍掉严格证明与冷门结构

三个特点

一、每一节的结论都用真实代码跑过

这是这本书区别于其他教材的地方。

代码不是"示意"的 —— 每一节都配一个完整可运行的控制台项目正文里贴出的输出,是从控制台直接复制过来的,包括机器配置和倍率。

涉及算法正确性的结论,还会用【另一个独立实现】交叉校验

  • 12.3 节的 BFS 最短路,用暴力枚举 240 组验过
  • 13.3 节的 Dijkstra,用 Floyd-Warshall 对拍 225 个顶点
  • 14.1 节的贪心找零,与动态规划逐金额对比
  • 16.3 节的调度器,用独立实现重放规则做验收

为什么这么麻烦? 因为不能让一个算法自己验证自己

二、如实呈现"实测和教科书说法不符"的地方

全书有 25 处推翻了教科书说法的实测结论,比如:

结论 出处
已排序数据上,插入排序比归并排序快 8.5 倍 8.1
开放寻址探测次数更多却更快 6.2
随机稀疏图上,Bellman-Ford 比 Dijkstra 快 5.6 倍 13.4
同一个算法,只改遍历顺序就差 2.15 倍 16.2
"找零用贪心"在随机币制里只有 2.5% 成立 14.1

遇到"实测和预期不符"时,这本书的做法是不调整数据去迎合预期,而是如实呈现并解释为什么。

往往那里就是最有教学价值的地方。

三、练习都有完整答案,而且给的是【关键步骤】

这本书假定你在自学 —— 没有老师可以问。

所以每节的 4–5 道练习都有完整解答,包括推导过程、中间步骤, 以及"为什么这么想",而不只是最后那个数。


怎么用这本书

建议节奏16 周,每周 1 章,每章 4–5 节,每周投入 4–6 小时。

每节的结构是固定的

学习目标 → 直觉 → 形式化 → 例题 → 可运行代码 → 练习 → 答案 → 常见错误 → 本节总结

三条使用建议

  1. 每节的代码请亲手跑一遍。 光看不算数 —— 这本书的很多结论,只有跑起来才会信。
  2. 先自己做练习,再看答案。 答案很详细,直接看会少一半收获。
  3. 不要在"常见错误"上跳过。 那里面每一条都是真踩过的坑。

环境准备

只有一个要求:安装 .NET SDK 8

每一节的代码都是独立项目,可以单独运行:

dotnet run --project 99-tools/samples/Ch01/Sec11/Sec11.csproj -c Release

请务必加 -c Release Debug 模式下的计时结果没有参考价值 —— 这句话本身在第 16.2 节被实测验证过。

装不了 .NET 也没关系 —— 每段代码都附了等效伪代码,用任何语言对照阅读都可以。


这本书不含什么

为了控制在 63 节以内,以下内容被砍掉了(在最后一节的"接下来学什么"里给了继续学习的建议):

并查集、字符串算法(KMP / Trie)、最小生成树、强连通分量、 A* 启发式搜索、计算复杂性理论的完整展开、概率数据结构。


开始之前

如果你只有 10 分钟,先读 1.1 节 —— 它用一个真实的上线事故说明"代码能跑通"和"代码能扛住真实数据"是两件不同的事。

如果你在准备面试,可以直接跳到各章的"常见错误"和练习题。

读完之后,你会得到三样东西:

  1. 一套判断代码性能的工具(而不是"感觉这里有点慢")
  2. 一批能亲手实现的数据结构与算法
  3. 一个习惯任何性能结论,都要跑一遍才算数

results matching ""

    No results matching ""