组合数

1.杨辉三角

\[\binom{n}{m}=\binom{n-1}{m}+\binom{n-1}{m-1} \]

分两种情况:

  • 在前 \(n-1\) 个中已经选出 \(m\) 个;
  • 在前 \(n-1\) 个中选出 \(m-1\) 个,加上刚刚选的第 \(m\) 个。

可用于 \(O(n^2)\) 预处理组合数。

2.组合恒等式

i.吸收恒等式

\[\binom{n}{m}=\frac{n}{m}\binom{n-1}{m-1} \]

\[m \times \binom{n}{m} \times \binom{n-1}{m-1} \]

  • Proof:

\[\begin{aligned}\frac{n}{m} \binom{n-1}{m-1} &=\dfrac{n}{m} \times \dfrac{(n-1)!}{(m-1)!(n-m)!}\\&= \dfrac{n!}{m!(n-m)!}\\&= \binom{n}{m}\end{aligned} \]

同理可得:

\[\binom{n}{m}=\dfrac{n}{n-m} \times \binom{n-1}{m} \]

ii.对称恒等式

\[\binom{n}{m}=\binom{n}{n-m} \]

组合意义:\(n\)\(m\),相当于 \(n\) 个中不选 \(n-m\) 个。

iii.上指标求和1

\[\sum_{i=0}^n \binom{m+i}{m}=\binom{n+m+1}{m+1} \]

  • Proof

    \[\begin{aligned}\sum_{i=0}^n \binom{m+i}{m} &= \binom{m}{m} +\binom{m+1}{m} + \dots + \binom{m+n}{m} \\&= \binom{m+1}{m+1} + \binom{m+1}{m} + \binom{m+2}{m} + \dots + \binom{m+n}{m}\\ &= \binom{m+2}{m+1} + \binom{m+2}{m} + \dots + \binom{m+n}{m} \\&= \binom{m+3}{m+1} + \binom{m+3}{m} + \dots + \binom{m+n}{m} \\&= \binom{m+n+1}{m+1}\end{aligned} \]

iv.上指标求和2

\[\sum_{i=k}^{n} \binom{i}{k}=\binom{n+1}{k+1} \]

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

v.对角线求和

\[\sum_{i=0}^{m}\binom{n+i}{i} =\sum_{i=0}^{m}\binom{n+i}{n}=\binom{n+m+1}{n+1} \]

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

vi.组合数前缀和

\(S_{n,m}=\sum_{i=0}^{m} \binom{n}{i}\)。有递推:

\[S_{n,m}=S_{n,m-1}+\binom{n}{m}=S_{n,m+1}-\binom{n}{m} \]

\[S_{n,m}=\sum_{i=0}^m\binom{n}{i}=\sum_{i=0}^m\binom{n-1}{i}+\sum_{i=0}^m\binom{n-1}{i-1}=2S_{n-1,m}+\binom{n-1}{m} \]

\[S_{n,m}=\dfrac{S_{n+1,m}-\binom{n}{m}}{2} \]

vii.范德蒙德卷积

\[\sum_i \binom{n}{i}\binom{m}{k-i}=\binom{n+m}{k} \]

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

\(x-y\) 为定值,转化为在 \(B\) 集合中不选 \(m-y\) 个,那么 \(x+m-y\) 为定值,得到 \(\binom{n+m}{x+m-y}\)

viii.格路计数

\((0,0)\) 向下、向右走到 \((n,m)\) 的方案数为 \(\binom{n+m}{n}\)

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

3.二项式定理

Theorem

\[(a+b)^n = \binom{n}{0}a^0b^n + \binom{n}{1}a^1b^{n-1} + \binom{n}{2} a^2b^{n-2} + \dots + \binom{n}{n-1}a^{n-1}b^1 + \binom{n}{n}a^nb^0 = \sum\limits_{i=0}^n \binom{n}{i}a^ib^{n-i} \]

Proof:将原式全部拆开,对于 \(a^ib^{n-i}\) 项,在拆开后的式子中出现了 \(\binom{n}{i}\) 次。

i.下指标求和

\[\sum_{i=0}^n\binom{n}{i}=2^n \]

组合意义:设 \(S={1,2,3,...,n}\)\(S_i\)\(S\) 大小为 \(i\) 的子集的集合。所有 $S_i $ 的并集是 \(S\),且两两不交。

代数意义:二项式定理。

ii.交错和

\[\sum_{i=0}^n(-1)^i\binom{n}{i}=0 \]

代数意义:原式化为 \((1-1)^n\)

4.卢卡斯定理(Lucas)

Theorem

\[\binom{n}{m} \equiv \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \times \binom{n \bmod p}{m \bmod p} \pmod{p} \]

其中 \(p\) 为质数。

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

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

Proof

  • 引理:若 \(p\) 为质数,则 \((1+x)^p \equiv 1+x^p \pmod{p}\)

    Proof:

    • \((1+x)^p\) 利用二项式定理展开,得 \((1+x)^p = \sum\limits_{i=0}^p \binom{p}{i}x^i\)
    • 利用吸收恒等式变形: \(\sum\limits_{i=0}^p \binom{p}{i}x^i = 1+\sum\limits_{i=1}^p \dfrac{p}{i}\binom{p-1}{i-1}x^i\)
    • 对于 \(\forall i \in [1,p)\)\(\dfrac{p}{i}\binom{p-1}{i-1} \mid p\),则有 \((1+x)^p \equiv 1+x^p \pmod{p}\)。命题得证。
  • \(n=sp+q,m=tp+r\)。问题转化为证明 \(\binom{n}{m} \equiv \binom{s}{t} \times \binom{q}{r} \pmod{p}\)

    \(\binom{n}{m}\) 即为 \((1+x)^n\)\(x^m\) 项的系数。

    \[\begin{aligned}(1+x)^n &\equiv (1+x)^{sp+q} &\pmod{p}\\&\equiv (1+x)^{sp} \times (1+x)^q &\pmod{p}\\&\equiv [(1+x)^p]^s \times (1+x)^q &\pmod{p}\\&\equiv (1+x^p)^s \times (1+x)^q &\pmod{p}\\&\equiv (\sum\limits_{i=0}^s\binom{s}{i}x^{ip})(\sum\limits_{i=0}^q\binom{q}{i}x^i) &\pmod{p}\end{aligned} \]

    由于 \(x^m = x^{tp+r} = x^{tp}\times x^r\)\(x ^ m\) 的系数也可表示为 \(\binom{s}{t} \times \binom{q}{r}\)

    则有 \(\binom{n}{m} \equiv \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \times \binom{n \bmod p}{m \bmod p} \pmod{p}\),命题得证。

利用 Lucas 定理,可以在 \(O(p)\) 处理阶乘数组与阶乘逆元数组后, \(O(\log_p n)\) 求出 \(\binom{n}{m} \bmod p\) 的值。

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;  
}

5.阶乘的素数幂次

\(p \in \mathbb{Prime}\),则有:

\[v_p(n!)=\sum_{i>0} \lfloor\dfrac{n}{p^i} \rfloor \]

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

\(1\sim n\) 分开,\(v_p(n!)=\sum_{i=1}^n v_p(i)\)

\(1\sim n\) 中至少包含一个 \(p\) 的数字有 \(\lfloor \dfrac{n}{p} \rfloor\),统计进答案中。\(1 \sim n\) 中至少包含 \(2\)\(p\) 的数字有 \(\lfloor \dfrac{n}{p^2} \rfloor\) 个,但由于已经有一个 \(p\) 被统计过一遍,所以只需要再统计第 \(2\) 个质因子,答案加上 \(\lfloor\dfrac{n}{p^2}\rfloor\),系数为 \(1\)

我们从另一个角度来计算。用 \(p\) 进制表示 \(n\),则有 \(n=\sum a_ip^i(0\leq a_i<p)\)

\[v_p(n!)=\sum_{j\geq1} \lfloor\dfrac{\sum_{i\geq 0}a_ip^i}{p^j}\rfloor = \sum_{i \geq 0}\sum_{j\geq 1} a_i \lfloor p^{i-j}\rfloor =\sum_{i\geq 0}a_i\sum_{j=0}^{i-1}p^{j}=\sum_{i\geq 0}a_i \dfrac{p^i-1}{p-1}=\dfrac{n-s_p(n)}{p-1} \]

其中 \(s_p(n)\) 表示 \(n\)\(p\) 进制下各数位的数字之和。

6.Kummer 定理

\[v_p\left( \binom{n}{m} \right)=v_p\left(\dfrac{n!}{(n-m)!m!}\right)=v_p(n!)-v_p((n-m)!)-v_p(m!)=\dfrac{s_p(m)+s_p(n-m)-s_p(n)}{p-1} \]

\(p\) 进制下 \(n-m\)\(m\) 相加,结果为 \(n\)

设进位次数为 \(c\)。每进位一次,数位之和就会减少 \(p-1\),那么有

\[s_p(n-m)+s_p(m)-c(p-1)=s_p(n) \Rightarrow c=\dfrac{s_p(m)+s_p(n-m)-s_p(n)}{p-1} \]

于是得到 \(\binom{n}{m}\)\(p\) 的次数,就是 \(n-m\)\(m\)\(p\) 进制下相加进位次数。

同理可得, \(\binom{n}{m}\)\(p\) 的次数就是 $n $ 与 \(m\)\(p\) 进制下相减的借位次数。

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

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

由此可以快速判断 \(\binom{n}{m}\) 的奇偶性:设 \(n,m\) 在二进制下表示的集合为 \(S_n,S_m\)\(\binom{n}{m}\) 为奇数当且仅当 \(S_m \subseteq S_n\),也就是 \(n \operatorname{and} m = m\)

7.卡特兰数

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

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

求法 1

欲求出 \(Cat_n\) 的值,不妨利用容斥,用总方案数 \(\binom{2n}{n}\) 减去不合法的方案数。

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

反转 \(B[2p+2\sim 2n]\) 的每个元素,\(0\)\(1\)\(1\)\(0\)。那么我们得到了一个含有 \(n+1\)\(1\)\(n-1\)\(0\) 的数列。

对于一个含有 \(n+1\)\(1\)\(n-1\)\(0\) 的数列 \(C\),也存在一个这样的 \(2p+1\)。反转 \(C[2p+2\sim 2n]\),又得到了一个含有 \(n\)\(0\)\(n\)\(1\) 的数列。

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

于是我们得到:

\[Cat_i=\binom{2n}{n}-\binom{2n}{n+1}=\dfrac{\binom{2n}{n}}{n+1} \]

求法 2

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

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

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

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

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

卡特兰数的应用

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

卡特兰数还有递推形式:

\[f_i=\sum_{j=1}^i (f_{i-1}\times f_{i-j}) \]

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

\[Cat=\{1,1,2,5,14,42,132,429,1430,4862,...\} \]

posted @ 2024-10-29 16:57  XP3301_Pipi  阅读(30)  评论(0编辑  收藏  举报
Title