前言 党的二十大报告指出: 教育、科技、人才是全面建设社会主义现代化国家的基础性、战略性支撑。必须坚持科技是第一生产力、人才是第一资源、创新是第一动力,深入实施科教兴国战略、人才强国战略、创新驱动发展战略,开辟发展新领域新赛道,不断塑造发展新动能新优势。高等教育与经济社会发展紧密相连,对促进就业创业、助力经济社会发展、增进人民福祉具有重要意义。 算法设计与分析在计算机领域中的重要性不言而喻,虽说有新的算法被不断提出,但掌握常用的算法设计策略与算法分析方法依然是算法学习的主要内容和基本功。本书较全面、深入地介绍了常用算法设计策略和算法分析方法,涵盖的内容作为程序高效求解问题必备的知识,能够满足高等院校计算机相关专业学习算法设计与分析的教学需求和学习需求。 全书围绕算法评价和算法设计展开,分为两篇,共10章。 第一篇主要介绍算法评价的内容和方法,包括两章。第1章系统介绍从理论层面分析算法优劣的基本方法,包括算法的正确性、算法的简单性、算法的时空复杂度分析、算法的最优性证明、计算误差分析和NP完全理论; 第2章介绍从实践层面分析算法优劣的可实施方法,包括程序的性能测试方法、程序的空间测试方法和误差测试方法。 第二篇主要介绍常用的算法设计策略,包括第3~9章,具体内容为递归、分治、动态规划、贪心法、回溯法、分支限界法和概率算法。算法设计策略从原理思想上不难理解,但如何做到活学活用是算法学习的重点和难点。因此,在算法设计策略的内容组织方面,通过引例引入算法,阐述算法思想、步骤和原理,再结合若干典型应用的问题分析、算法设计、实例演示、代码实现、算法分析、算法改进、应用扩展等内容,对算法进行全面描述,力求做到分析深入、讲解清楚、代码完整。此外,第10章针对各类算法进行了对比分析,并通过几个经典应用给出了采用不同算法设计策略的求解方法,希望借此抛砖引玉,引导读者运用所学的算法知识,从不同角度尝试多种方法分析和求解问题,从而进一步加深对不同算法设计策略的理解和运用。 实践练习是算法学习的重要一环,本书的每章设计并精选了练习题,引导读者深入思考,做针对性练习,在实践中不断提升对知识的理解,提高求解问题的能力。其中,部分练习题来自国内知名在线编程平台,如poj、洛谷等,对全面考虑问题、设计时空复杂度低的算法有更高的要求。 本书的特点是突出算法评价和算法设计两个重点,从理论和实践相结合的角度阐述,力图把原理方法讲透,把求解过程讲到位。在内容组织上,贯穿所见即所得的理念,强化典型应用算法设计过程和实际程序执行过程的描述,同时通过程序执行步骤的可视化,充分展示代码执行过程中的状态变化,有利于读者在阅读的同时建立程序执行的影像,实现“纸上谈兵”。 此外,对于算法学习者,在厘清算法基本原理的同时,也有必要了解算法的起源和应用场景。所以,本书在每章的最后增加了扩展阅读内容,梳理了部分算法的起源、发展、应用场景或算法提出者的简单生平。同时,算法在学习和生活中无处不在,蕴含在算法中的人生哲理对于学习者更是受益匪浅。因此,针对不同章节的主要内容,从算法的思想出发引出了生活中的处世之道和人生智慧。 为便于教学,本书提供丰富的配套资源,包括教学大纲、教学课件、电子教案、程序源码、习题及答案和600分钟的微课视频。 资源下载提示 课件等资源: 扫描封底的“图书资源”二维码,在公众号“书圈”下载。 素材(源码)等资源: 扫描目录上方的二维码下载。 微课视频: 扫描封底的文泉云盘防盗码,再扫描书中相应章节的视频讲解二维码,可以在线学习。 本书第1章的主要内容由周蓓和许瑾晨共同编写,第2~4章及第7~9章的主要内容由许瑾晨编写,第5、6章及第10章的主要内容由周蓓编写,书中代码由周蓓、许瑾晨、本科生赵贝宁完成且由弋宗江老师审核,扩展阅读部分由周蓓、许瑾晨、弋宗江、硕士生李飞完成材料收集和编写。周蓓、许瑾晨、弋宗江、郝江伟、朱雨、李飞、硕士生宋广辉等对全书内容进行了校对。 借此机会,感谢从事算法设计与分析教学的老师,包括舒辉教授、杜祝平副教授、岳峰博士、陶红伟博士等,以及所有为课程建设作出贡献的老师和同学们,因为有他们的付出,才给了我们深厚的课程积淀,让我们有机会完成本书的撰写和出版。 感谢郭绍忠教授、王炜副教授的支持和有益的建议! 本书初稿内容在多届本科生中讲授,他们在学习过程中提出了若干宝贵的建议,在此一并表示感谢! 感谢在互联网上共享算法相关内容的人们,以及各类代码编程网站和平台,这都为本书的组织和撰写提供了有益的思路和一定的借鉴! 感谢我们的家人们,感谢他们的大力支持! 感谢教研室的各位领导、老师和硕博士们给予的帮助! 感谢所有以各种形式支持和帮助过我们的人! 本书内容力求全面概括计算机相关专业对于算法方面所要求的相关知识,然而,由于编者水平所限,难免有所遗漏,敬请读者批评指正。 编者 2024年7月