《计算思维与算法入门》
计算思维与算法入门
赵军 等编著
前言
程序设计课程越来越普及,让每一个学生拥有程序设计的能力是各大专院校在信息科学与技术教学方面的重点之一。当然,学习程序设计的目标不是把每个学习者都培养成专业的程序设计人员,而是帮助每一个人建立起系统化的逻辑思维模式和习惯。以往程序设计的实践目标非常重视“计算”能力,随着近年来因特网的高速发展,计算能力早已不是唯一的目标,程序设计课程着重于培养学习者的“计算思维”,也就是分析与分解问题的能力。
编写程序代码不过是整个程序设计过程中的一个阶段,在编写程序之前,有需求分析与系统设计两大阶段。计算思维是培养系统化逻辑思维的基础,有了这一基础在面对问题时才能具有系统分析与问题分解的能力,从中探索出可能的解决办法,并找出最有效的算法。
算法一直是计算机科学领域非常重要的基础课程,从程序设计语言实践的角度来看,算法是有志于从事信息技术方面工作的专业人员必须重视的一门基础理论课程。无论我们采用哪种程序设计语言来编写程序,所设计的程序能否快速而高效地完成预定的任务,其中的关键因素都是算法。对于将来不从事信息技术方面工作的人而言,学习算法同样可以培养自己系统化逻辑思维的习惯,这种思维习惯可以运用在各行各业中,让学习者终身受益。
本书精选计算思维与算法课程中核心的内容:第1章介绍程序设计与计算思维两者间的关系;第2章介绍常用数据结构与算法,包括数组、矩阵、链表、堆栈、队列、树、图及哈希表等数据结构,以及分治法、递归法、贪心法、动态规划法、迭代法、枚举法、回溯法等常见的算法;第3~9章针对分治法、贪心法、动态规划法、安全性算法、树结构的算法、改变程序功力的经典算法、游戏设计中的算法,逐一介绍计算机科学中较为知名的一些算法。
为了帮助更多人轻松地了解算法的精髓,本书采用丰富的图例阐述这些算法的基本概念,并结合范例诠释这些算法,期望读者学习之后可以将各种计算思维与算法真正运用于程序设计实践中。
为了检验读者的学习成果,每一章的最后都安排了与本章重点内容相关的习题,让读者有更多操作演练的机会。
最后,希望读者通过学习本书可以培养逻辑思维能力,进而在自己的工作和生活中获益。
本书主要由赵军编著,同时参与编写工作的还有王国春、施研然、王然、孙学南等。如果读者在学习过程中遇到无法解决的问题,或者对本书有意见或建议,可以通过邮箱booksaga@126.com与编者联系。
赵军
2019年1月
目录
前言
第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
- 点赞
- 收藏
- 关注作者
评论(0)