在中学大家都学过《排列组合》,计算机系的在大学里还学过《离散数学》。不同于主流数学中的研究对象(连续变量),它们主要讨论离散对象之间的布局。这些问题随处可见,最多见于形形色色的智力趣题和数学游戏。它们涉及的数学知识比较初等,但需要很强的技巧和脑力,至今未解的世界难题也是俯拾皆是。精确概括这些问题的共同点也是比较困难的,解法本身也没有形成统一的理论体系,往往以各种松散的方法和技巧为主。
宽泛地讲,能算作离散对象的学科非常多,它甚至可以包括逻辑学、代数学和几何学,这些已经形成理论体系的大分支。所以把离散数学说成一个数学分支,是没有道理也没有意义的。大学课程中的《离散数学》只是一些学科的拼凑,是针对计算机系开设的一门应用数学,为了压缩课时,选材已经一压再压。所以我们学到的那点内容并不能代表整个离散数学,个人认为除了图论之外,教材里的其它章节对计算机系的学生并无用处。
说到计算机数学,的确有一些离散问题,它们来源于计算机的需求,或者可以借助计算机解决,所研究的正是离散对象布局的存在性、计数、最优问题。这样的问题五花八门,看似简单却又充满挑战,其中就以图论为典型代表。在数学界也将这些庞杂的问题汇成一个学科,并称之为组合数学(Combinatorics,又叫组合学或组合论),随着计算机的发展,组合数学得到了广泛的重视和应用。组合论已然是计算机理论分析和算法设计的核心理论,如果要给计算机系的学生推荐一门数学课程,我觉得组合数学再合适不过了。
组合数学诞生于数学游戏或初等问题,因此长期不受尊重,被认为深度不够且缺乏系统。但在20世纪下半页,组合论不仅在计算机领域得到广泛应用,其中的很多的思想和结论也被应用到了主流数学领域。到现在为止,组合论已然成为主流数学的一个分支,它虽然以解决问题为主要工作,但过程中产生的美妙思想和其它数学理论并无优劣之分。众多悬而未解的问题也在提醒人们,我们的认知有多么浅薄无力,这门古老的学科正以崭新的姿态重新展现在人们眼前。
但是经过这些年的发展,组合数学的内部已经分化出了很多分支,一本普通的教材是无法覆盖其主要内容的。大部分教材其实也只是一个入门介绍,它们甚至都没有触及组合数学的基本结论。可仅仅这些入门知识,对我们来说也已经是非常有趣有用的材料了,这里的常用方法和工具就能让你体会数学的美妙。所以本篇博客也只是组合数学的一个入门介绍,更深的内容(包括图论)只能留作以后攻陷了。参考资料[]是相对完整的组合论教材,由业界专家共同铸就,是深入组合论必读的经典。
这里选取的材料和一般教材无异,讨论的问题大多是一些离散对象的计数问题。我选择先学习组合数学,其实主要是为了后面的概率论铺路,因为古典概率论很大程度上首先要先解决各种计数问题。到具体的概率论课程中,我们就可以专注于概率论本身,而不是解决各种初等的概率问题。但计数只是组合数学的局部,还有相当大的部分包括组合设计、组合优化、图论等,和大部分教材一样,我们选择弱化这些内容,而留待后述。
本系列目录
02 - Möbius反演公式
03 - 母函数和递推关系
04 - 基本计数问题
05 - 经典计数方法
06 - 组合设计
博客总目录在这里
【前序学科】 集合论、抽象代数、线性代数、微积分
【参考资料】
[1] 《组合数学讲义》,李乔,2008
一本非常优秀的国产教材,也是本博客的主要参考资料。其中不仅包含了初等组合论的知识,还有相当大篇幅的扩展和补充内容。讲解中还阐述了概念的产生背景,以及作者对组合学的理解。附录中推荐了经典的书籍和文章,读来颇有启示。
[2] 《组合数学》(Introductory Combinatorics,5th),R.A. Brualdi,2012
这应该是组合数学使用最广泛的教材了,涵盖了组合学的所有基础知识。以问题为中心,将知识串联起来。讲解细致到位,非常适合自学。大量的素材和例题习题,都十分值得反复思考。
[3] 《组合数学》,曹汝成,2000
[4] 《组合数学(3rd)》,卢开澄,2002
这两本也是国内非常优秀的教材,在选材、编排乃至符号使用上都已经非常成熟,从这两本开始自学也是不错的选择。
[5] 《组合论(上、下)》,柯召,1981
一本比较老的教材,但内容已经很丰富全面。作者对任何问题都试图表达完全且严谨,是一本比较适合自学的教材。
[6] 《组合数学》,H.J. Reise,1983
一个组合数学的简约读本,短短百十页却涵盖了所有的基础知识。行文简约易懂,条理清晰,适合自学。每章都还有疑难问题的牵引,以及列举了大量扩展读物,可作为组合论的导引。
[7] 《组合数学理论和题解》,王元元,1989
一本非常不错的习题讲解,里面只涉及组合数学最基础的知识,无需太深奥的理论。习题一方面能帮助理解组合论的思想和结论,另一方面其实也是数学解题的思维锻炼和总结。