读者看到这本书的第一个反应可能就会问: 什么是离散数学?离散数学有什么用途?
离散数学属于数学的范畴,是数学的一个分支。离散数学能够独立成为一门学科,是源于计算机的发展。可以说,计算机的发展促使离散数学的兴盛。
一般来说,离散数学主要包括如下几个方面的内容:
(1) 数理逻辑。即用数学的方法研究逻辑。数理逻辑是2000多年以前到现在一直在延续和发展的普通形式逻辑的数学化、精密化。
(2) 集合论。研究集合的运算与性质,定义在集合上的关系等。
(3) 抽象代数。即算术的抽象化和概括化,简单地说,就是研究符号的运算。
(4) 图论。研究图,并用它解决实际问题。
除了这四部分的内容以外,有些学者将组合数学、数论、离散概率论也归为离散数学的范畴。
数理逻辑、集合论、抽象代数、图论、组合数学、数论、离散概率都是数学的分支学科,都有悠久的发展历史。那么,它们为什么会被归纳在一起形成一个新的学科呢?这是为了计算机科学发展的需要。计算机的出现与发展极大地改变了世界,并且深刻影响了所有科学的发展,尤其是数学的发展。实际上,计算机科学和数学是密不可分的。从某种意义上说,计算机科学就是数学。计算机科学的进步,需要坚实的数学理论支撑,同时反过来促使数学的创新。离散数学便应运而生。
如果将离散数学的内容与经典的微积分进行比较,它们有一个显著的差别——研究对象不同。微积分研究的变量是连续变量,而离散数学研究的则是离散变量。当然,这种区分并非很严格。但这种区别有助于我们理解离散数学与计算机科学的特殊关系。计算机所处理的变量都是离散变量,而且现实世界中的量从本质上来说都是离散的。很多学者则干脆将离散数学称为“计算机数学”。
离散数学是计算机科学的核心基础课程。如果说数学分析(高等数学)和线性代数的开设是为了培养计算机专业学生的数学素养,那么,离散数学则是为了训练计算机专业学生的思维和推理能力而开设的重要课程,也是直接为从事计算机科学的学习和研究者而开设的。离散数学的理论、方法直接为诸如数据结构、操作系统、编译原理、人工智能、程序设计等计算机专业课程服务。这些课程有的是与离散数学并行开设,多数则是离散数学的后继课程。毫不夸张地说,学好离散数学是学好计算机科学其他专业课程的核心环节。而且,离散数学也是信息科学各专业的重要基础课程。
学习离散数学要达到什么目的?
首先,培养严谨的逻辑推理能力。逻辑推理能力是计算机专业学生必备的基本能力。试想,一个连逻辑推理都不清楚的人,编写出来的程序怎么不会漏洞百出,更谈不上其实用性?逻辑推理能力的训练贯穿于离散数学的学习。数理逻辑则是有的放矢地为培养计算机专业学生的逻辑推理能力而专门设立的。
其次,培养抽象思维能力。没有很强的抽象思维能力,就无法攀登科学的高峰。一个抽象思维能力欠缺的人,不可能设计出高水平的软件。
再者,培养解决实际问题的能力。解决实际问题是逻辑推理能力和抽象思维能力的综合应用。计算机科学最重要的应用是服务于生活。离散数学中有一些运用所学理论、方法解决实际问题的例子,而更重要的是这些理论和方法在更广泛领域的运用。
离散数学的书籍很多,本书在以下几个方面作了一些探索。
(1) 力求深入浅出。本书努力用活泼生动的语言将读者逐步带入离散数学的殿堂,让其尽快入门,激发学习兴趣。即使是自学者,也可以从中受益匪浅。
(2) 注重于问题的分析、结论的理解。作者将多年的教学经验和研究融合在问题的分析之中,让读者能够很快掌握分析问题的技巧。尤其是对一些概念、公式的诠释,能够让读者很快抓住问题的实质,理解其精髓。
(3) 努力将启发式教学、自主性学习融入到教材中,避免纯粹抽象的理论证明。作者努力吸取国外和国内离散数学教材的优点,兼取二者之长而避其短。
(4) 兼顾学生、自学者和教师的不同需求。作者努力让学生从中获得足够的知识与信息,使其能力得到提高; 让教师取材方便,课时安排省心; 指引自学者逐步上手,不会望而生畏。
本书的第1章、第5章~第15章以及符号表、索引、附录由李俊锋编写,第2章~第4章由冯刚编写,全书由李俊锋统稿。
本书可作为普通高等院校计算机专业的本科生的教材、从事计算机科学教学研究的教师和科技工作者的参考书,也可作为信息科学相关专业的离散数学教材和考研参考书。
由于编著者水平所限,书中疏漏和不当之处在所难免,恳请读者批评指正。
编者
2006年8月