第1章 基本算法知识 1
1.1 开场白 1
1.2 “算法”的由来 2
1.3 算法十大名师 3
1.4 算法在计算中的作用 7
1.4.1 算法及其特性 7
1.4.2 算法的应用 9
1.5 算法渐近性分析 11
1.6 学习算法的重要性 13
1.7 基本算法设计策略 14
1.7.1 贪心法 14
1.7.2 分治法 17
1.7.3 回溯法 19
1.7.4 分支限界法 23
1.7.5 随机化算法 25
1.7.6 动态规划 29
习题 31
第2章 基本数据结构 33
2.1 开场白 33
2.2 线性表 33
2.2.1 顺序表和链表 35
2.2.2 栈与队列 41
2.3 树 52
2.3.1 树的定义 52
2.3.2 树结构中的重要术语 53
2.3.3 树的存储结构 55
2.3.4 最优二叉树(哈夫曼树) 57
2.3.5 最优二叉搜索树 62
2.4 图 69
2.5 集合 74
习题 75
第3章 排序算法 77
3.1 十二生肖排序的故事 77
3.2 排序的基本概念 79
3.3 贪心排序 81
3.4 分治排序 95
3.4.1 递归算法 95
3.4.2 分治排序算法 98
3.5 搜索排序 104
3.5.1 二叉树的定义及遍历 104
3.5.2 二叉搜索树 111
3.5.3 二叉搜索树排序 117
3.6 随机排序 118
3.7 基于模运算的排序 120
3.8 分组排序 126
3.9 位排序 130
习题 134
第4章 选择算法 136
4.1 最小值与最大值 136
4.2 中位数选择 140
4.3 线性时间选择 142
4.3.1 随机线性时间选择 142
4.3.2 分组线性时间选择 145
习题 148
第5章 图算法 150
5.1 图的遍历算法 150
5.1.1 深度优先遍历 150
5.1.2 广度优先遍历 155
5.2 单源最短路径算法 160
5.3 最小生成树算法 168
5.4 二分图算法 174
5.4.1 二分图概念 174
5.4.2 最大流算法 175
5.4.3 匈牙利算法 184
习题 189
第6章 算法拓展 192
6.1 遗传算法 192
6.2 贪心遗传算法 196
6.3 启发式遗传算法 200
习题 207
参考文献 208