第1篇 基础篇
第1章 算法入门 2
1.1 什么是算法 2
1.2 算法基础 3
1.2.1 算法的定义 3
1.2.2 算法的特性 4
1.2.3 算法的性能分析与度量 5
1.2.4 大O表示法 7
1.3 算法的应用领域 9
1.4 小结 11
第2章 算法的描述 12
2.1 用自然语言表示 12
2.2 用流程图表示 14
2.2.1 流程图符号 14
2.2.2 三大基本结构 15
2.3 用N-S图表示 19
2.4 用代码实现算法 21
2.4.1 用伪代码实现算法 21
2.4.2 用编程语言实现算法 21
2.4.3 选择一门编程语言 24
2.5 小结 25
第3章 Python编程基础 26
3.1 变量 26
3.1.1 变量的命名和赋值 26
3.1.2 变量的基本类型 27
3.1.3 变量的输入与输出 29
3.1.4 变量的计算 31
3.2 三大结构 37
3.2.1 顺序结构 37
3.2.2 条件分支结构 37
3.2.3 循环结构 42
3.3 列表与元组 49
3.3.1 列表的创建 49
3.3.2 检测列表元素 50
3.3.3 列表的截取—切片 50
3.3.4 列表的拼接 51
3.3.5 遍历列表 52
3.3.6 列表排序 54
3.3.7 元组 56
3.4 字典与集合 58
3.4.1 字典的定义 59
3.4.2 遍历字典 61
3.4.3 集合简介 62
3.5 函数 64
3.5.1 函数的定义 64
3.5.2 函数的调用 65
3.5.3 函数参数的传递 66
3.6 面向对象基础 70
3.6.1 面向对象概述 70
3.6.2 类的定义和使用 72
3.7 小结 79
第2篇 算法篇
第4章 排序算法 82
4.1 选择排序算法 82
4.2 冒泡排序算法 85
4.3 插入排序算法 88
4.4 合并排序算法 90
4.5 希尔排序算法 94
4.6 快速排序算法 97
4.7 堆排序算法 101
4.7.1 堆的概念 101
4.7.1 使用堆进行排序 103
4.8 计数排序算法 108
4.9 基数排序算法 110
4.10 各种排序算法间的比较 112
4.11 小结 113
第5章 四大经典算法 114
5.1 递归算法 114
5.1.1 什么是递归算法 114
5.1.2 详解递归算法 116
5.1.3 递归算法应用—汉诺塔问题 118
5.2 动态规划算法 121
5.2.1 什么是动态规划算法 121
5.2.2 详解动态规划算法 121
5.2.3 动态规划算法应用—背包问题 123
5.3 贪心算法 128
5.3.1 什么是贪心算法 129
5.3.2 详解贪心算法 129
5.3.3 贪心算法应用—超市找零问题 130
5.4 回溯算法 133
5.4.1 什么是回溯算法 133
5.4.2 详解回溯算法 134
5.4.3 回溯算法应用—四皇后、八皇后问题 135
5.5 小结 140
第6章 其他算法 141
6.1 分治算法 141
6.1.1 递归排序法 142
6.1.2 迭代排序法 144
6.1.3 计算连续子列表的最大和 146
6.2 K最近邻算法 148
6.2.1 图形分类 148
6.2.2 特征提取 148
6.2.3 回归 150
6.3 小结 153
第3篇 数据结构篇
第7章 链表算法 156
7.1 创建单向链表 156
7.2 单向链表的操作 158
7.2.1 链表的基本操作 158
7.2.2 单向链表中结点的添加 159
7.2.3 单向链表中结点的删除 164
7.2.4 单向链表的连接 167
7.2.5 单向链表的反转 170
7.3 堆栈、队列与链表 174
7.3.1 用链表实现堆栈 174
7.3.2 用链表实现队列 177
7.4 小结 181
第8章 树形结构算法 182
8.1 树的概念 182
8.1.1 树的定义 183
8.1.2 树的表示 183
8.1.3 树的相关术语 184
8.2 二叉树简介 184
8.2.1 什么是二叉树 185
8.2.2 二叉树的类别 185
8.3 二叉树操作 186
8.3.1 创建二叉树 187
8.3.2 遍历二叉树 190
8.3.3 二叉树结点的查找 194
8.3.4 二叉树结点的插入 196
8.3.5 二叉树结点的删除 198
8.4 二叉树应用 199
8.4.1 问题描述 199
8.4.2 解析问题 199
8.4.3 代码实现 200
8.5 小结 201
第9章 图形结构算法 202
9.1 图形结构简介 202
9.1.1 图的定义 202
9.1.2 图的相关术语 203
9.2 图的遍历算法 203
9.2.1 深度优先遍历 204
9.2.2 广度优先遍历 206
9.3 查找最小生成树 208
9.3.1 普里姆算法 210
9.3.2 克鲁斯卡尔算法 213
9.4 寻求最短路径 216
9.4.1 狄克斯特拉算法 216
9.4.2 贝尔曼-福特算法 219
9.4.3 弗洛伊德算法 224
9.5 小结 226
第10章 查找算法 227
10.1 顺序查找算法 227
10.2 二分查找算法 229
10.3 插补查找算法 233
10.4 分块查找算法 236
10.5 斐波那契查找算法 239
10.6 哈希查找算法 243
10.6.1 哈希表和哈希函数 243
10.6.2 除留余数法 244
10.6.3 折叠法 244
10.6.4 平方取中法 245
10.6.5 碰撞与溢出问题 246
10.7 不同查找算法的时间复杂度比较 247
10.8 小结 248
第11章 哈希表 249
11.1 什么是哈希表 249
11.2 哈希函数 249
11.3 解决哈希表的冲突问题 250
11.3.1 开放定址法 250
11.3.2 链地址法 252
11.3.3 再哈希函数法 253
11.3.4 建立公共溢出区法 254
11.3.5 4种解决方法比较 254
11.4 哈希表的性能 255
11.4.1 负载因子 255
11.4.2 时间性能 255
11.5 哈希表的应用 256
11.5.1 问题描述 256
11.5.2 解析问题 256
11.5.3 Python代码实现 257
11.6 小结 258
第4篇 实例篇
第12章 使用算法解决常见数学问题 260
12.1 斐波那契数列 260
12.1.1 问题描述 260
12.1.2 解析问题 260
12.1.3 代码实现 261
12.2 寻找水仙花数 262
12.2.1 问题描述 262
12.2.2 解析问题 262
12.2.3 代码实现 263
12.3 爱因斯坦阶梯 263
12.3.1 问题描述 263
12.3.2 解析问题 264
12.3.3 代码实现 264
12.4 验证四方定理 265
12.4.1 问题描述 265
12.4.2 解析问题 265
12.4.3 代码实现 265
12.5 角谷猜想 266
12.5.1 问题描述 266
12.5.2 解析问题 266
12.5.3 代码实现 267
12.6 挖黄金矿 268
12.6.1 问题描述 268
12.6.2 解析问题 268
12.6.3 代码实现 274
12.7 求解最大公约数和最小公倍数 276
12.7.1 问题描述 276
12.7.2 解析问题 276
12.7.3 代码实现 276
12.8 使用二分法求解平方根 277
12.8.1 问题描述 277
12.8.2 解析问题 277
12.8.3 代码实现 278
12.9 分解质因数 279
12.9.1 问题描述 279
12.9.2 解析问题 279
12.9.3 代码实现 279
12.10 数字黑洞 280
12.10.1 问题描述 280
12.10.2 解析问题 280
12.10.3 代码实现 280
12.11 埃及分数式 281
12.11.1 问题描述 281
12.11.2 解析问题 281
12.11.3 代码实现 282
12.12 小结 282
第13章 算法常见经典问题 283
13.1 鸡兔同笼 283
13.1.1 问题描述 283
13.1.2 解析问题 283
13.1.3 代码实现 283
13.2 计算选手的最后得分 284
13.2.1 问题描述 284
13.2.2 解析问题 284
13.2.3 代码实现 285
13.3 猜数字 286
13.3.1 问题描述 286
13.3.2 解析问题 286
13.3.3 代码实现 286
13.4 凯撒加密术 288
13.4.1 问题描述 288
13.4.2 解析问题 288
13.4.3 代码实现 288
13.5 随机分配办公室 290
13.5.1 问题描述 290
13.5.2 解析问题 290
13.5.3 代码实现 290
13.6 取火柴游戏 291
13.6.1 问题描述 291
13.6.2 解析问题 291
13.6.3 代码实现 291
13.7 计算影厅座位数 293
13.7.1 问题描述 293
13.7.2 解析问题 293
13.7.3 代码实现 294
13.8 五家共井 295
13.8.1 问题描述 295
13.8.2 解析问题 295
13.8.3 代码实现 295
13.9 借书 296
13.9.1 问题描述 296
13.9.2 解析问题 296
13.9.3 代码实现 296
13.10 三色球 297
13.10.1 问题描述 297
13.10.2 解析问题 297
13.10.3 代码实现 298
13.11 马踏棋盘 298
13.11.1 问题描述 298
13.11.2 解析问题 298
13.11.3 代码实现 299
13.12 小结 300