组合数学学习笔记(持续完善中)

更好的阅读体验

update

2024-11-12 11:25 修改了一些格式错误且增加了二项式反演的例题

2024-11-12 14:33 改进了二项式反演的证明

基础知识

一、加法原理

完成某个工作有 n 类办法,第 i 类办法有 ai 种,则完成此工作的方案数有 i=1nai 种。

二、乘法原理

完成某个工作有 n 个步骤,第 i 个步骤有 bi 种,则完成此工作的方案数有 i=1nbi 种。

排列组合(基础)

一、定义

1.排列数:从 n 个物体中选出 m 个物体按一定顺序排为一列的方案数,用 Anm (Pnm) 表示,
Anm=n!(nm)!

2.组合数:从 n 个物体种选出 m 个物体(不考虑顺序)的方案数,用 (nm)(或 Cnm)表示,(nm)=Anmm!=n!m!(nm)!

3.插板法

现有 n完全相同的元素,要求将其分为 k 组。

  • 保证每组至少有一个元素,一共有多少种分法?

考虑拿 k1 块板子插入到 n 个元素两两形成的 n1 个空里面。因为元素完全相同,所以答案就是 (n1k1)

本质是求 x1+x2++xk=n 的正整数解的组数。

  • 每组允许为空,一共有多少种分法?

给总体先加上 k 个,以保证每组至少一个,接下来处理同上,最后相当于每组减一还回去即可。答案为 (n+k1k1)。因为 (nm)=(nnm),答案即为 (n+k1n)

本质是求 x1+x2++xk=n 的非负整数解的组数。

  • 对于第 i 组,至少要分到 aiain),一共有多少种分法?

本质是求 x1+x2++xk=n 的整数解的组数。

模仿第三种情况,我们设 xi=xiai 以保证每组最少分到 ai 个。现在相当于求 x1+x2++xk=n 的整数解。

过程:

x1+x2++xk=n

(x1+a1)+(x2+a2)++(xk+ak)=n

x1+x2++xk=na1a2ak

x1+x2++xk=nai

所以答案为 (nai+k1nai)


例:  1nn 个自然数中选 k 个,使得这 k 个数中任何两个数都不相邻的组合有 (nk+1k) 种。

证明:设选的 k 个数分别为 x1,x2,,xk(x1x2xk),设 xi=xi+i1,则一定有 x1<x2<<xk  (xkn),即两两都不相邻。因为 xk=xk+k1n,所以 xknk+1,我们只需在 1nk+1 中选 k 个数即可,答案为 (nk+1k) 种。

二项式定理

内容

(a+b)n=i=0n(ni)anibi

证明

采用数学归纳法。

先理解一个引理:帕斯卡法则,即:

(nk)+(nk1)=(n+1k)

  • 证明帕斯卡法则:假设有 n+1 个人,要在其中选出 k 个人,很明显方案有 (n+1k) 种;但不幸的是,一共的 n+1 个人中死了一个,现在我们总人数剩下 n 人,但还是要选 k 人,现在方案数为 (nk1) 种;我们发现少的方案数一定和那死的一个人有关,那我们所缺少的方案数就是在选种的 k 个人中有那个死人,所以我们还能自主选择 k1 人,所以缺少的方案数为 (nk1)。所以我们有:

(n+1k)(nk1)=(nk)

调换下顺序得到:

(nk)+(nk1)=(n+1k)

得证。

现在证明二项式定理。

n=1 时,原式显然成立。

假设当 n=k 时原式成立,设 n=k+1

(a+b)k+1=a(a+b)k+b(a+b)k

=ai=0k(ki)akibi+bj=0k(kj)akjbj

a,b 乘进来:

=i=0k(ki)aki+1bi+j=0k(kj)akjbj+1

把前半部分 i=1 时提出来:

=ak+1+i=1k(ki)akibi+j=0k(kj)akjbj+1

j 化为 i1:

=ak+1+i=1k(ki)akibi+i=1k+1(ki1)aki+1bi

把后半部分 i=k+1 时提出来:

=ak+1+i=1k(ki)akibi+i=1k(ki1)aki+1bi+bk+1

将中间两个求和合并:

=ak+1+bk+1+i=1k[(ki)+(ki1)]akibi

套用帕斯卡法则

=ak+1+bk+1+i=1k(k+1i)akibi

=i=0k+1(k+1i)akibi

所以当 n=k+1 时,结论仍成立。因此对任意 nN+,均可使所证等式成立,
得证。

鸽巢原理(抽屉原理)

内容

n 个物体,划分为 k 组,那么至少存在一个分组,含有大于或等于 nk 个物品。

证明

反证法。

设每个分组含有小于 nk 个物体,则其总和 S(nk1)×k=knkk<k(nk+1)k=n ,矛盾。

容斥原理

内容

U 中元素有 n 种不同的属性,而第 i 种属性称为 Pi,拥有属性 Pi 的元素构成集合 Si,那么

|i=1nSi|=m=1n(1)m1ai<ai+1|i=1mSai|

证明

数学归纳法,懒得写了以后填坑()

卡特兰数

定义

定义卡特兰数 Hn 表示坐标轴上从 (0,0) 点到 (n,n) 的路径中不越过直线 y=x 的路径数。下图为一种不合法的方案。

求法

如下图,对每个非法的方案都可以通过把在第一个越过 y=x 的点之后的路径以直线 y=x+1 做对称从而构造一条自 (0,0)(n1,n+1) 的路径。

因为一共需要走 2n 步,所以从 (0,0)(n,n) 的方案总数有 (2nn) 种,从 (0,0)(n1,n+1) 的方案数有 (2nn1) 种。

综上可得:

Hn=(2nn)(2nn1)=(2n)!(n!)2(2n)!(n+1)!(n1)!=(n+1)(2n)!n!(n+1)!n(2n)!n!(n+1)!=(2n)!n!(n+1)!=(2nn)n+1

递推公式

Hn=i=0n1HiHni1

Hn=4n2n+1Hn1

证明:(0,0)(n,n) 的路径可以分作以下几步:

  • (0,0) 走到 (i,i),方案数为 Hi

  • (i,i) 走到 (n1,n1),方案数为 Hni1

  • (n1,n1) 走到 (n,n),方案数为 1

枚举每一个 i,由此得到 Hn=i=0n1HiHni1

Hn=4n2n+1Hn1C2nnn+1=4n2n+1×C2n2n1n(2n)!(n+1)(n!)2=4n2n+1×(2n2)!n(n1)!2(2n)!n=(4n2)×(2n2)!(2n)(2n1)n=4n24n2=4n2

故得证。

组合数性质

性质1

(nm)=(nnm)

证明

正确性显然,用组合数意义理解,在 n 个中选 m 个相当于在 n 个中挑 nm 个不选。

性质2

(nm)=nm(n1m1)

证明

(nm)=n!m!(nm)!=nm×(n1)!(m1)!(nm)!=nm(n1m1)

性质3

(nm)=(n1m)+(n1m1)

证明

即帕斯卡定理的略微转换,具体见上。

性质4

i=0n(ni)=2n

证明

a=b=1 带入二项式定理即可。

2n=(1+1)n=i=0n(ni)1ni1i=i=0n(ni)

性质5

i=0n(1)i(ni)=[n=0]

[a] 表示当 a 为真时答案为 1,否则为 0(相当于一个 bool)。

证明

证法基本等同于性质 4,将 a=1,b=1 带入二项式定理即可。

我们这里认为 00=1,所以 n=0 时答案为 1

具体证明略。

性质6

(nm)i=0m(ni)(mmi)=(n+mm)

证明

考虑通过组合数意义来理解。

假设现在有 n 个男生,m 个女生,我们现在要从这 n+m 个人中选出 m 个人,方案数显然为 (n+mm)。另一种思考方式是从男生中选 i 个,女生中选 mi 个,对于每个 i 方案数为 (ni)(mmi),枚举每个 i 即为总方案数。

性质7

i=0n(ni)2=(2nn)

证明

性质 6 的特殊情况,取 m=n 即可。

性质8

i=0ni(ni)=n2n1

证明

i=1ni(ni)=ni=1nin(ni)=ni=1n(n1i1)(套用性质2)=n2n1(套用性质4)

性质9

i=1ni2(ni)=n(n+1)2n2

证明

i=1ni2(ni)=ni=1nin(ni)i=ni=1ni(n1i1)=ni=0n1(i+1)(n1i)=ni=0n1i(n1i)+ni=0n1(n1i)=ni=0n1i(n1i)+n2n1=n(n1)i=0n1in1(n1i)+n2n1=n(n1)i=1n1(n2i1)+n2n1=n(n1)2n2+n2n1=n(n+1)2n2

拓展:求证 $$\begin{aligned}
\sum_{i=1}{n}im\dbinom{n}{i}&=n{\overline{m}}2
\end{aligned}$$。

性质10:

(nr)(rk)=(nk)(nkrk)

证明

(nr)(rk)=n!r!(nr)!r!k!(rk)!=n!(nr)!k!(rk)!=n!(nk)!(nr)!k!(rk)!(nk)!=n!k!(nk)!(nk)!(rk)!(nr)!=(nk)(nkrk)

二项式反演

内容

形式1

Fn=i=0n(1)i(ni)GiGn=i=0n(1)i(ni)Fi

形式2

Fn=i=0n(ni)GiGn=i=0n(1)ni(ni)Fi

证明

发现形式一的形态很对称,那我们设一个反演系数。

设矩阵 An,i=(1)i(ni),现在变为求证 Fn=i=0nAn,iGiGn=i=0nAn,iFi,即证 AA=I

(AA)n,m=t=1An,tAt,m=t=mn(1)t(nt)(1)m(tm)=(1)mt=mn(1)t(nt)(tm)=(1)mt=mn(1)t(n!t!×(nt)!t!m!×(tm)!)=(1)mt=mn(1)t(nm)(nmnt)=(1)m(nm)t=mn(1)t(nmnt)=(1)m(nm)t=0nm(1)t+m+(nmntm)=(1)2m(nm)t=0nm(1)t+(nmt)

发现后面的那块是二项式定理,所以原式可以化简为:

(1)2m(nm)(11)nm

仔细观察,此式只有在 n=m 时值为 1,其余时间都为 0,即 [n=m],也就是单位矩阵 I

由此得证 AA=I 即矩阵 A 自逆,从而得证形式一,而形式二通过移动 1 的次幂即可推得。

例题

CF997C Sky Full of Stars

虽然 Codeforces 题库炸了,但不影响这是一道能用来练二项式反演的好题(好像也可以用容斥原理做?)。

套路化的,我们设 Fi,j至少ij 列同色的方案数,Gi,j恰好ij 列同色的方案数。很明显,我们有:

Fx,y=i=xnj=yn(ni)(nj)Gi,j

发现这是 二维二项式反演 的经典式子,反演后可得:

Gx,y=i=xnj=yn(1)ni(ni)(1)nj(nj)Fi,j

Gx,y=(1)2ni=xnj=yn(1)i+j(ni)(nj)Fi,j

而我们要求的答案是总方案数 3n2G0,0,问题即转化为求 F,接下来分类讨论。

  • ij0 时,同色的行和列一定交叉,所以所有行和列都是一种颜色,方案数为 (ni)(nj)3(ni)(nj)+1
  • ij=0,i+j0 时,同色的行和列一定交叉,所以所有行和列都是一种颜色,方案数为 (ni+j)3i+j+(nij)n
  • i+j=0 时,无限制,方案数为 3n2

F 带回去算出 G0,0 用全部方案数一减即可。

posted @   Ryan_Adam  阅读(226)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示