第1章 程序设计与计算思维 1
1.1 认识计算思维 4
1.1.1 分解 6
1.1.2 模式识别 9
1.1.3 模式概括与抽象 11
1.1.4 算法 13
1.2 算法的条件 15
1.3 课后习题 21
第2章 常用数据结构与算法 22
2.1 认识数据结构 24
2.2 常见的数据结构 27
2.3 矩阵与深度学习 29
2.3.1 稀疏矩阵 33
2.3.2 矩阵相加算法 34
2.3.3 矩阵相乘算法 34
2.3.4 转置矩阵 35
2.4 链表 35
2.4.1 单向链表的串接算法 37
2.4.2 单向链表节点的删除算法 37
2.4.3 在单向链表中添加新节点 38
2.4.4 单向链表的反转 39
2.5 堆栈 40
2.6 队列 42
2.6.1 双向队列 44
2.6.2 优先队列 44
2.7 树结构 45
2.7.1 树的基本概念 46
2.7.2 二叉树 48
2.7.3 树转化为二叉树的算法 51
2.7.4 二叉树转化为树的算法 53
2.8 图简介 54
2.9 哈希表 57
2.10 课后习题 59
第3章 分治法 60
3.1 分治法简介 61
3.2 递归法 62
3.3 汉诺塔算法 63
3.4 快速排序法 68
3.5 合并排序法 70
3.6 二分查找法 71
3.7 课后习题 72
第4章 贪心法 74
4.1 贪心法简介 75
4.2 最小生成树 76
4.2.1 Prim算法 77
4.2.2 Kruskal算法 79
4.3 图的最短路径法 81
4.3.1 Dijkstra算法 81
4.3.2 A*算法 83
4.3.3 Floyd算法 86
4.4 课后习题 88
第5章 动态规划法 90
5.1 动态规划法简介 91
5.2 字符串对比功能 93
5.3 AOV网络与拓扑排序 94
5.4 AOE网络 97
5.5 青蛙跳台阶算法 99
5.6 课后习题 101
第6章 安全性算法 102
6.1 数据加密 104
6.1.1 对称密钥加密系统 105
6.1.2 非对称密钥加密系统与RSA算法 106
6.1.3 认证 107
6.1.4 数字签名 107
6.2 哈希算法 109
6.2.1 除留余数法 109
6.2.2 平方取中法 111
6.2.3 折叠法 112
6.2.4 数字分析法 113
6.3 碰撞与溢出处理 113
6.3.1 线性探测法 114
6.3.2 平方探测法 114
6.3.3 再哈希法 115
6.4 课后习题 116
第7章 树结构的算法 118
7.1 二叉树的遍历 119
7.2 二叉查找树 122
7.3 优化二叉查找树 126
7.3.1 扩充二叉树 126
7.3.2 哈夫曼树 128
7.4 平衡树(AVL树) 129
7.5 博弈树——八枚金币问题 132
7.6 堆积排序法 134
7.7 斐波那契查找法 136
7.8 课后习题 139
第8章 改变程序功力的经典算法 141
8.1 迭代法 142
8.1.1 帕斯卡三角算法 143
8.1.2 插入排序法 145
8.1.3 希尔排序法 146
8.1.4 基数排序法 147
8.2 枚举法 148
8.2.1 3个小球放入盒子 150
8.2.2 质数求解算法 152
8.2.3 顺序查找法 154
8.2.4 冒泡排序法 154
8.2.5 选择排序法 156
8.3 回溯法 158
8.3.1 老鼠走迷宫 158
8.3.2 八皇后算法 160
8.4 课后习题 161
第9章 游戏设计中的算法 163
9.1 游戏中的数学与物理算法 164
9.1.1 两点距离的算法 164
9.1.2 匀速运动 166
9.1.3 加速运动 167
9.2 图的遍历算法 168
9.2.1 路径算法 168
9.2.2 深度优先查找算法 170
9.2.3 广度优先查找算法 172
9.3 碰撞处理算法 173
9.3.1 以行进路线来检测 174
9.3.2 范围检测 176
9.3.3 颜色检测 179
9.4 遗传算法 182
9.5 课后习题 184
附录 课后习题与参考答案 185