《组合数学》学习笔记

1.2 一一对应

定理 1-1 (Cayley 定理)

完全图 Knnn2 种生成树。

书中给出的证明方式(构造 b1(n2))实际上是 Prufer 序列

1.4~1.6 排列组合的变种

圆周排列

n 个中选 k 个在圆周上进行排列,方案数以 Q(n,k) 表示。

根据定义可得 Q(n,k)=A(n,k)k

可重组合

n 个元素中取 r 个,可以重复取,方案数为 (n+r1r)

证明

等价于在 {1,2,,n} 中取 r 个可以重复的元素 (a1,a2,,ar),其中 a1a2ar

aiai+i1,那么它就转换成了从 {1,2,,n+r1} 中选择 (a1,a2,,ar)a1<a2<<anr 元组个数,即为 (n+r1r)

反之亦然。

不相邻的组合

A={1,2,,n}中取 r 个不相邻元素的方案数为 (nr+1r)

证明

等价于在 A 中取 r 元组 (a1,a2,,ar)a1<a21,a2<a31,,ar1<ar1 的个数。

aiaii+1 即可。

反之亦然。

线性方程组的解数

线性方程 x1++xn=b 的非负整数解的个数为 (n+b1b)

可重组合的证明

可以看作 n 个有区别的盒子内放 b 个无区别的球,允许一个盒子内放多个球,即为 (n+b1b)

隔板法的证明

也可以看作 (b+1) 个位置里放入 (n1) 个隔板,且允许一个位置放多个隔板。于是它的方案数也是 (n+b1b)

1.7 组合意义

例 1-33

求证:(n+r+1r)=(n+rr)+(n+r1r1)++(n+11)+(n0)

代数推导

LHS=(n+rr)+(n+rr1)=(n+rr)+(n+r1r1)+(n+r1r2)==RHS

组合意义

我们考虑一个原点在 (0,0) 的网格。左式即为 (0,0)(n+1,r) 的路径条数。那么,从第 n 行到第 (n+1) 行,显然有 r 种情况:经过 (n,r),(n,r1),,(n,0),且从这些点到 (n+1,r) 的路径是唯一的。于是对于每个中间点计算从 (0,0) 到它的路径条数即可。

例 1-35

求证:(n0)+(n1)+(n2)++(nn)=2n

代数推导

{x=1y=1 代入二项式定理 (x+y)n 即可。

组合意义

考虑一个网格,其中有一条 (0,n)(n,0) 的线段。可以发现,这条线段上各点到 (0,0) 的曼哈顿距离相同,都为 n。所以相当于一共要走 n 步,每步可以向上或向右走,方案数为 2n

另一种计算方法是,分别统计线段上 n 个点的方案数,即 (n0)+(n1)+(n2)++(nn)

两者相等,证毕。

例 1-37

求证:(m+nr)=(m0)(nr)+(m1)(nr1)++(mr)(n0),rmin(n,m)

组合意义一

考虑两个集合 A,B|A|=m,|B|=n,我们要从 A,B 中共取出 r 个元素,即 (m+nr)

那么一共有 r 种取法:A 中取 0r 个,B 中取 r0 个。对于每种情况,表示一下即可。

组合意义二

考虑一个网格,(m+nr) 即表示 (0,0)(m+nr,r) 的路径条数。

考虑一条 (mr,r)(m,0) 的线段。显然每条 (0,0)(m+nr,r) 的路径都需要经过这条线段上的某个点,设这个点为 (mx,x),那么 (0,0)(mx,x) 的条数为 (mx)(mx,x)(m+nr,r) 的条数为 ((m+nr)(mx)+(rx)rx)=(nrx)。根据乘法原理,得证。

1.8 应用举例

例 1-44

在一个网格中,问 (0,0)(m,n) 且经过的所有点 (a,b) 都要满足 a<b 的路径数。保证 m<n

首先,第一步一定是 (0,0)(0,1)。考虑 (0,1)(m,n) 的路径中,有多少条路径是不合法的。

可以发现,一条不合法的路径一定触碰了直线 y=x。将这条不合法的路径做其关于 y=x 的对称路径,那么这个新路径就是一条 (1,0)(m,n) 的路径。反之亦然,所以 (0,1)(m,n) 的不合法路径与 (1,0)(m,n) 的路径一一对应。

所以方案数为 (m+n1n1)(m+n1n)

2.2 母函数

定义 2-1

对于序列 C0,C1, 构造一函数 G(x)=C0+C1x+C2x2+ 称为序列 C0,C1, 的母函数。

母函数是形式幂级数,计算时不考虑其是否收敛。

3.1 De Morgan 定理

集合 A,B 为集合 U 的子集,那么有 AB=ABAB=AB

多元形式类似。

3.2 容斥原理

式子略,可以用数学归纳法来证。

3.3 容斥原理

例 3-10

推导“错排问题”的通项公式。

Ai 为第 i 位仍在原位的全排列形成的集合。

容易发现 |A1|=|A2|==|An|=(n1)!。同时可得 |A1A2|=|A1A3|==|An1An|=(n2)!

|A1A2An|=n!n(n1)!+(n2)(n2)!+(1)n0!=n!n!+n!2!n!3!+±0!=n!(12!13!+±1n!)

错排问题还有生成函数解法。

作者:alan-zhao-2007

出处:https://www.cnblogs.com/alan-zhao-2007/p/comb-math.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Alan_Zhao_2007  阅读(234)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题