图书前言

前言

随着国内软件行业的迅猛发展,社会对软件人才的需求量越来越大。为此,教育部于2001年12月发布《关于批准有关高等学校试办示范性软件学院的通知》,以35所重点高校为依托,开办示范性软件学院,采取开放式的培养模式,摸索培养高素质的软件工程人才的方式。

软件工程专业所使用的教材大多来自于计算机科学与技术。“离散数学”是计算机科学与技术和软件工程专业的培养体系中的核心基础课程。大多数离散数学的教材都是针对计算机科学与技术专业,多着重于数学理论的建立与推导,涉及的实际工程应用较少。这使得学生在学习的过程中,很难对重要的知识点消化吸收,降低了学习效率。国外的一些经典教材逻辑性强但实例较少,并不太适合自学,而有些教材虽然实例较多,但逻辑性中国学生难以接受。基于这种现状,在我们软件工程专业教授离散数学多年经验的基础上,经过广泛的调研以及与相关任课老师的交流与讨论,认为有必要编写一本实例较多,逻辑合理,浅显易懂,便于软件工程专业学生学习的离散数学教材。

   离散数学在软件工程专业的授课内容一般分为4大部分: 数理逻辑、集合论、代数系统、图论,这4个部分紧密连接。数理逻辑描述了一个符号化体系,这个体系可以描述集合论中的所有概念。集合论中又有三个小模块: 集合、关系、函数。关系是集合中迪卡儿乘积的子集,函数是关系的子集,代数系统是定义函数的运算,图论是一类特殊的代数系统。本教材针对软件工程专业,强调系统逻辑性,前后内容的衔接,在内容安排上会点出这种联系并将章节高度地模块化,另外,整本书使用统一的符号化体系描述和解题。因此本教材具有以下一些特点: 

首先,本教材着重体现理论与应用的结合。离散数学是软件工程专业的核心课程之一,与高等数学、线性代数等其他公共数学课程不同,但是,对于学生而言,往往误把它作为同高等数学一样的公共数学课,仅仅认识到离散数学的理论公式部分,看不到其在实际中的应用价值以及同软件工程专业之间的关系和在软件工程专业中处的位置。本书的一个着眼点就是在章节结构清晰的基础上,每一个部分都与具体的应用相结合,比如说布尔逻辑与信息检索、图的遍历与网络爬虫、图的最短路径与地图导航等。每一个定义、定理都由软件工程的实例加以解释和说明,增强可读性,这对软件工程专业的学生来说,看到这些应用与实例能够激发学生的学习热情,并培养建立离散模型解题的认识和能力,不断增强对软件工程的认识和理解。为此,在本教材中,我们为这些定义和定理准备了大量的范例,将抽象的内容具体化,来降低理解的难度。

其次,实例同软件工程的相关性强。对知识点的解释方式同被教授对象的知识体系的吻合度越高,其被理解和吸收的效率就越高。为了使教材中的知识点可以更好地被软件工程专业的学生所掌握,我们在教材中应用了许多同计算机科学相关的实例。

   最后,离散数学是很多软件工程专业课程的先修课,比如说操作系统、数据结构、编译原理等。本书将相关理论与后续专业课联系,真正实现先修课的价值和无缝衔接,帮助学生构建自己的知识架构。将软件工程的基本原理贯穿到离散数学的知识点,贯穿到后续课程的体系中。

在本书的编写过程中,得到了许多教师的帮助,特别是曹晓东教授对书稿进行了认真的审阅,并提出了宝贵的修改意见,对此我们表示衷心的感谢。本教材的第3~5章由周勇老师完成,其他部分由陈志奎老师完成,高静老师参与了例习题的补充和部分内容的修改与完善。作者还要感谢清华大学出版社的编辑,是在他们的支持下,才能使本书很快出版发行。另外,本书在编写过程中参考和引用了有关方面的书籍,以及一些网络材料,作者在此对参考文献中所有的作者表示衷心的感谢。 

由于作者的学识水平有限,书中如出现不准确、不适宜或者疏漏的内容,希望读者给予批评指正,在此表示感谢。

编者2016年春于大连理工大学