跳转到内容

组合数学

维基教科书,自由的教学读本

组合数学

[编辑]

组合数学(Combinatorics)研究有限(或可数)对象的计数、构造与结构。它常见于算法概率论图论计算机科学的证明与分析中:很多看似“算数量”的题,其实是在搭建集合之间的一一对应(双射)或把集合拆成互不重叠的几块。[1]

本书以计数原理为主线:从加法/乘法原理出发,进入排列组合二项式定理容斥原理鸽巢原理,并进一步接触递推与(入门级)生成函数方法。生成函数部分可作为后续更深入学习的入口(例如整数划分、递推求解等)。[2]


0. 预备:集合与计数语言

[编辑]
  • 为集合 的元素个数(基数)。
  • 若两个集合间存在双射,则它们元素个数相同。
  • 常见策略:把难数的集合 与好数的集合 建立双射;或把 分成互不相交的若干块,再分别计数。[3]

1. 基本计数原理

[编辑]

1.1 分类加法原理

[编辑]

两两互不相交,则

直觉:把选择分成互不重叠的几类,总数等于各类之和。[3]

例 1

[编辑]

一个班要选“数学课代表或英语课代表”各 1 名。若数学候选 5 人、英语候选 4 人,且两职位不能同一人(互斥),则方法数为

1.2 分步乘法原理

[编辑]

若一个过程分为 步,每一步的选择数分别为 (且每一步对前面选择的依赖已被正确计入),则总方法数为

例 2

[编辑]

用 0–9 组成 4 位数(首位不能为 0)。首位 9 种,其余 3 位各 10 种,总数为

1.3 常见陷阱:互斥、分步与重复计数

[编辑]
  • 互斥:适合加法原理。
  • 分步:适合乘法原理。
  • 若既不互斥又不是清晰分步,往往需要重构问题(例如用容斥原理纠正重复计数)。[4]

2. 排列与组合

[编辑]

2.1 排列

[编辑]

个不同元素中取出 个并排成序列,称为 -排列,常记作

例 3

[编辑]

6 位不同同学排成一列: 种。

2.2 组合

[编辑]

个不同元素中取出 个不计顺序,称为 -组合,记作

例 4

[编辑]

从 10 人中选 3 人当小组:

2.3 先选再排

[编辑]

恒等式:。 解释:先从 个元素中选出 个(不计顺序),再把它们排成序列(计顺序)。


3. 二项式系数与二项式定理

[编辑]

二项式定理给出 的展开:

组合解释:展开时从 个括号中选出 个取 ,其余取 ;选择方式数就是 。这种“用计数解释恒等式”的思路在组合数学里非常常见。[1]

推论(帕斯卡恒等式):


4. 容斥原理

[编辑]

当集合有重叠时,“直接相加会重复计数”。容斥原理提供系统纠正方式。[4]

4.1 两个集合

[编辑]

4.2 三个集合

[编辑]

例 5(整除计数)

[编辑]

求 1–100 中能被 2 或 5 整除的数的个数。 设 为被 2 整除, 为被 5 整除, 为被 10 整除,。因此


5. 鸽巢原理

[编辑]

5.1 基本形式

[编辑]

若把 个物品放入 个盒子,则至少有一个盒子里不少于 2 个物品。[5]

5.2 强化形式

[编辑]

若把 个物品放入 个盒子,则至少有一个盒子里不少于 个物品。

例 6

[编辑]

任意 13 个人里,必有至少 2 人同月生日(把月份当 12 个盒子)。

例 7

[编辑]

任取 6 个整数,必存在两个数差为 5 的倍数。按除以 5 的余数分 5 类即可。


6. 递推与计数(入门)

[编辑]

很多计数问题的关键是:把大问题拆成规模更小的同类问题。

6.1 铺砖问题(斐波那契型递推)

[编辑]

问题:用 1×2 的多米诺骨牌铺满 2×n 的长方形,有多少种铺法?设 为铺法数。

  • 若第一列竖放一块,则剩下 2×(n-1):贡献
  • 若第一列用两块横放跨两列,则剩下 2×(n-2):贡献

因此 , 且 [1]


7. 生成函数(超入门)

[编辑]

生成函数思想:把数列 打包为形式幂级数 。 一个关键性质是:乘法对应系数卷积。若 ,则 [2]

作为补充的权威数学参考库,NIST 的 DLMF 也提供了多处与“生成函数”相关的条目(尤其在特殊函数章节中)。[6]

例 8(零钱问题)

[编辑]

用 1 元、2 元硬币凑出 元(不计顺序)。考察 的系数。选择 (用 枚 2 元)再配 (用 1 元),可得方案数


8. 练习(含少量提示)

[编辑]
  1. (乘法原理)从 A 城到 B 城有 3 条路,从 B 城到 C 城有 4 条路。问从 A 到 C 经 B 有多少种走法?
  2. (排列)8 本不同的书排成一排,其中两本特定的书必须相邻,有多少种排法?
  3. (组合)从 12 人中选 4 人组成委员会,其中必须包含某位同学,方法数是多少?
  4. (二项式)求 的系数,并给出组合解释。
  5. (容斥)1–200 中,能被 3 或 8 整除的整数有多少个?
  6. (鸽巢)任取 10 个整数,证明其中必有两个数之差是 9 的倍数。
  7. (递推)设 为长度为 的 0-1 串且不出现相邻两个 1 的个数,写出递推并给初值。

提示

[编辑]
  • 1:
  • 2:把相邻两本当作一个“块”,与其余 6 本共 7 个对象排列,再乘以块内 2 种次序。
  • 3:固定那位同学,再从剩余 11 人中选 3 人:
  • 4:系数为
  • 5:
  • 6:按模 9 的余数分 9 类。
  • 7:按末位分类得到斐波那契型递推。

进一步阅读

[编辑]
  • 课程与讲义:MIT OpenCourseWare 6.042J 相关材料。[1]
  • 生成函数:Wilf《generatingfunctionology》。[2]
  • 组合数学与算法分析基础:Knuth 等人的《Concrete Mathematics》(作者页面提供书目信息)。[7]
  1. 1.0 1.1 1.2 1.3 Mathematics for Computer Science (6.042J).MIT OpenCourseWare.於2026年1月2日查閱.
  2. 2.0 2.1 2.2 Herbert S. Wilf.generatingfunctionology (2nd ed.) PDF.Department of Mathematics, University of Pennsylvania.於2026年1月2日查閱.
  3. 3.0 3.1 高中数学/组合计数/分类加法与分步乘法计数原理.Wikibooks.於2026年1月2日查閱.
  4. 4.0 4.1 容斥原理.Wikipedia.於2026年1月2日查閱.
  5. 鸽巢原理.Wikipedia.於2026年1月2日查閱.
  6. NIST Digital Library of Mathematical Functions (DLMF).National Institute of Standards and Technology.於2026年1月2日查閱.
  7. Donald E. Knuth.Graham, Knuth, and Patashnik: Concrete Mathematics.Stanford University (faculty page).於2026年1月2日查閱.