《计算思维与算法入门》

举报
华章计算机 发表于 2019/12/09 16:42:44 2019/12/09
【摘要】 本节书摘来自华章计算机《计算思维与算法入门》一作者是赵军 等。

计算思维与算法入门


1575880782104693.jpg

赵军  等编著

 

 

 

 

 

前言

程序设计课程越来越普及,让每一个学生拥有程序设计的能力是各大专院校在信息科学与技术教学方面的重点之一。当然,学习程序设计的目标不是把每个学习者都培养成专业的程序设计人员,而是帮助每一个人建立起系统化的逻辑思维模式和习惯。以往程序设计的实践目标非常重视“计算”能力,随着近年来因特网的高速发展,计算能力早已不是唯一的目标,程序设计课程着重于培养学习者的“计算思维”,也就是分析与分解问题的能力。

编写程序代码不过是整个程序设计过程中的一个阶段,在编写程序之前,有需求分析与系统设计两大阶段。计算思维是培养系统化逻辑思维的基础,有了这一基础在面对问题时才能具有系统分析与问题分解的能力,从中探索出可能的解决办法,并找出最有效的算法。

算法一直是计算机科学领域非常重要的基础课程,从程序设计语言实践的角度来看,算法是有志于从事信息技术方面工作的专业人员必须重视的一门基础理论课程。无论我们采用哪种程序设计语言来编写程序,所设计的程序能否快速而高效地完成预定的任务,其中的关键因素都是算法。对于将来不从事信息技术方面工作的人而言,学习算法同样可以培养自己系统化逻辑思维的习惯,这种思维习惯可以运用在各行各业中,让学习者终身受益。

本书精选计算思维与算法课程中核心的内容:第1章介绍程序设计与计算思维两者间的关系;第2章介绍常用数据结构与算法,包括数组、矩阵、链表、堆栈、队列、树、图及哈希表等数据结构,以及分治法、递归法、贪心法、动态规划法、迭代法、枚举法、回溯法等常见的算法;第3~9章针对分治法、贪心法、动态规划法、安全性算法、树结构的算法、改变程序功力的经典算法、游戏设计中的算法,逐一介绍计算机科学中较为知名的一些算法。

为了帮助更多人轻松地了解算法的精髓,本书采用丰富的图例阐述这些算法的基本概念,并结合范例诠释这些算法,期望读者学习之后可以将各种计算思维与算法真正运用于程序设计实践中。

为了检验读者的学习成果,每一章的最后都安排了与本章重点内容相关的习题,让读者有更多操作演练的机会。

最后,希望读者通过学习本书可以培养逻辑思维能力,进而在自己的工作和生活中获益。

本书主要由赵军编著,同时参与编写工作的还有王国春、施研然、王然、孙学南等。如果读者在学习过程中遇到无法解决的问题,或者对本书有意见或建议,可以通过邮箱booksaga@126.com与编者联系。

 

赵军

2019年1月

 

 

 

 

目录

前言

第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


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。