跳到内容
第二卷

数据结构与算法

从复杂度到高级数据结构,
比较代价、亲手实现,并用测试验证选择。

变量村的问题解决了,但一到算法森林,数据规模就把原先能运行的程序拖得步履维艰。你和阿花要为搜索、排队、路径规划和任务调度选择合适的结构,并说明时间、空间与实现复杂度之间的取舍。

旅程位置:变量村 → 算法森林(让程序在规模增长后仍可用)→ 计算机地心

前置要求

需要编程基础(完成第一卷)。熟悉 Java/Python 基本语法。

第1章 算法复杂度分析 已写完

O/Ω/Θ 到底什么意思?时间换空间、空间换时间,Java/Python 里各操作的实际成本。

第2章 数组与链表 已写完

ArrayList vs LinkedList——插入删除的暗坑。手写双向链表(单链表·双链表·循环链表)。

第3章 栈、队列与双端队列 已写完

用栈实现括号匹配和表达式求值,循环队列。Deque——栈和队列的合体形态。单调栈/队列。

第4章 哈希表 已写完

HashMap 原理:哈希函数·拉链法·开放寻址·扩容重哈希。hashCode/equals 契约、设计好的哈希函数。

第5章 二叉树与二叉搜索树 已写完

前/中/后/层序遍历(递归+迭代)。BST 增删查、中序即有序。TreeSet/TreeMap 底层。

第6章 平衡树与红黑树 已写完

AVL 四种旋转。红黑树五条规则逐条拆解,插入删除着色旋转全过程。为什么 TreeMap 用红黑树而不是 AVL。

第7章 堆与优先队列 已写完

二叉堆的数组表示、上浮下沉、建堆 O(n)。堆排序、Top-K、合并 K 个有序链表。PriorityQueue 源码。

第8章 图 已写完

邻接表/矩阵、BFS/DFS 模板与连通分量、拓扑排序(Kahn + DFS)。最短路径 Dijkstra、最小生成树 Prim/Kruskal。

第9章 排序算法(上) 已写完

冒泡/选择/插入——O(n²) 三兄弟 + 希尔排序。Java 里实际用哪种?Python 为什么不用它们?

第10章 排序算法(下) 已写完

归并/快排/堆排序——O(n log n) 三角。快排退化、归并空间开销、堆排不稳定。工程实现双轴快排、Timsort。计数/桶/基数排序。

第11章 搜索算法与字符串匹配 已写完

二分搜索及其变种。插值搜索。KMP(next 数组手工推 + 代码)。Rabin-Karp 与哈希冲突。

第12章 分治与回溯 已写完

分治三步走:分→解→合。回溯框架:做选择→递归→撤销。N 皇后、全排列、子集生成。

第13章 动态规划 已写完

从递归→记忆化→DP 表格的推导。0-1 背包/完全背包、LCS/LIS、区间 DP。状态转移方程不是玄学。

第14章 贪心算法 已写完

区间调度、霍夫曼编码、哈夫曼树。贪心 vs DP——什么时候可以偷懒?

第14章+ 归约与NP完全性 已写完

归约思想、P vs NP、NPC问题与归约链、工程实践:遇到NPC怎么办。

第14章+ 摊还分析 已写完

聚合/势能/记账法、动态数组扩容、二项堆并发、并查集与伸展树的分摊分析。

第15章 高级数据结构 已写完

并查集(路径压缩+按秩合并)、跳表(Redis ZSet 内核)、布隆过滤器(误判率推导)、字典树(Trie 与自动补全)、线段树(区间查询端到端实现)。

本卷共 17 章(含 2 篇加餐),已完成 3 章,已写完 14 章

完整课目

本卷按“章 → 编号课次”组织。8.1、8.2 这样的文件是第 8 章下连续的短课,不是两个重复章节。

第 1 章:复杂度是什么

第 2 章:数组

第 3 章:栈——后进先出

第 4 章:哈希表基础

第 5 章:二叉树的结构与递归

第 6 章:(上):AVL 与旋转

第 7 章:堆

第 8 章:图的表示:先把森林画进内存

第 9 章:初级排序:冒泡、选择、插入

第 10 章:排序算法(下)

第 11 章:二分搜索与边界

第 12 章:分治

第 13 章:动态规划入门

第 14 章:贪心算法

第 15 章:高级数据结构导览

Built with VitePress | Software Systems Atlas