组合数学初步

数学还是太菜了 \kk 。

组合数和排列数

定义

高中数学选修三内容。

定义排列数 \(A_n^m\) 为从 \(n\) 个不重复的元素中选 \(m\) 个按一定顺序排列的方案数。

根据乘法原理易得

\[A_n^m=n\times (n-1)\times … \times(n-m+1)=\frac{n!}{(n-m)!} \]

定义排列数 \(C_n^m\) 为从 \(n\) 个不重复的元素中选 \(m\) 个的方案数。

由排列数公式易得

\[C_n^m=\dbinom{n}{m}=\frac{n!}{m!(n-m)!} \]

也就输排列数除去 \(n!\) ,简单易懂。

推广

  • 二项式定理

\[(x+y)^n=\sum\limits_{i=0}^n \dbinom{n}{i}x^iy^{n-i} \]

  • 二项式反演

\[g(i)=\sum\limits_{i=k}^n \dbinom{n}{i}f(i) \]

\[f(i)=\sum\limits_{i=k}^n \dbinom{n}{i}(-1)^{i-k}g(i) \]

常用于解决一类形如 "恰好……" 的问题。这类问题中,一般将其转化为 "钦定……" 的问题便于求解,最后使用二项式反演即可。

例题:P4859P6478

  • 常用的组合恒等式

(一)

\[\dbinom{n}{i}=\frac{n-i+1}{i}\dbinom{n}{i-1} \]

证明:显然。

(二)

\[\dbinom{n}{i}=\frac{n}{i}\dbinom{n-1}{i-1} \]

证明:显然。

(三) 基本求和公式

\[\sum\limits_{i=0}^n\dbinom{n}{i}=2^n \]

证明:由组合意义易证。

(四) 交错和

\[\sum\limits_{i=0}^n(-1)^i\dbinom{n}{i}=0 \]

证明:套用二项式定理即可。

(五)

\[\sum\limits_{i=0||1}^nk\dbinom{n}{i}=n2^{n-1} \]

证明:

\[\begin{aligned} \sum\limits_{i=1}^nk\dbinom{n}{i} & = \sum\limits_{i=1}^ni\frac{n!}{i!(n-i)!}\\ & = n\sum\limits_{i=0}^{n-1}\frac{(n-1)!}{i!(n-(i+1))!}\\ & = n\sum\limits_{i=0}^{n-1}\frac{(n-1)!}{i!(n-1-i))!}\\ & = n\sum\limits_{i=0}^{n-1}\dbinom{n-1}{i}\\ & =n2^{n-1}\\ \end{aligned} \]

总结

在大多数情况下,组合数学最常用的方面是计数问题,或直接根据题面公式计算。

在进行推导时,需灵活使用上述组合恒等式和定理进行代换和化简,必要时,也可以直接通过组合意义抽象出具体问题,需要大量的做题经验。

卡特兰数

卡特兰数是组合数学中的一种常见数列,前几项如下:

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

公式

从最经典的进出栈问题开始理解,通常大多数卡特兰数问题可以转化为这个。

由简单容斥可得,合法出栈序列 = 总序列个数 - 非法序列个数。

进栈抽象为 + 1 ,出栈抽象为 - 1 。

则序列总个数为 \(C_{2n}^n\)

非法序列个数比较麻烦,需要转化一下。

找到每个非法序列第一个前缀和小于 0 的地方,将这之前的序列全部反转,容易证明这和原序列一一对应。

那么非法序列总个数即为 \(C_{2n}^{n+1}\)

合法序列总个数即为: (\(C_n\) 即为卡特兰数的第 \(n\) 项)

\[C_n=C_{2n}^n-C_{xn}^{n-1}=\frac{C_{2n}^{n}}{(n+1)} \]

由组合恒等变换得到递推公式:

\[C_n=C_{n-1}\frac{4n-2}{n+1} \]

顺便给一下最基础的通式吧:

\[C_n= \begin{cases} 1&n=0,1\\\sum\limits _ {i=0}^{n-1} C_iC_{n-i-1}&n\ge 2 \end{cases} \]

组合意义/应用

  • \(n\) 个元素入栈序列为 \(1\)\(n\) ,出栈序列的总个数。
  • \(n\) 对括号所能组合成的合法括号序列的个数。
  • \(n+1\) 个节点所能构成的形状不同的满二叉树的总个数。
  • \(n\) 个节点的形状不同的二叉树的总个数。
  • ……

斯特林数

前置知识

上升幂:

\[x^{\overline n}=x(x+1)(x+2)…(x+n-1) \]

下降幂:

\[x^{\underline n}=x(x-1)(x-2)…(x-n+1) \]

第一类斯特林数

  • 定义

把 1 到 \(n\) 排列成 \(k\) 个非空循环(或者叫做圆排列?)的方案数,写作 \(s(n,k)\)\(\begin{bmatrix}n\\k\end{bmatrix}\)

  • 公式

加入 \(n\) 即可看作自身构成循环或加入到前 \(n\) 个数前,易得递推公式:

\[\begin{bmatrix}n\\k\end{bmatrix}=\begin{bmatrix}n-1\\k-1\end{bmatrix}+(n-1)\begin{bmatrix}n-1\\k\end{bmatrix} \]

  • 推广
  1. \(s(0,0)=1\)

  2. \(s(n,0)=0\)

  3. \(s(n,1)=(n-1)!\)

  4. \(s(n,n-1)=C_n^2\)

第二类斯特林数

比第一类斯特林数更为常用。

  • 定义

把 1 到 \(n\) 分成 \(k\) 个集合的方案数,写作 \(S(n,k)\)\(\begin{Bmatrix}n\\k\end{Bmatrix}\)

  • 公式

和第一类斯特林数类似的:

\[\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n-1\\k-1\end{Bmatrix}+k\begin{Bmatrix}n-1\\k\end{Bmatrix} \]

  • 推广
  1. \(S(0,0)=S(n,1)=1\)
  2. \(S(n,0)=S(n,0)=0\)
  3. \(S(n,2)=2^{n-1}-1\)

斯特林数和上升/下降幂的应用

原本是打算自己找资料的,但看到几篇博文写的实在太好,就摆了。

https://www.luogu.com.cn/blog/wangrx/finite-calculus

posted @ 2022-06-04 21:25  lxg_swrz  阅读(177)  评论(0)    收藏  举报