计算机常用算法与程序设计案例教程(第3版)
定 价:¥69
中 教 价:¥41.40 (6.00折)
库 存 数: 22
丛 书 名:高等院校信息技术系列教材
本书遵循精选案例,面向设计,深入浅出,注重能力培养的宗旨,以案例形式实现算法与程序设计教学。本书选取枚举、递推、递归、回溯、动态规划、贪心算法、分支限界法与模拟等常用算法,并精选应用各算法设计求解的典型案例。书中每个案例求解,从案例提出到算法设计与程序实现,从案例结果显示到算法改进与程序优化,环环相扣,融为一体,力求算法理论与实际应用相结合、算法与程序相统一,突出算法在解决实际案例中的核心地位与引导作用。书中所有案例求解均给出详细的算法设计提要与完整的C程序清单,所有程序均在VC 6.0编译通过,所有源代码均可从指定网站下载。本书可作为高等院校计算机及相关专业算法设计与分析程序设计基础与应用等课程的教材,也可供各类计算机程序设计竞赛与计算机编程培训参考。
(1)首创案例形式实现算法与程序设计教学。通过实际案例的求解见证算法设计的神奇与功效,实现以典型案例支撑算法设计,以算法设计指导案例求解的良性循环。 (2)注重常用算法的选取与组织。 在常用算法的选取上克服贪多求全、贪广求深,去除若干难度大、理论深、少有应用的算法罗列,结合本科教学目标与应用实际,选取常用算法。 (3)注重典型案例的精选与提炼。 针对选取的每一种常用算法,精选典型的实际应用案例。 (4)注重算法设计与程序实现的紧密结合。本教程对每一 种常用算法的设计规范,具体落实到实际案例求解的各个环节:有算法设计提要、有程序实 现清单,有运行示例显示,有算法改进与程序优化,环环相扣,融为一体。 (5)注重算法改进与程序优化。 教程对一些典型案例应用多种不同的算法设计,编写不同表现形式与设计风格的程序, 充分体现了算法与程序设计的灵活性和多样性。
计算机常用算法与程序设计案例教程(第3版)前言前言计算机算法与程序设计是计算机科学与技术的核心内容,是大学计算机相关专业的重要专业基础课。通过对现有计算机专业算法设计与分析教学的调研分析,很多同学对学过的算法思路不明了,描述不清楚,设计不到位,无法应用算法设计程序解决一些常见的实际问题。造成这一局面的重要原因之一是缺少适合计算机本科层次的算法与程序设计教材。一般现有算法设计与分析教材在算法选取上贪多求全、贪广求深,混杂一些难度大、理论深、少有应用的算法罗列。同时,在讲授算法时存在对算法的抽象描述多,应用算法设计解决实际问题少等偏差,造成算法与程序设计脱节,算法理论与实际应用脱节,不利于学生应用算法与程序设计解决实际问题能力的提高。为此,我们对《计算机程序设计经典题解》(清华大学出版社, 2007)、《至美C程序设计》(中国水利水电出版社,2016)与《计算机常用算法与程序设计教程》(第2版, 人民邮电出版社, 2017)等进行优化整合,推出适合本科算法与程序设计教学实际的案例教程。本书遵循精选案例,面向设计,深入浅出,注重能力培养的宗旨,在常用算法典型案例的选取与深度的把握上,在算法理论与案例求解的结合上进行精心设计,力图适合高校计算机本科教学目标与知识结构的要求。本书具有以下5个特色。1. 首创案例形式实现算法与程序设计教学学习算法与程序设计是为了培养提高学生应用算法与程序设计解决实际问题的能力,算法与程序设计课程教学无疑是最适宜以案例形式来实现的。通过实际案例的求解见证算法设计的神奇与功效,实现以典型案例支撑算法设计,以算法设计指导案例求解的良性循环。采用案例形式实现算法与程序设计教学在全国属首创。对每个案例求解,从案例提出到算法设计、从程序实现到显示运行结果,从算法分析到程序设计优化,环环相扣,融为一体,让学生看得见、摸得着、学得会、用得上,从而收到立竿见影、举一反三的效果。2. 注重常用算法的选取与组织在常用算法的选取上克服贪多求全、贪广求深,去除若干难度大、理论深、少有应用的算法罗列,结合本科教学目标与应用实际,选取枚举、递推、递归、回溯、动态规划、贪心算法、分支限界法与模拟等常用算法。注意到分支限界是一种以广度优先搜索最优解的基本算法,本版将分支限界法列入常用算法之中。特别指出的是,模拟算法中的竖式运算模拟是总结推广数论高精度计算的创新成果。对精选的各种常用算法,在介绍算法的基本理论与设计思路基础上,从实际案例的求解入手,重点突出该算法的基本思路、设计规范与实施步骤,列出程序清单,显示案例求解结果,达到清晰明了、水到渠成的效果。3. 注重典型案例的精选与提炼针对选取的每一种常用算法,精选典型的实际应用案例,包括基本的数值求解、常规的数据处理、有趣的智力测试、巧妙的模拟探索,既有引导入门的基础案例,也有难度较大的综合案例;既有历史悠久的经典名题,也有构思巧妙的新创趣题,难度适宜,深入浅出。培养学生的学习兴趣,激发学生的学习热情,不是一两句空洞说教所能奏效的,必须通过一系列有趣的实际案例来引导。本书针对所精选的常用算法,设计出初等难度基础型、中等难度提升型、较高难度综合型3种梯度的实际案例。这些案例的精选与提炼,有利于提高学生学习算法与程序设计的兴趣,有利于学生在计算机实际应用方面开阔视野,使之在算法思路的开拓与设计技能的运用上有一个深层次的锻炼与提高。其中,难度较大的综合案例可作为相应课程的课程设计选用。4. 注重算法设计与程序实现的紧密结合算法与程序实际上是一个统一体,不应该也不可能将它们对立与分割。本书对每一种常用算法的设计规范,具体落实到实际案例求解的各个环节: 有算法设计提要,有程序实现清单,有运行示例显示,有算法改进与程序优化,环环相扣,融为一体。通过算法设计与程序实现的紧密结合,突出算法在解决实际案例中的核心地位与引导作用,不断加深对所学算法的理解和领悟,切实提升应用所学算法解决实际问题的能力。本书采用功能丰富、应用面广、高校学生使用率最高的 C语言描述算法、编写程序。为使用方便,所有程序均在VC 6.0编译通过。5. 注重算法改进与程序优化本书对一些典型案例应用多种不同的算法设计,编写不同表现形式与设计风格的程序,充分体现了算法与程序设计的灵活性和多样性。算法与程序设计都不是一成不变的,可以实施多层次全方位的变通,变通出成果,变通长能力。算法改进与程序优化的过程,既是提高案例求解效率的过程,也是算法设计能力培养与提高的过程,更是优化意识与创新能力增强的过程。为方便算法设计练习与查阅,附录中提供部分习题求解提示,介绍在VC 6.0环境下运行C程序的方法,并列出C语言常用函数。书中的所有案例源程序与部分习题源代码均可在指定网站下载。在书稿的编写与修订过程中,湖南理工学院教务处及王岳斌教授、严权峰教授、周持中教授等给予了多方面支持与帮助,笔者在此一并深表感谢。尽管每个案例求解都经反复核实检查,每个求解程序都经多轮运行调试,因涉及内容较广,难免存在差错,恳请各位读者批评指正。
杨克昌2023年11月于岳阳南湖
第1章算法与程序设计概述11.1算法及其描述11.1.1算法定义11.1.2算法描述31.2算法的复杂性分析71.2.1时间复杂度71.2.2空间复杂度121.3算法设计与分析示例131.3.1求解最大公约数131.3.2拆分为连续正整数之和141.3.3统计n!尾部零161.4算法与程序设计181.4.1算法与程序181.4.2结构化程序设计23习题125第2章枚举272.1枚举概述272.2素数与合数282.2.1区间素数搜索292.2.2探求合数世纪302.2.3合数的质因数分解322.3解方程342.3.1佩尔方程352.3.2超越方程362.4解不等式382.4.1分数不等式382.4.2代数和不等式392.5求最值422.5.1基于素数的代数和422.5.2整数的因数比432.6整数拆分452.6.1简单的整币兑零452.6.2拆分构建双和二组482.7数式探求502.7.1逆序乘积式502.7.2完美综合式512.8趣味数阵542.8.1素数幻方542.8.2和积三角形572.9枚举应用小结59习题262第3章递推643.1递推概述643.1.1递推算法643.1.2递推实施步骤与描述653.2超级素数搜索663.3递推数列693.3.1摆动数列703.3.2分数数列713.4幂序列723.4.1双幂序列723.4.2幂积序列743.5数阵与网格793.5.1杨辉三角793.5.2交通方格网813.6整数划分问题833.6.1整数划分递推设计833.6.2整数划分递推优化843.7增强型整币兑零863.8猴子爬山893.8.1简单案例的具体递推893.8.2一般情形的分级递推903.9递推应用小结92习题393第4章递归954.1递归概述954.2排队购票984.3汉诺塔问题994.3.1求移动次数1004.3.2展示移动过程1014.4旋转数阵1024.4.1双转向旋转方阵1024.4.2m行n列顺转矩阵1054.5快速排序与选择1074.5.1快速排序1074.5.2分区交换选择1104.6排列组合的实现1124.6.1实现排列A(n,m)1124.6.2实现组合C(n,m)1144.6.3复杂排列1164.7整数的拆分1184.7.1拆分零数取自连续区间1184.7.2拆分零数取自指定整数1194.8递归应用小结121习题4124第5章回溯法1255.1回溯法概述1255.1.1回溯的概念1255.1.2回溯描述1255.2桥本分数式与10数字分数式1295.2.1桥本分数式1295.2.210数字分数式1315.3直尺与串珠1335.3.1古尺神奇1335.3.2数码串珠1355.4逐位整除数1375.5环序列1415.5.1素数和环1415.5.2德布鲁金环1425.6伯努利装错信封问题1445.6.1装错信封问题1455.6.2特殊错位探索1485.7别出心裁的情侣拍照问题1505.7.1逐位安排与回溯1505.7.2成对安排与回溯1525.8回溯应用小结153习题5156第6章动态规划1576.1动态规划概述1576.1.1动态规划的概念1576.1.2动态规划实施步骤1586.2最长子序列探索1596.2.1最长非降子序列1596.2.2最长公共子序列1626.3最优路径搜索1646.3.1点数值三角形的最优路径1656.3.2边数值矩形的最优路径1666.4装载问题1696.501背包问题1736.5.1一般01背包问题1736.5.2二维约束01背包问题1776.6凸n边形的三角形划分1796.7插入乘号问题1816.8动态规划应用小结184习题6186第7章贪心算法1887.1贪心算法概述1887.2删数字问题1907.3埃及分数式1927.3.1选择最小分母构建1937.3.2贪心选择范围的扩展1947.4可拆背包问题1957.5数列操作与极差1977.5.1数列操作1977.5.2数列操作优化1987.5.3数列极差2007.6哈夫曼树及其应用2027.6.1哈夫曼树2027.6.2哈夫曼编码2047.7贪心算法应用小结207习题7208第8章分支限界法2108.1分支限界法概述2108.2搜索迷宫最短通道2118.2.1矩阵迷宫2128.2.2三角迷宫2178.3增强型装载问题2208.4增强型01背包问题2238.5新奇的八数码游戏2268.5.1移动常规设计2278.5.2数组优化设计2318.6分支限界法应用小结234习题8235第9章模拟2369.1模拟概述2369.1.1模拟分类2369.1.2竖式运算模拟2399.2精彩乘积式2419.2.1积由指定一个整数重复构成2419.2.2积由指定两个整数构成2459.2.3二部数积(ACM背景)2499.3尾数前移问题2529.3.1限1位尾数前移2529.3.2多位尾数前移2549.4阶乘幂与排列组合数的计算2559.5高精度计算圆周率2579.6模拟发桥牌2619.7泊松分酒问题2639.8模拟应用小结266习题9267第10章算法的综合应用26810.1高斯八皇后问题26810.1.1高斯八皇后问题概述26810.1.2n皇后问题27010.1.3皇后全控棋盘问题27410.2翻转硬币游戏27710.2.1翻转m9矩阵27810.2.2翻转mn矩阵28010.2.3大规模矩阵求解28310.3马步遍历与哈密顿圈28610.3.1马步遍历28610.3.2马步型哈密顿圈29310.3.3组合型哈密顿圈29710.4综合应用小结304习题10304附录A部分习题求解提示306附录B在VC 6.0环境下运行C程序方法简介323附录CC语言常用库函数327参考文献331