很杰出:凝聚力4位创作者10年程序编写工作经验,陪你理解优化算法的精粹
很趣味:全书选用栩栩如生幽默的語言,让优化算法已不好学
很实战演练:全书包含36个案例,9类别优化算法,很有实战演练使用价值
很详解:对每个优化算法,都得出了详解表明,确保一学就会
程序编写的关键是优化算法,学习培训优化算法不但能教會你解决困难的方式,并且还能为了你将来的发展趋势出示这种将会。这书朝向优化算法新手,最先详细介绍时下时兴的计算机语言Python,详尽解读了Python語言的自变量和次序、支系、循环系统几大构造,及其目录和函数的应用,为以后学习培训优化算法做好基本。随后以通俗化栩栩如生的語言解读了双表针、哈希、深度1优先选择、深度广度优先选择、回朔、贪婪、动态规划和*短相对路径等經典优化算法。
目录
- 第1章 编程基础 1
- 1.1 变量 1
- 1.1.1 输出和输入 2
- 1.1.2 简单变量类型 3
- 1.1.3 数学计算 6
- 1.1.4 位运算 7
- 1.1.5 使用字符串 11
- 1.2 三大结构 15
- 1.2.1 循序结构 15
- 1.2.2 分支结构 16
- 1.2.3 条件判断 18
- 1.2.4 应用分支结构 20
- 1.2.5 循环结构 21
- 1.2.6 continue和break 23
- 1.2.7 应用循环结构 24
- 1.2.8 结构的嵌套 26
- 1.3 列表 27
- 1.3.1 定义列表 27
- 1.3.2 对元素进行操作 28
- 1.3.3 列表的顺序 31
- 1.3.4 列表内置函数 33
- 1.3.5 截取和拼接列表 36
- 1.3.6 字符串、元组和列表 38
- 1.3.7 用循环遍历列表 40
- 1.3.8 字典简介 41
- 1.4 函数 43
- 1.4.1 定义子函数 43
- 1.4.2 主函数 44
- 1.4.3 调用函数 45
- 1.4.4 全局变量 47
- 1.4.5 函数的运用 48
- 第2章 双指针问题 53
- 2.1 数组合并 53
- 2.1.1 合并有序数组 53
- 2.1.2 最终代码 56
- 2.2 二分查找 56
- 2.2.1 什么是二分查找 57
- 2.2.2 问题求解 58
- 2.2.3 最终代码 60
- 2.3 链表 60
- 2.3.1 什么是单链表 60
- 2.3.2 建立单链表 61
- 2.3.3 建立双链表 63
- 2.3.4 双向输出双链表 65
- 2.3.5 向单链表中添加元素 66
- 2.3.6 向双链表中添加元素 69
- 2.3.7 删除列表中的元素 71
- 第3章 哈希算法 75
- 3.1 什么是哈希 75
- 3.2 两个数的和 78
- 3.2.1 问题求解1 78
- 3.2.2 解法1的最终代码 80
- 3.2.3 问题求解2 81
- 3.2.4 解法2的最终代码 82
- 3.3 单词模式匹配 82
- 3.3.1 问题求解 83
- 3.3.2 最终代码 85
- 3.4 猜词游戏 85
- 3.4.1 问题求解 87
- 3.4.2 最终代码 88
- 3.5 神奇的词根 89
- 3.5.1 问题求解 90
- 3.5.2 最终代码 92
- 第4章 深度优先遍历 93
- 4.1 什么是深度优先遍历 93
- 4.2 二叉树 95
- 4.2.1 二叉树的类型 95
- 4.2.2 二叉树的相关术语 96
- 4.2.3 二叉树的节点代码 97
- 4.2.4 二叉树的遍历顺序 97
- 4.2.5 深度优先遍历与广度优先遍历 97
- 4.3 怎么抓住小偷 98
- 4.3.1 解题思路 98
- 4.3.2 从思路到代码 102
- 4.4 二叉树中的最大路径和 102
- 4.4.1 解题思路 103
- 4.4.2 完整代码 112
- 4.5 最大的岛屿 113
- 4.5.1 解题思路 113
- 4.5.2 完整代码 116
- 第5章 广度优先遍历 118
- 5.1 什么是广度优先遍历 118
- 5.2 选课的智慧 120
- 5.2.1 广度优先遍历 121
- 5.2.2 问题求解 122
- 5.2.3 最终代码 124
- 5.3 寻找制高点 125
- 5.3.1 问题求解 126
- 5.3.2 集合 129
- 5.3.3 最终代码 130
- 5.4 合法的括号 131
- 5.4.1 问题求解 131
- 5.4.2 最终代码 135
- 5.5 树的右侧 136
- 5.5.1 问题求解 136
- 5.5.2 最终代码 139
- 第6章 回溯算法 141
- 6.1 什么是回溯 141
- 6.2 遍历所有排序方式 142
- 6.2.1 问题求解 142
- 6.2.2 最终代码 144
- 6.3 经典问题的组合 147
- 6.3.1 问题求解 147
- 6.3.2 最终代码 149
- 6.4 查找单词问题 151
- 6.4.1 问题求解 152
- 6.4.2 最终代码 155
- 6.5 八皇后问题 157
- 6.5.1 问题求解 158
- 6.5.2 最终代码 160
- 6.6 教你解数独 164
- 6.6.1 问题求解 165
- 6.6.2 最终代码 168
- 第7章 贪心算法 172
- 7.1 硬币找零问题 173
- 7.1.1 问题描述 173
- 7.1.2 最终代码 175
- 7.2 活动安排问题 175
- 7.2.1 问题描述 176
- 7.2.2 最终代码 177
- 7.3 哈夫曼编码 178
- 7.3.1 问题描述 178
- 7.3.2 哈夫曼树 179
- 7.3.3 贪心选择性质 181
- 7.3.4 最优子结构性质 182
- 7.3.5 最终代码 183
- 第8章 动态规划算法 185
- 8.1 爬楼梯问题 185
- 8.1.1 问题描述 186
- 8.1.2 最终代码 188
- 8.2 矿工挖矿问题 189
- 8.2.1 问题描述 189
- 8.2.2 最终代码 195
- 8.3 背包问题 195
- 8.3.1 问题描述 195
- 8.3.2 问题实例 196
- 8.3.3 最终代码 201
- 8.4 最长递归子序列问题 202
- 8.4.1 问题描述 202
- 8.4.2 改进算法 204
- 8.4.3 最终代码 205
- 第9章 最短路径问题 207
- 9.1 迪可斯特朗算法 207
- 9.1.1 术语释义 208
- 9.1.2 问题示例:最短公交线路 208
- 9.1.3 图与节点的定义 209
- 9.1.4 把图用代码“画”出来 210
- 9.1.5 算法核心:两个节点集合 210
- 9.1.6 算法核心:循环 210
- 9.1.7 输出路线 211
- 9.1.8 通过示例理解算法 211
- 9.1.9 完整代码展示 214
- 9.2 Floyd算法 216
- 9.2.1 算法核心:两个矩阵 216
- 9.2.2 算法核心:通过中介点缩短距离 217
- 9.2.3 通过示例理解算法 218
- 9.2.4 完整代码 222
- 9.3 A*算法 223
- 9.3.1 算法核心:迪可斯特朗算法 223
- 9.3.2 算法核心:预估函数 224
- 9.3.3 算法核心:选择预估函数 226
- 9.3.4 A*算法的兄弟们 226
- 第10章 分治算法 227
- 10.1 什么是分治 227
- 10.2 归并排序 228
- 10.2.1 递归法与迭代法 228
- 10.2.2 递归法描述 229
- 10.2.3 迭代法描述 232
- 10.2.4 最终代码 233
- 10.3 连续子列表的最大和 235
- 10.3.1 解题思路 235
- 10.3.2 最终代码 237
- 10.4 几何问题之凸包 238
- 10.4.1 问题求解 238
- 10.4.2 最终代码 240
- 10.5 数学问题之多项式乘法 242
- 10.5.1 问题求解 242
- 10.5.2 最终代码 245