图书目录

第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