进入21世纪,各国高科技发展突飞猛进,对教育资源、人才资源的争夺也日益激烈,计算机软件开发人才更是处在核心竞争地位。培养应用型软件开发人才成为提高**科技实力的重要步骤。**973信息技术与高性能软件基础规划项目**科学家顾钧教授和中国工程院院士李国杰教授指出:“我国的软件开发要算法先行,这样才能推动软件技术的研究与开发,提高我国企业软件产品的技术竞争力和市场竞争力。”
算法设计与分析是一门理论性与实践性相结合的课程,是计算机科学与计算机应用专业的核��课程。学习算法设计可以在分析解决问题的过程中,培养学生抽象思维和缜密概括的能力,提高学生的软件开发设计能力。
本书共包含4篇:
(1) 第1篇“引入篇”共两章,从认识算法开始,介绍问题求解的步骤及算法在其中的重要地位,讲解了算法效率分析的基本方法,对当前常用的算法软件进行了简要概述(可作为选修)。
(2) 第2篇“基础篇”,对算法的重复操作机制——循环和递归的设计要点、算法中数据结构的选择和提高算法效率的基本技巧做了讲解,这些都是算法设计的重要基础。
(3) 第3篇“核心篇”共两章,主要介绍了几种常用的算法策略,如递推法、枚举法、分治法、贪婪算法、动态规划及与图搜索有关的算法策略,并对算法策略进行了总结比较。
(4) 第4篇“应用篇”,以问题为节,每节中针对同一问题采用不同的数学模型、不同数据结构或不同的算法策略进行算法设计,并进行效率分析。这部分内容是对算法设计学习的实践。
本教材建设的理念是“实用、适用”。书中的例题选择力求简单但具有代表性,例题讲解注重解题的思维过程,这样做有利于培养学生“设计”算法的能力,而不是“记忆” 算法的能力,并力争浅显易懂地讲解较深奥的算法设计策略和算法分析方法。
本书的主要特点有:
1) 重系统性
教材的第3篇“核心篇”摒弃同类教材中离散地罗列例题的方法,通过对算法策略特点的概括和归纳,以同一策略下的应用差别来划分章节,使得教材结构更合理、讲解更系统、更加符合认知规律。同时,在各章末尾对算法进行比较、总结,使学生能方便、全面地掌握算法策略的本质及算法应用体系。
2) 重启发性
本书中例题都是经过问题分析、数学建模、数据结构设计后,才给出算法设计和算法分析。这样讲解解题的思维过程,富有启发性,不仅培养了学生算法设计的思维方式,而且还能改变学生被动接受知识的习惯。书中多处提出供读者深入思考的问题,旨在培养学生主动学习的意识,进而提高创新能力。
3) 重适用性
第2篇“基础篇”是从程序设计到算法设计承上启下的内容,对问题求解的基本方法、算法基本工具的使用及提高算法效率的基本技巧做了必要的总结、归纳。相信这些内容会给普通院校的广大学生有较大的裨益,促进其打好学习算法设计的基础。弥补了以往教材缺乏课程间衔接内容的缺陷,增强了学生学习该课程的自信心,提高了教学效率。
4) 重开放性
教材在第1篇中对现代算法进行了概览,旨在扩大学生的知识面,提高其对算法设计的学习兴趣。教材还独特地介绍了从算法到程序转换的要点,引导学生不能仅停留在形式化的算法描述阶段,而是要大胆上机实现,提高学生学习本学科的兴趣。
5) 重实践性
第4篇“应用篇”是本教材的一大亮点。该篇以问题为节,每节中针对同一问题采用不同的数学模型、不同的数据结构或不同的算法策略进行算法设计,扩展学生解决问题的思路,学会灵活运用算法知识,而不是生搬硬套教材中的算法。同时,也可以通过对多种算法设计的分析比较认识算法的优劣,从而设计出质量优良的算法。
在学习算法设计的过程中,可能有读者感到所学的内容和大多例题都离现实问题较远,似乎用途不大。这是因为现实中的实际问题往往较复杂,需要具备丰富的领域知识、算法设计方法和技巧规范及软件工程的开发规范等综合技能。所以,只能通过一些简单、抽象的例子,对基础的算法策略进行讲解。待打好算法设计基础且有足够的问题领域知识储备后,才能去解决实际应用问题。附录“算法设计与分析课程设计大纲”中给出一些与现实结合相对较紧的练习,区别于章节习题,希望读者广开思路。
随着信息化时代的到来,计算机开发平台日新月异,软件应用拓展到了各个领域,各类算法和技巧层出不穷,本书只能是管中窥豹。若能达到本书的初衷——使读者能掌握到算法设计的基本方法和技巧,打好软件开发的基础,就深感满意了。
山西大学及作者所在的计算机与信息技术学院在教材的建设中给予了充分支持,为本书的写作和教学实践提供了良好的环境。教材出版单位清华大学出版社的编辑们更是为此书倾注了大量心血。在此,向各位关心和支持本书出版的人士表示衷心的感谢!
由于水平有限,虽然力争**,仍难免存在缺点和错误,书中不当之处敬请专家和读者指正。