组合计数笔记

本文介绍了组合数学中的关键概念和技术,包括组合数、错排数、隔板法等,并探讨了组合数模意义下的Lucas定理及其应用,以及网格不相交路径计数问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组合数

Ckn=n!k!(nk)!
Ckn=Ckn1+Ck1n1
Ck+1n=nkk+1Ckn


错排数

n个数进行排列,每个数都不在自己的位置上的方案数
Dn=(n1)(Dn1+Dn2)

推导:
对于第 n个数,不放在 n位置,一共有 (n1) 种情况
n个数放定后,假设放在 k上,考虑第 k个数
1. 放在 n位置上,则剩下 n2个数,错排数 Dn2
2. 不放在 n位置上,则剩下 n1个数
将第k个数的原本位置当做 n(不放在n位置上),错排数 Dn1
所以 Dn=(n1)(Dn1+Dn2)
其中D0=1D1=0


隔板法

1) 将 n个小球,放入 k个盒子里,每个盒子不为空,求方案数
Ck1n1

n个小球排成一行,中间插入 k1个隔板,隔板插入的位置有 n1
故从 n1个位置中选择 k-1个,方案数为 Ck1n1

2) 将 n个小球,放入 k个盒子里,允许盒子为空,求方案数
Ck1n+k1

与上种情况基本相同,但允许盒子为空,所以人为在每个盒子里先加一个球
这样问题就转化为上种情况,计算出方案后,再把加的球拿掉,方案数不变
这样就有 n+k个球,从 n+k1个位置中选择 k1个隔板


可重复排列

n个不相同的球,从中取 k个,可以重复取,问方案数
Cn1n+k1

可以看作是 n个盒子,放入 k个球,一个盒子里的球数代表这个数被取了多少次
用隔板法求解


C(n,k) mod p (lucas定理)

C(n,k)%p=C(n%p,k%p)×C(n/p,k/p)

虽说当 p为质数时,组合数可以利用逆元 (1)求得
但是当 nk很大的时候,阶乘逆元可能处理不了那么多,所以就要利用 lucas定理。
这样一来因为只需求 C(n%p,k%p),所以只需预处理到模数 p的阶乘即可。
其时间效率为 O(log(n))log的底为模数 p


网格不相交路径计数 (Lindström–Gessel–Viennot引理)

设有向无环的网格中,起点集为 U(u1,u2,...,un),终点集为 V(v1,v2,...,vn)
f(u,v)uv的路径方案数,则起点集 U到起点集 V的不相交路径数为
det(M)=f(u1,v1)f(u2,v1)f(un,v1)f(u1,v2)f(u2,v2)f(un,v2)f(u1,vn)f(u2,vn)f(un,vn)
这个行列式的值
具体证明方法好像是用容斥定理
一个不严谨的证明:

σ(V) 为终点的一个排列,σi 为排列的第 i
如果 i<juivjujvi 的路径就必然产生至少一个交错点
这里有一个至少,所以容斥交点个数来计算总方案数
接下来用容斥定理来计算方案数,易得容斥过程中的某一项为
(1)t(f(u1,σ1)+f(u2,σ2)...+f(un,σn))
接下来就是确定这一项的符号,即 t的奇偶性
而这与路径的至少有几个交点有关
根据上述,可以发现至少交点个数与σ(V)中的逆序数有关
由于(ui,vi)这样顺序对应时(交点个数最少为 0),容斥的符号为正
所以观察发现,t 的奇偶性与逆序数的奇偶性一致
那么这样一来,可以将容斥的求和过程转化为一个行列式

容斥的计算复杂度为 O(n!),而行列式的计算复杂度就降到了 O(n3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值