算法设计与分析
书号:9787113333546 套系名称:河南省“十四五”普通高等教育规划教材
作者:谭永杰 周文刚 万金梁 出版日期:2026-05-01
定价:59.50 页码 / 开本:无 /16
策划编辑:韩从付 责任编辑:贾星 徐盼欣
适用专业:计算机类 适用层次:高等教育
最新印刷时间:2026-05-01
-
本书是河南省“十四五”普通高等教育规划教材之一,根据高等学校计算机科学与技术专业核心课程体系中“算法设计与分析”课程的教学大纲编写,贴合本科阶段教学节奏与人才培养目标,兼顾理论教学与实践训练的双重需求,助力学生夯实算法基础、提升工程实践能力。 全书共分八章,包括编程思维与程序设计、算法设计思想与算法分析方法、三种数据存储结构及其快速查找算法、迭代法求解数值计算问题、分治法、贪心法、回溯法、分支限界法和动态规划法等内容。本书摒弃晦涩的理论堆砌,采用浅显的语言表述,搭配海量经典算法实例,核心实例均采用C语言实现,配套完整代码逻辑,帮助读者吃透算法原理,掌握代码实现能力,全方位培养算法设计思维与问题分析能力。 本书内容难易适中、体系完整、实用性极强,适合作为普通高等学校计算机类及电子信息类专业的本科教材,也可作为计算机算法爱好者的自学教材,还可作为从事算法设计、软件开发、程序研发等的工程技术人员的参考书。
-
当下大数据、人工智能、云计算等信息技术飞速发展,各行业领域海量复杂问题的高效处理、系统性能优化,均离不开高效算法的支撑,强化算法核心能力培养,已然成为计算机类专业人才培养的重中之重。目前各普通高等院校计算机类、电子信息类等专业,均将“算法设计与分析”列为专业核心课程,构建起完善的课程教学体系,聚焦学生理论功底与实践能力双重提升,是衔接程序设计、数据结构、人工智能、软件工程等专业课程的关键枢纽,对于培养学生计算思维、逻辑推演能力、复杂工程问题解决能力有着不可替代的作用。 本书是河南省“十四五”普通高等教育规划教材之一,严格依据高等学校计算机科学与技术专业核心课程体系中“算法设计与分析”课程的教学大纲编写,同时结合编者多年一线课堂教学实践经验、课程教改成果,以及指导学生参与各类算法类竞赛的实战经验打磨而成,贴合普通高等院校本科教学节奏、人才培养目标与课程授课需求,力求打造理论扎实、实用性强、易学易懂的专业课程教材。 本书论述基于“查找”和基于“猜+验证”两类算法,重点在于阐述算法概念及其实质,且重温计算机组成原理、工作流程、三级存储系统、数据的存储结构等内容。学习本书并不需要具备前导知识,但若已掌握C语言的基本语法和“数据结构”课程的知识,将对学习本书有所帮助。 本书遵循问题描述、问题分析、算法设计、算法实现、算法分析的完整技术路线,逐一拆解各类算法难点,对典型实例开展深度剖析,同时针对部分问题补充算法优化思路,强化理论落地性。本书内容分两篇:第一篇包括第1~4章,聚焦基础知识,介绍编程思维与程序设计、算法设计思想与算法分析方法、三种数据存储结构及其快速查找算法、迭代法求解数值计算问题;第二篇包括第5~9章,聚焦查找法,主要介绍分治法、贪心法、回溯法、分支限界法、动态规划法等五种基于穷举的查找算法设计方法。 本书有如下特色: ①注重介绍设计算法的实质,以帮助读者建立编程思维,即如何站在计算机的角度思考问题的解决方法。使用浅显的语言,详细描述有关程序设计的基本概念,如变量的实质、程序的实质等。把程序设计语言简化概括为“一变量两结构”,即无论多么长的程序,都是“变量+选择结构+循环结构”,帮助读者理清学习编程的思路,跳出对语法规定和某个知识点的过分探究,快速掌握编程的实质。 ②较为全面地介绍了高等数学的相关知识在诸多计算机应用技术中的工具性作用,通过各种实例阐释了高等数学与计算机科学的紧密联系。 ③基于查找的算法设计。基本所有的算法设计教材都会以此为主要内容,本书虽不例外,但强调五种方法实质是一种方法的变种。把问题求解简单化为“查找”,从而把求解算法分为“蛮力穷举及改进的、有舍弃的穷举”“猜+验证”两种,这有利于读者对求解问题方法产生强烈的概念,减轻学习难度。 ④站在编程思想的高度,讲授算法在系统分析、程序设计中的导引作用,助力读者快速形成在算法设计时“站位高远、思考深入、考虑周密、善于合作”的能力。 ⑤选例简洁,既能说明相关知识,又结构规整、步骤明晰,程序书写严格遵守“缩进”约定,能帮助读者建立明确的程序框架概念,养成规范的代码书写习惯。 本书由谭永杰、周文刚、万金梁任主编,张莉、陈得友、田冲、徐勇任副主编,康玉洁、张卫倩、石放参与编写。全书由谭永杰统稿。具体编写分工如下:谭永杰编写第1~3章,田冲编写第4、5章,张莉、张卫倩编写第6章,万金梁、康玉洁编写第7章,徐勇编写第8章,陈得友、石放编写第9章,周文刚对全书做了校正、修改。本书由周口师范学院资助出版。 编写本书时,编者参考引用了大量的文献资料,在此向其作者表示诚挚的感谢! 由于编写时间仓促、编者水平有限,书中不足之处在所难免,欢迎广大读者给予宝贵意见,以便不断改进和完善本书内容。 编者 2026年3月
-
目录 第一篇 算法概念与算法分析方法 第1章 编程思维与程序设计3 1.1建立编程思维应知悉的常识3 1.1.1电子计算机是基于存储的计算工具4 1.1.2数据在计算机内部的表示及运算规则8 1.1.3设计数据的存储结构11 1.2计算机解决问题的基本方法15 1.2.1穷举——唯一能确保查找到结果的查找方法16 1.2.2“猜测+验证”——所谓的智能算法17 1.3基本的编程方法19 1.3.1循环处理数据的实现方法19 1.3.2面向对象编程思想25 习题28 第2章 算法设计思想与算法分析方法29 2.1算法及其描述方法29 2.1.1算法的概念30 2.1.2算法的描述方式32 2.1.3算法的分类33 2.1.4算法的设计过程35 2.2对算法进行性能分析的意义和方法37 2.2.1对算法进行性能分析的意义37 2.2.2衡量算法性能的指标38 2.2.3算法的时间复杂度44 2.2.4算法的空间复杂度50 2.3复杂度的简化表示——渐近表示法53 2.3.1上界记号大O54 2.3.2下界记号大Ω55 2.3.3等价记号Θ56 2.3.4小o记号56 习题56 第3章三种数据存储结构及其快速查找算法57 3.1(线性)表——数组与链表58 3.1.1顺序存储与链式存储58 3.1.2快速查找以“表”结构存储的数据67 3.2(层级)树72 3.2.1树形存储结构概述72 3.2.2二叉树的遍历75 3.2.3平衡二叉查找树的查找算法78 3.2.4伸展树79 3.2.5堆90 3.2.6并查集92 3.3(网状)图97 3.3.1图的相关概念97 3.3.2图的存储方式100 3.3.3图的遍历103 3.3.4通过遍历图求解问题的实例112 习题116 第4章 迭代法求解数值计算问题117 4.1高等数学对计算机应用技术的影响117 4.1.1微积分对计算机应用技术的影响118 4.1.2高等数学中一些基础的数值计算问题121 4.1.3非线性方程及方程组求解124 4.1.4插值法——拟合思想与预测技术125 4.1.5域变换思想——换一个视角看问题126 4.1.6卷积思想——融合或者提取技术134 4.2迭代法求解大计算量的数值计算问题138 4.2.1求非线性方程的根139 4.2.2求方程组的解144 4.2.3有关n阶矩阵的数值计算147 4.2.4求定积分155 4.2.5利用泰勒展开式求解超越函数159 4.2.6傅里叶变换164 4.3数据拟合与插值函数——用于预测174 4.3.1拟合和插值的区别175 4.3.2数据拟合176 4.3.3插值法180 习题184 第二篇 基于穷举的查找算法设计方法 第5章 分治法187 5.1分治法的设计思想187 5.1.1分治法的基本思想187 5.1.2适用分治法的问题189 5.1.3分治法的伪代码描述190 5.1.4分治法的时间复杂度191 5.2求最大最小元191 5.2.1求最大最小元概述191 5.2.2分治法求解最大最小元192 5.2.3效率分析193 5.3二分查找194 5.3.1问题描述194 5.3.2对有序数组进行二分查找的分治算法194 5.3.3有关查找的总结196 5.4排序问题197 5.4.1合并排序198 5.4.2快速排序201 5.5求第k小元问题204 5.5.1求第k小元概述204 5.5.2递归实现的求第k小元算法205 5.5.3迭代实现的求第k小元算法205 5.5.4二次取中法确定主元206 5.6分治法总结207 习题207 第6章 贪心法208 6.1贪心法的求解思想及算法框架208 6.1.1贪心法概述208 6.1.2贪心法适用求解的问题210 6.1.3贪心法的求解过程211 6.1.4有关贪心法的总结213 6.2求解一般背包问题的贪心算法214 6.2.1背包问题描述214 6.2.2贪心法求解一般背包问题214 6.3贪心法求解“有时间限制的作业排序问题”216 6.3.1有时间限制的作业排序问题描述216 6.3.2求解“有时间限制作业排序问题”的贪心算法218 6.3.3尽量靠时限后部安排作业——一种简便算法220 6.4文件合并最少耗时问题222 6.4.1问题描述222 6.4.2贪心法求解最佳合并模式223 6.5最小代价生成树225 6.5.1问题描述225 6.5.2贪心法“生成”最小代价生成树225 6.5.3选顶点法226 6.5.4选边法229 6.6图的m-着色问题231 6.6.1问题描述231 6.6.2求解图着色问题的贪心算法232 6.6.3求解图着色问题贪心算法的程序实现232 6.7单源最短路径233 6.7.1问题描述233 6.7.2贪心的Dijkstra算法234 习题237 第7章 回溯法238 7.1查找类问题的求解思想238 7.1.1查找类问题概述238 7.1.2查找类问题的求解方法239 7.2回溯法的求解思想及算法 框架240 7.2.1回溯法的相关概念241 7.2.2回溯法的适用问题及求解架构244 7.2.3回溯法的描述246 7.3求解“n皇后问题”的回溯算法248 7.3.1问题描述248 7.3.2回溯法求解过程分析248 7.3.3算法实现249 7.4求解“0/1背包问题”的回溯算法251 7.4.1问题描述251 7.4.2回溯法求解过程分析252 7.4.3算法实现253 7.5求解“图的m-着色问题”的回溯算法255 7.5.1问题描述255 7.5.2回溯法求解过程分析256 7.5.3算法实现257 7.6求解“哈密顿回路问题”的回溯算法258 7.6.1问题描述258 7.6.2回溯法求解过程分析259 7.7求解“子集和数”问题的回溯算法261 7.7.1问题描述261 7.7.2回溯法求解过程分析262 7.7.3算法实现263 习题264 第8章 分支限界法265 8.1分支限界法的设计思想及算法框架265 8.1.1分支限界法的本质与特征266 8.1.2分支限界法的算法框架269 8.2求解“0/1背包问题”的分支限界法274 8.2.1分支限界法求解过程分析274 8.2.2算法实现276 8.3拼图复原——n×m-1谜问题278 8.3.1问题描述278 8.3.2分支限界法求解分析278 8.3.3算法实现280 习题280 第9章 动态规划法282 9.1动态规划法的求解思想及算法描述283 9.1.1动态规划法求解问题的基本思想283 9.1.2适用动态规划法求解的问题应具备的特性285 9.1.3动态规划法与分治法、贪心法的区别286 9.2用动态规划法求解多段图问题287 9.2.1多段图问题概述287 9.2.2多段图问题的动态规划法求解过程287 9.2.3求解多段图问题的动态规划算法288 9.3带权有向图的每对顶点间最短路径求解问题289 9.3.1问题描述及求解思路289 9.3.2动态规划法求解过程290 9.3.3求最短路径的Floyd算法291 9.4求矩阵连乘达到最少乘次数的 矩阵相乘次序294 9.4.1矩阵连乘问题描述294 9.4.2动态规划求解过程分析297 9.4.3算法实现298 9.5动态规划法求解“最长公共子序列”问题299 9.5.1问题描述299 9.5.2动态规划求解过程分析300 9.5.3算法实现302 9.6动态规划法求解“0/1背包问题”304 9.6.1问题描述304 9.6.2动态规划法求解过程分析304 习题305
-
谭永杰,副教授,周口师范学院计算机科学与技术学院软件与理论教研室主任,专业方向为软件与理论。主要教授程序设计基础、面向对象程序设计、算法设计与分析等课程。参与编写教材《C语言程序设计基础》(副主编)、《C++面向对象程序设计》(河南省“十四五”规划教材,副主编),发表核心及以上论文10余篇。 周文刚,教授,博士,现任周口师范学院计算机科学与技术学院院长。研究方向为智能算法设计与分析,主授教授算法设计与分析、计算机组成原理、数据结构等课程。发表EI、SCI学术论文20余篇。 万金梁,副教授,河南财经政法大学计算机与信息工程学院软件工程教研室专任教师,主要研究方向为数据处理与算法设计。主要教授C++程序设计、数据结构和算法设计与分析等课程,具备丰富的教学实践经验。
-
深挖算法与编程本质,提炼核心逻辑,弱化语法钻研,帮读者建立编程思维。 结合实例讲解高数在计算机领域的应用,梳理查找算法的核心思路与分类。 立足编程思想讲授算法价值,示例规范简洁,培养读者思维与代码编写能力。
