数据结构与算法
从复杂度到高级数据结构,
比较代价、亲手实现,并用测试验证选择。
变量村的问题解决了,但一到算法森林,数据规模就把原先能运行的程序拖得步履维艰。你和阿花要为搜索、排队、路径规划和任务调度选择合适的结构,并说明时间、空间与实现复杂度之间的取舍。
旅程位置:变量村 → 算法森林(让程序在规模增长后仍可用)→ 计算机地心
前置要求
需要编程基础(完成第一卷)。熟悉 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 章下连续的短课,不是两个重复章节。