组合数学-二项式系数

组合数学-二项式系数

1.帕斯卡公式

(nm)=(n1m)+(n1m1)

分两种情况:

  • 在前 n1 个中已经选出 m 个;
  • 在前 n1 个中选出 m1 个,加上刚刚选的第 m 个。

可用于 O(n2) 预处理组合数。

2.组合恒等式

i.吸收恒等式

(nm)=nm(n1m1)

m×(nm)×(n1m1)

  • Proof:

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

同理可得:

(nm)=nnm×(n1m)

ii.对称恒等式

(nm)=(nnm)

组合意义:nm,相当于 n 个中不选 nm 个。

iii.上指标求和1

i=0n(m+im)=(n+m+1m+1)

  • Proof

    i=0n(m+im)=(mm)+(m+1m)++(m+nm)=(m+1m+1)+(m+1m)+(m+2m)++(m+nm)=(m+2m+1)+(m+2m)++(m+nm)=(m+3m+1)+(m+3m)++(m+nm)=(m+n+1m+1)

iv.上指标求和2

i=kn(ik)=(n+1k+1)

组合意义:考虑 n+1 个物品中选 k+1 个,若最后一个选出的物品是第 i 个,那么前面选择方案有 (i1k) 种。

v.对角线求和

i=0m(n+ii)=i=0m(n+in)=(n+m+1n+1)

利用对称恒等式转化为上指标求和 1。

vi.组合数前缀和

Sn,m=i=0m(ni)。有递推:

Sn,m=Sn,m1+(nm)=Sn,m+1(nm)

Sn,m=i=0m(ni)=i=0m(n1i)+i=0m(n1i1)=2Sn1,m+(n1m)

Sn,m=Sn+1,m(nm)2

vii.范德蒙德卷积

i(ni)(mki)=(n+mk)

A 集合选出 x 个,从 B 集合选出 y 个,当 x+y 为定值时可套用。

xy 为定值,转化为在 B 集合中不选 my 个,那么 x+my 为定值,得到 (n+mx+my)

viii.格路计数

(0,0) 向下、向右走到 (n,m) 的方案数为 (n+mn)

组合意义:总共要走 n+m 格, n 格向下,nm 格向右。在 nm 步中选择 n 步向下走。

3.二项式定理

Theorem

(a+b)n=(n0)a0bn+(n1)a1bn1+(n2)a2bn2++(nn1)an1b1+(nn)anb0=i=0n(ni)aibni

组合意义:将原式全部拆开,对于 aibni 项,在拆开后的式子中出现了 (ni) 次。

代数推导:数学归纳法。当 n=1 时显然成立。当 n>1 时,假设 n1 成立,则:

(a+b)n=(a+b)(a+b)n1=(a+b)i=0n1(n1i)aibni1=ai=0n1(n1i)aibni1+bi=0n1(n1i)aibni1=i=0n1(n1i)ai+1bni1+i=0n1(n1i)aibni=i=1n(n1i1)aibni+i=0n1(n1i)aibni=an+i=1n1(n1i1)aibni+bn+i=1n1(n1i)aibni=i=1n1((n1i1)+(n1i))aibni+an+bn=i=1n1(ni)aibni+(nn)an+(n0)bn=i=0n(ni)aibni

i.下指标求和1

i=0n(ni)=2n

组合意义:设 S=1,2,3,...,nSiS 大小为 i 的子集的集合。所有 Si 的并集是 S,且两两不交。

代数意义:二项式定理,(1+1)n

ii.下指标交错和

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

代数意义:原式化为 (11)n

组合意义:在 n 个物品中选择奇数个物品的方案等于选择偶数个物品的方案。假设我们要选取偶数个物品,前 n1 个物品可以任选。如果已经选出了偶数个物品,那么第 n 个不选;如果已经选择了奇数个,那么第 n 个必须选,则总方案数为 2n1。要选取奇数个物品也是同理的,总方案数也是 2n1

iii.下指标求和2

i=1n(ni)i=n×2n1

代数推导:

i=1n(ni)i=i=1n(n1i1)ni×i=ni=1n(n1i1)=ni=0n1(n1i)=n×2n1

4.不定方程整数解问题

Problem A.

现有 k 个未知数 x1,x2,x3,...xk,求不定方程 正整数解 的个数:xi=n

我们假设现在有 n 个物品排成一排,每两个物品中间都有一个空当,共有 n1 个空当。

若要把这 n 个物品分成 k 部分,那么我们需要插入 k1 个 “隔板”,共有 (n1k1) 种方案。

对于每一种方案,我们就令 xi 为分出的第 i 个部分中物品个数,可以唯一对应一种合法的解。

对于每一组解,我们令第 i 个部分中物品个数为 xi,可以唯一对应一种插隔板的方案。

则解的个数就是插板方案数,即 (n1k1)

Problem B.

现有 k 个未知数 x1,x2,x3,...xk,求不定方程 非负整数解 的个数:xi=n

yi=xi+1,那么 yi=n+k.。此时 yi 一定为正整数。

yi 的合法解,能够与 xi 的合法解一一对应。由上面的叙述,可知 yi 解的个数为 (n+k1k1),那么原问题的答案也是 (n+k1k1)

5.多重集合的排列与组合

首先引入多重集合的概念:

  • 确定的、无序的、可重的集合。

1x3y5z 组成的多重集合可表示为 {1x,3y,5z}

Problem A.

现有一个多重集合 S={c1x1,c2x2,...ckxk}ci=n

我们任意地取出 S 的每一个元素排成一个序列,问会形成多少种不同的序列?

首先我们拿出 c1x1,有 (nc1) 种安排位置的方案。

再拿出 c2x2,有 (nc1c2) 种安排位置的方案。

依次进行下去,最后的答案即为:

(nc1)(nc1c2)(nc1c2c3)(ni=1k1cick)=n!c1!c2!c3!ck!

展开二项式系数,进行约分即可。

Problem B.

现有一个多重集合 S={x1,x2,...xk}

我们任意地取出 Sm 个元素生成一个集合,问会形成多少种不同的集合?

问题转化为不定方程非负整数解问题:xi=m 的解个数。

答案就是 (k+m1k1)

6.二项式系数的单峰性

我们把 (n0),(n1),(n2),,(nn) 排成一个序列。那么存在一个 t,使得 1t 不降,tn 不升。

进一步地,若 n 为奇数,则 t=n2,否则 t=n2n2+1

我们把 (nk),(nk1) 拿出来作商,有:

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

nk+1<k,则 k<n2

nk+1=k,则 k=n2

nk+1>k,则 k>n2

讨论一下 n 的奇偶即可。

7. 多项式系数

我们把二项式系数扩展到多项式系数:(nc1 c2 c3 ck) 表示把 n 个物品划分为 k 个集合,使得第 i 个集合大小为 ci 的方案数。

我们有:

(nc1 c2 c3 ck)=(nc1)(nc1c2)(nc1c2c3)(ni=1k1cick)=n!c1!c2!c3!ck!

注意到它的值与 5.B 中多重集合排列问题的答案相等。

对于一种分割方案,我们考虑一个长度为 n 的序列 A,把所有第 i 个集合中的元素 xj 拿出来,并令 Axj 等于 i。这样一种分割方案能够唯一对应一个多重集合的排列方案。

对于一种排列方案,我们把 Ai=j 的所有 i 全部放入 j 集合中,那么一种排列方案就唯一对应一种分割方案。

帕斯卡公式

(nc1 c2 c3 ck)=(n1c11 c2 c3 ck)+(n1c1 c21 c3 ck)++(n1c1 c2 c3 ck1)

组合意义:考虑第 n 个物品被分入了哪一个集合,加法原理即可。

代数推导:

(n1c11 c2 c3 ck)+(n1c1 c21 c3 ck)++(n1c1 c2 c3 ck1)=(n1)!(c11)!c2!c3!ck!+(n1)!c1!(c21)!c3!ck!++(n1)!c1!c2!c3!(ck1)!=n!c1!c2!c3!ck!c1n+n!c1!c2!c3!ck!c2n++n!c1!c2!c3!ck!ckn=(nc1 c2 c3 ck)c1+c2++ckn=(nc1 c2 c3 ck)

多项式定理

(x1+x2++xk)n=c1+c2++ck=n,ci0,ciZ(nc1 c2 c3 ck)x1c1x2c2xkck

我们把 (x1+x2++xk)n 展开。对于 x1c1x2c2xkck 这一项,会在展开的式子中出现 (nc1 c2 c3  ck) 次。

对展开后的式子合并同类项,最终不同的项会有 (n+k1k1) 个(考虑转化为不定方程整数解问题)。

8.卢卡斯定理(Lucas)

Theorem

(nm)(npmp)×(nmodpmmodp)(modp)

其中 p 为质数。

也就是把 n,m 表示为 p 进制数,对于每一位都分别求解再相乘。

适用于 n,m 都很大,但 p 较小时的情况。

Proof

  • 引理:若 p 为质数,则 (1+x)p1+xp(modp)

    Proof:

    • (1+x)p 利用二项式定理展开,得 (1+x)p=i=0p(pi)xi
    • 利用吸收恒等式变形: i=0p(pi)xi=1+i=1ppi(p1i1)xi
    • 对于 i[1,p)pi(p1i1)p,则有 (1+x)p1+xp(modp)。命题得证。
  • n=sp+q,m=tp+r。问题转化为证明 (nm)(st)×(qr)(modp)

    (nm) 即为 (1+x)nxm 项的系数。

    (1+x)n(1+x)sp+q(modp)(1+x)sp×(1+x)q(modp)[(1+x)p]s×(1+x)q(modp)(1+xp)s×(1+x)q(modp)(i=0s(si)xip)(i=0q(qi)xi)(modp)

    由于 xm=xtp+r=xtp×xrxm 的系数也可表示为 (st)×(qr)

    则有 (nm)(npmp)×(nmodpmmodp)(modp),命题得证。

利用 Lucas 定理,可以在 O(p) 处理阶乘数组与阶乘逆元数组后, O(logpn) 求出 (nm)modp 的值。

void Init(){
    fac[0]=caf[0]=1;
    for(int i=1;i<p;i++) fac[i]=fac[i-1]*i%p;
    caf[p-1]=QuickPow(fac[p-1],p-2);
    for(int i=p-2;i;i--) caf[i]=caf[i+1]*(i+1)%p;
}

ll C(int x,int y){
    if(x<y) return 0;
    return fac[x]*caf[y]%p*caf[x-y]%p;
}

ll Lucas(int x,int y){
    if(x<p&&y<p) return C(x,y);
    else return Lucas(x/p,y/p)*C(x%p,y%p)%p;  
}

9.阶乘的素数幂次

pPrime,则有:

vp(n!)=i>0npi

其中 vp(x) 表示 x 中包含 p 的次数。

1n 分开,vp(n!)=i=1nvp(i)

1n 中至少包含一个 p 的数字有 np,统计进答案中。1n 中至少包含 2p 的数字有 np2 个,但由于已经有一个 p 被统计过一遍,所以只需要再统计第 2 个质因子,答案加上 np2,系数为 1

我们从另一个角度来计算。用 p 进制表示 n,则有 n=aipi(0ai<p)

vp(n!)=j1i0aipipj=i0j1aipij=i0aij=0i1pj=i0aipi1p1=nsp(n)p1

其中 sp(n) 表示 np 进制下各数位的数字之和。

10.Kummer 定理

vp((nm))=vp(n!(nm)!m!)=vp(n!)vp((nm)!)vp(m!)=sp(m)+sp(nm)sp(n)p1

p 进制下 nmm 相加,结果为 n

设进位次数为 c。每进位一次,数位之和就会减少 p1,那么有

sp(nm)+sp(m)c(p1)=sp(n)c=sp(m)+sp(nm)sp(n)p1

于是得到 (nm)p 的次数,就是 nmmp 进制下相加进位次数。

同理可得, (nm)p 的次数就是 nmp 进制下相减的借位次数。

(nm) 在模 p 意义下为 0,那么 n,mp 进制下相减时至少产生了一次借位。

换句话说,如果在 p 进制下存在一位,使得 n 在这一位的值小于 m 在这一位的值,那么 (nm)modp 一定为 0

由此可以快速判断 (nm) 的奇偶性:设 n,m 在二进制下表示的集合为 Sn,Sm(nm) 为奇数当且仅当 SmSn,也就是 nandm=m

11.卡特兰数

对于一个长度为 2n 的 01 序列 A,含有 n0n1,满足对于任意的 i[1,2n]A[1i]1 的个数不超过 0 的个数。

这样的 A 的个数,我们记为 Catn,也就是卡特兰数的第 n 项。

求法 1

欲求出 Catn 的值,不妨利用容斥,用总方案数 (2nn) 减去不合法的方案数。

对于一个不合法的数列 B,存在一个位置 2p+1,满足 B[1i]0,1 分别出现了 p,p+1 次。那么 B[2p+22n]0,1 分别出现了 np,np1 次。

反转 B[2p+22n] 的每个元素,0110。那么我们得到了一个含有 n+11n10 的数列。

对于一个含有 n+11n10 的数列 C,也存在一个这样的 2p+1。反转 C[2p+22n],又得到了一个含有 n0n1 的数列。

每一个 B 都能得到一个唯一的 C,反过来亦然。那么不合法的方案数就是 C 的个数,即 (2nn+1)

于是我们得到:

Cati=(2nn)(2nn+1)=(2nn)n+1

求法 2

Catn 也可以表述为:在平面直角坐标系中,每次允许向 xy 的正方向移动一格,从 (0,0) 不超过 y=x 这条直线走到 (n,n) 的方案数。

那么如果我们移动过程中触碰到了 y=x+1 这条直线,必定不合法。

考虑类似于 "反射" 的转化:如果触碰到了 y=x+1,那么移动 x 变为移动 y,移动 y 变为移动 x。最终我们会到达 (n,n) 关于 y=x+1 的对称点 (n1,n+1)

图中黑色折线为原路径,黄色折线为 “反射” 得到的直线。

那么不合法的走法有 (2nn+1) 种,也可以得到与求法 1 相同的表达式。

卡特兰数的应用

  1. 长度为 2n 的括号序列个数为 Catn
  2. n 个元素按顺序进栈,出栈序列的个数为 Catn
  3. n 个节点能够构造出 Catn 种不同的二叉树。
  4. ...

卡特兰数还有递推形式:

fi=j=1i(fi1×fij)

卡特兰数的前 10 项 (从 0 开始):

1,1,2,5,14,42,132,429,1430,4862,...

posted @   XP3301_Pipi  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
Title
点击右上角即可分享
微信分享提示