朋友家做客 36
2.3.2从最短的第一条路开始分析 37
2.3.3找到抵达朋友家的最短路径 38
2.3.4Dijkstra算法实现 44
2.4 选择困难症——背包问题 46
2.4.1如何装沙子赚更多的钱 47
2.4.2海盗的智慧 47
2.4.3背包问题算法实现 50
2.5 搬家师傅的烦恼——集装箱装载问题 52
2.5.1如何装更多的物品 53
2.5.2搬家师傅的十年经验 53
2.5.3装载问题算法实现 55
第3章分而治之算法 58
3.1 纵横捭阖,各个击破——分而治之 58
3.1.1分而治之——把复杂的事情简单化 59
3.1.2可分可治,缺一不可 59
3.1.3合久必分,分久必合——治而合之 60
3.2 真币和假币——伪币问题 61
3.2.1可恶的假币 62
3.2.2先对一半的硬币进行考虑 62
3.2.3找出硬币的规律 64
3.3 再谈排序算法(1)——合并排序 66
3.3.1如何将分而治之思想应用到合并排序上 67
3.3.2先对一半的数字进行考虑 67
3.3.3合并排序算法实现 70
3.4 再谈排序算法(2)——快速排序 74
3.4.1如何将分而治之思想应用到快速排序上 74
3.4.2找到一个“分”的中心 75
3.4.3快速排序算法实现 79
3.4.4排序算法总结 81
3.5 累人的比赛——循环赛日程安排 82
3.5.1最公平的比赛 82
3.5.2如何设计循环赛 83
3.5.3找出循环赛的排列规律 86
第4章树算法 89
4.1 生活中的“树” 89
4.1.1炎黄子孙,生生不息 90
4.1.2学校的组织结构 90
4.1.3操作系统的目录结构 91
4.2 一叶一菩提——二叉树的遍历 92
4.2.1什么是二叉树 92
4.2.2二叉树的前序遍历 92
4.2.3二叉树的中序遍历 97
4.2.4二叉树的后序遍历 102
4.2.5二叉树的平层遍历 107
4.3 重建家谱图——二叉树的还原 111
4.3.1什么是二叉树的还原 112
4.3.2前序遍历和中序遍历还原家谱图 113
4.3.3中序遍历和后序遍历还原家谱图 118
4.4 十年树木,百年树人——二叉树的高度 123
4.4.1什么是树的高度 123
4.4.2在树的遍历基础上增加高度信息 124
4.4.3遍历树获得高度信息 126
4.5 寻根溯源——找到所有祖先结点 128
4.5.1什么是树的祖先 128
4.5.2在树的遍历基础上增加结点找到信息 129
4.5.3遍历树获得所有祖先 131
第5章图算法 134
5.1 生活中的“图” 134
5.1.1城市的交通轨道 135
5.1.2人与人之间的关系 136
5.1.3互联网的连接 136
5.2 寻找所有的城市——有向图的遍历 137
5.2.1什么是有向图 137
5.2.2有向图的深度优先遍历 138
5.2.3有向图的广度优先遍历 144
5.3 最短的管道——Kruskal算法 149
5.3.1如何铺设最短的管道 149
5.3.2什么是最小生成树 150
5.3.3Kruskal算法的贪心思想 151
5.3.4Kruskal算法实现 156
5.4 再谈最短的管道——Prim算法 158
5.4.1基于管道的边和结点贪心的区别 159
5.4.2Prim算法的贪心思想 159
5.4.3Prim算法实现 162
5.5 多源最短路径——Floyd算法 164
5.5.1朋友之间相互访问的最短路径 164
5.5.2自上而下分析朋友之间的最短路径 165
5.5.3自下而上迭代朋友之间的最短路径 166
5.5.4Floyd算法实现 172
第6章动态规划算法 176
6.1 长远的眼光——动态规划 176
6.1.1时间倒流,改变历史 177
6.1.2慎用贪心算法 177
6.1.3强者恒强,弱者恒弱——最优子结构 178
6.2 智能的语言翻译——编辑距离 178
6.2.1设计语言翻译系统 179
6.2.2考虑最后一次编辑情况 180
6.2.3自下而上进行距离编辑 186
6.3 智能的电梯——电梯优化 196
6.3.1设计智能电梯 196
6.3.2先考虑最后一次电梯停留的情况 197
6.3.3自下而上计算电梯的停留过程 200
6.4 名字的相似度——最长公共子序列 208
6.4.1外国人名的相似度 208
6.4.2考虑最后一个字符比较情况 209
6.4.3自下而上进行距离编辑 213
第7章回溯法 219
7.1 现代计算机的福音——回溯法 220
7.1.1让猴子打出《莎士比亚全集》 220
7.1.2一条路走到黑——深度遍历 221
7.1.3乱花渐欲迷人眼——搜索中的剪枝 223
7.2 不能攻击的皇后——8个皇后问题 224
7.2.1一山不容二虎 224
7.2.2如何设计8个皇后的解向量 226
7.2.3搜索过程中的剪枝 228
7.3 绝望的小老鼠——迷宫中的小老鼠 241
7.3.1上帝视角帮助小老鼠 241
7.3.2小老鼠如何进行搜索 242
7.3.3小老鼠的出逃之路 248
7.4 再谈0/1背包问题 253
7.4.1背包问题回顾 253
7.4.2还可以使用贪心算法求解吗 253
7.4.3通过搜索求解背包问题 255
7.5 再谈集装箱装载问题 262
7.5.1集装箱装载问题回顾 263
7.5.2使用贪心算法求解而存在的问题 263
7.5.3通过搜索求解装载问题 264
第8章分支限界法 276
8.1 一步一个脚印——分支限界 277
8.1.1步步为营——广度遍历 277
8.1.2剪掉没有营养的分支 279
8.1.3条条大路通罗马——和回溯法的区别 280
8.2 再谈迷宫中的小老鼠问题 281
8.2.1迷宫中的小老鼠问题回顾 281
8.2.2使用分支限界思路规划小老鼠的路径 283
8.2.3小老鼠的出逃之路 287
8.3 三谈0/1背包问题 291
8.3.10/1背包问题回顾 292
8.3.2使用分支限界的思路装船 294
8.3.3背包的搜索过程 300
8.4 三谈集装箱装载问题 305
8.4.1集装箱装载问题回顾 305
8.4.2使用分支限界的思路装载集装箱 307
8.4.3集装箱的装载过程 314
编程不难(全彩图解 + 微课 + Python编程)(鸢尾花数学大系:从加减乘除到机器学习)
2025-12-12