《算法与程序设计》是由电子工业出版社出版的一本关于算法方面的书籍,作者是杨建英,主要介绍了关于算法、程序设计方面的知识内容,目前在算法类书籍综合评分为:7.5分。
书籍介绍
内容简介
本书遵循“精选案例,面向设计,深入浅出,注重能力培养”的要求,以案例形式实现算法与程序设计教学,精选了穷举法、递推法、回溯法、分支限界法、递归法、分治法、贪心算法、动态规划法和随机算法等常用算法进行讲解,并给出了使用各算法求解的典型案例。对于每一个案例的求解,从问题提出到算法设计、从程序实现到算法复杂度分析,环环相扣,融为一体,力求理论与实际相结合、算法与程序相统一,突出算法在解决实际问题中的核心地位与引导作用。本书中的所有案例均给出算法设计要点与完整的C语言或者C++语言程序代码(均在VC++ 6.0上编译通过)。为方便教学,每章都附有习题,同时提供教学课件、习题答案、源代码等配套资源,读者可登录华信教育资源网免费下载使用。本书既可作为高等院校计算机专业相关课程的教材,也可供IT从业人员和计算机编程爱好者参考使用。
目录
- 第1章算法与程序设计简介 1
- 1.1初识算法 1
- 1.1.1算法的基本概念 2
- 1.1.2算法的描述 4
- 1.1.3算法设计的步骤 7
- 1.1.4算法的分类 8
- 1.2算法复杂度分析 9
- 1.2.1时间复杂度 9
- 1.2.2空间复杂度 14
- 1.2.3算法设计实例 15
- 1.3程序设计简介 17
- 1.3.1算法与程序 18
- 1.3.2结构化程序设计 19
- 1.3.3结构化程序设计实例 20
- 习题 21
- 第2章穷举法 23
- 2.1穷举法概述 23
- 2.1.1穷举法的基本思想 23
- 2.1.2穷举法的实施步骤与算法描述 23
- 2.2整数搜索 25
- 2.2.1算24点游戏 25
- 2.2.2韩信点兵 27
- 2.2.3素数问题 28
- 2.2.4约瑟夫环问题 29
- 2.2.5火柴棒等式 30
- 2.2.6三色旗问题 31
- 2.2.7勾股数问题 32
- 2.2.8猜价格游戏 33
- 2.3分解与重组 35
- 2.3.1水仙花数 35
- 2.3.2回文数 35
- 2.3.3完数 36
- 2.4趣味数学 37
- 2.4.1百钱买百鸡问题 37
- 2.4.2搬砖问题 38
- 2.4.3鸡兔同笼问题 38
- 2.4.4数学灯谜 39
- 2.5解方程与不等式 40
- 2.5.1解二元一次方程 40
- 2.5.2解完美立方式 40
- 2.5.3解一元二次不等式 41
- 2.6数阵与图形 42
- 2.6.1杨辉三角形 42
- 2.6.2输出各种图形 43
- 2.7穷举设计的优化 45
- 习题 47
- 第3章递推法 48
- 3.1递推法概述 48
- 3.1.1递推法的基本思想 48
- 3.1.2递推法的实施步骤与算法描述 49
- 3.2递推数列 51
- 3.2.1斐波那契数列和卢卡斯数列 51
- 3.2.2分数数列 53
- 3.2.3幂序列 53
- 3.2.4双关系递推数列 54
- 3.2.5储油点问题 56
- 3.3递推数阵 57
- 3.3.1累加和 57
- 3.3.2阶乘问题 58
- 3.3.3九九乘法表 58
- 3.4递推的其他应用 59
- 3.4.1猴子爬山问题 59
- 3.4.2整币兑零问题 60
- 3.4.3整数划分问题 61
- 3.4.4汉诺塔问题 61
- 3.4.5体重指数BMI 62
- 3.4.6求π的近似值 63
- 3.4.7求一元二次方程的根 63
- 3.4.8求三角形的面积 64
- 3.4.9存钱问题 65
- 3.4.10求最大公约数和最小公倍数 66
- 习题 67
- 第4章回溯法 68
- 4.1回溯法概述 68
- 4.1.1回溯法的基本思想 68
- 4.1.2回溯法的实施步骤和算法描述 69
- 4.2回溯法的应用 70
- 4.2.1八皇后问题 70
- 4.2.2图的着色问题 71
- 4.2.3装载问题 73
- 4.2.4批处理作业调度 75
- 4.2.5符号三角形问题 77
- 4.2.6最大团问题 78
- 4.2.7旅行售货员问题 80
- 4.2.8电路板排列问题 82
- 4.2.9连续邮资问题 84
- 4.2.10圆排列问题 86
- 4.2.11桥本分数式 88
- 4.2.12素数环 89
- 4.2.13神奇古尺 91
- 4.3回溯设计的优化 92
- 习题 93
- 第5章分支限界法 94
- 5.1分支限界法概述 94
- 5.1.1分支限界法的基本思想 94
- 5.1.2分支限界法的实施步骤和算法描述 94
- 5.2分支限界法的应用 95
- 5.2.1迷宫问题 95
- 5.2.2六数码问题 98
- 5.2.3旅行商问题 101
- 5.2.4背包问题 104
- 5.3回溯法与分支限界法的比较 108
- 习题 109
- 第6章递归法 110
- 6.1递归法概述 110
- 6.1.1递归法的基本思想 110
- 6.1.2递归法的实施步骤和算法描述 110
- 6.2递归法的应用 111
- 6.2.1整数划分问题 111
- 6.2.2汉诺塔问题 112
- 6.2.3枚举排列问题 113
- 6.2.4用递归法求斐波那契数列 114
- 6.2.5排队买票问题 115
- 6.2.6猴子吃桃子问题 116
- 6.2.7RPG涂色问题 117
- 6.2.8二叉树的遍历 118
- 6.3回溯法与递归法的比较 120
- 习题 120
- 第7章分治法 121
- 7.1分治法概述 121
- 7.1.1分治法的基本思想 121
- 7.1.2分治法的实施步骤和算法描述 122
- 7.2分治法的应用 123
- 7.2.1二分查找法 123
- 7.2.2大整数乘法 125
- 7.2.3斯特拉森矩阵乘法 127
- 7.2.4棋盘覆盖问题 128
- 7.2.5合并排序 129
- 7.2.6快速排序 132
- 7.2.7线性时间选择 133
- 7.2.8最近点对问题 136
- 7.2.9循环赛日程表 137
- 7.3递归转化 139
- 7.3.1一般的递归转非递归 139
- 7.3.2分治法中的递归转化 141
- 习题 143
- 第8章贪心算法 145
- 8.1贪心算法概述 145
- 8.1.1贪心算法的基本思想 145
- 8.1.2贪心算法的实施步骤与算法描述 145
- 8.2活动安排问题 146
- 8.3田忌赛马 148
- 8.4背包问题 149
- 8.5覆盖问题 151
- 8.5.1区间覆盖问题 151
- 8.5.2最大不相交覆盖 151
- 8.5.3点覆盖 151
- 8.6教室调度问题 153
- 8.7最小生成树——Kruskal算法 155
- 8.8最小生成树——Prim算法 157
- 8.9哈夫曼编码 160
- 8.10教室分配问题 164
- 8.11最短路径——弗洛伊德算法 166
- 8.12最短路径——迪杰斯德拉算法 169
- 8.13均分纸牌 172
- 8.14最佳浏览路线问题 173
- 8.15机器调度问题 175
- 8.16钱币找零问题 176
- 习题 177
- 第9章动态规划法 178
- 9.1动态规划法概述 178
- 9.1.1动态规划法的基本思想 178
- 9.1.2动态规划法的实施步骤与算法描述 179
- 9.2装载问题 180
- 9.3投资分配问题 181
- 9.4背包问题 185
- 9.4.10-1背包问题 185
- 9.4.2二维0-1背包问题 187
- 9.5最长子序列探索 188
- 9.5.1最长非降子序列 188
- 9.5.2最长公共子序列(Longest Common Subsequence,LCS) 190
- 9.6最优路径搜索 192
- 9.6.1数字三角形最大路径和 192
- 9.6.2多源最短路径问题 194
- 9.6.3走方格问题 197
- 9.6.4邮资问题 198
- 9.7动态规划与其他算法的比较 199
- 习题 200
- 第10章随机算法 201
- 10.1随机算法概述 201
- 10.2随机数 201
- 10.2.1随机生成数组元素 202
- 10.2.2随机生成数字 204
- 10.2.3随机生成计算题 206
- 10.3同余算法 208
- 10.4舍伍德算法 209
- 10.5蒙特卡罗算法 211
- 10.5.1用蒙特卡罗算法求π的值 211
- 10.5.2用蒙特卡罗算法求特殊图形的面积 212
- 10.5.3蒙特卡罗算法的优缺点及改进措施 213
- 10.6拉斯维加斯算法 214
- 10.7蒙特卡罗算法和拉斯维加斯算法的比较 217
- 10.8随机算法的优缺点 217
- 习题 217
- 附录A不同算法的比较 219
- 参考文献 221