图书前言

前言

“离散数学”包含逻辑、集合、关系、函数、图论、代数等多个知识模块,

是计算机类专业的核心基础课程。但离散数学的内容比较抽象,知识模块比

较多,而且计算机专业的“离散数学”课程通常在低年级本科生中开设,如

何让还没有学习更多计算机专业课程的学生理解“离散数学”与计算机专业

其他课程之间的联系,是“离散数学”课程教学应解决的问题。

我们在2021 年出版了教材《离散数学基础》(ISBN:978-7-302-57667-9),

通过精心选择“离散数学”课程的内容,强化课程各模块之间的联系,并且

从两方面强化“离散数学”与计算机专业其他课程,特别是“程序设计”课

程之间的联系。一方面强调在“离散数学”课程中离散化、模块化、层次化、

系统化和公理化等计算机专业思维的培养,指出这些思维方式在程序设计与

离散数学问题求解中都有大量的应用,力图在“离散数学”课程中提升学生

利用计算机程序求解问题的能力。另一方面强调编写计算机程序求解离散数

学问题的重要性,通过计算机程序展示离散数学问题的求解过程与求解结果,

期望能让学生对抽象的离散数学知识有更为直观的理解,让具备程序设计入

门知识的低年级学生能直观地感受到计算专业思维的运用。

基于上述指导思想,我们开发了一款离散数学辅助教学软件作为教材《离

散数学基础》的配套资源。这款软件可展示包括命题逻辑公式真值表构造、命

题逻辑公式范式与主范式计算、集合关系和函数的运算、关系性质判断、关系

闭包计算、等价关系等价类与商集计算、偏序集的上下确界计算、字符串和不

定方程解计数问题的计数对象枚举、排列与组合的生成、图和树的遍历、带权

图的最短路径与最小生成树计算、哈夫曼树构造、代数运算性质判断、U(m)

群与置换群的子群与陪集运算、格与布尔代数的计算等多种离散数学问题的

求解。这款软件不仅能给出问题的计算结果,而且能以合适形式展示计算的

过程,帮助学生理解抽象的离散数学知识。进一步,它还可以随机生成一些

问题的实例,例如随机生成命题逻辑公式、集合、关系、函数、图、树以及

运算表等。随机生成的问题实例可用于学生练习与考试,减轻教师的出题工

作量。

本书是在开发此款离散数学辅助教学软件的基础上编写的,描述这款软

件的需求分析、设计与实现。目的是要通过对离散数学中一些问题的面向对

象建模与分析,梳理与总结相关的离散数学知识,并且展示面向对象软件开

发思想的运用。我们开发的软件具有下面的特点:à软件有比较全面的功能,

囊括了大多数离散数学教材中给出的离散数学问题求解算法的实现;á这款软件不仅能给

出离散数学问题的求解结果,而且能尽量规范地给出问题的求解过程。?这款软件可以随

机生成一些离散数学问题的例子供学生练习和考试用。

相应地,本书比较系统地梳理了离散数学中可利用计算机进行求解的问题,并使用面

向对象方法对相关的离散数学知识进行了建模与分析,提供了理解离散数学知识的一个新

的视角,期望能帮助学生更好地学习离散数学。本书遵循面向对象软件开发方法,介绍离

散数学问题的分析、设计与实现,以学生熟悉的课程问题求解为应用领域,展示软件工程

技术和方法的运用。这也给软件工程的实验实训课提供了一种新的思路,即以学生学习的

课程知识,例如高等数学、概率统计、线性代数等,作为工程实训题目的问题领域,系统

化地进行建模与求解,这比要求学生在不熟悉的应用领域设计与开发软件可能会有更好的

训练效果。

本书第1 章介绍了开发该款软件的动机,并对如何进行面向对象建模做了初步的介绍,

奠定了后续章节的叙述框架。这一章的最后介绍了实现软件用户界面的方法与技术。本书

第2~6 章分别介绍了该软件的命题逻辑、集合关系函数、组合计数、图和树,以及代数结

构这五个模块的需求建模、设计与实现。按照面向对象建模基本流程,需求分析阶段主要

使用用例图给出了相应的模块的需求,在此基础上进行了领域建模,从建模的视角梳理和

总结了相关的离散数学知识。软件设计阶段在领域建模的基础上,围绕软件中的类进行设

计,使用类图描述主要类之间的关系,给出这些类的主要属性和主要方法,以及一些关键

方法的算法。通过该软件的设计,读者可更深入地了解一些离散数学问题如何利用计算机

程序进行求解。软件实现阶段主要使用表格形式描述关键类的主要方法,并给出一些关键

方法的实现源代码,最后给出用户界面的输入输出示例,展示软件的运行效果。通过对照

软件的实现与设计,读者可体会如何将算法转换为源代码,提升自己的编程能力。通过软

件运行效果的展示,读者可更直观地理解离散数学问题的求解过程与求解结果。

本书的编写得到了中山大学本科教学质量工程项目的资助,也得到了许多领导和老师

的支持,在此对支持我们的领导和老师表示衷心的感谢。本书所描述的软件曾作为中山大

学计算机学院多届本科毕业生的毕业论文选题,像2018 级的刘炜基、2020 级的许丰等同学

在完成他们毕业论文的过程中对这款软件的开发与完善也作出了不少贡献。中山大学计算

机学院的乔海燕老师、李文军老师对于本书的编写提出了宝贵的意见和建议,在此也对他

们表示衷心的感谢。这里还要特别感谢清华大学出版社的编辑,没有他们的耐心和支持,本

书不可能得以出版。

本书可作为学习“离散数学”、“程序设计”及“软件工程”课程的参考书。我们提供

书中所描述软件的源代码,读者可在这些源代码的基础上进行修改与扩充以求解自己的离

散数学问题。本书是该软件分析、设计与实现思想的介绍,不是该软件的开发文档,但读

者如果想在此软件的基础上进行二次开发,本书会是很好的参考书籍。

限于作者的水平,我们目前所开发的软件在设计方面肯定存在不完善的地方,软件的

实现也可能还会有一些运行时错误。由于书中类、数据和方法名字众多,而且有大量图形

和表格,其中难免会有一些笔误和文字表述不当之处,恳请读者不吝批评指正。

作者

2026 年4 月