组合数学

组合数学真的非常重要啊啊啊。

排列组合

  • 组合恒等式

  1. 对称恒等式

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

  1. 吸收恒等式

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

  1. 归纳恒等式:

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

  1. \[\sum\limits_{i=m}^n\binom i m=\binom {n+1} {m+1} \]

    用组合意义可以非常完美的解释。右边的组合数相当于你从 \(n+1\) 个球里取出 \(m+1\) 个球,但这第 \(m+1\) 个球其实相当于限制了前 \(m\) 个球选择的范围,发现就是左边的东西。证毕。

  2. \[\sum\limits_{i=0}^m \binom n m \binom m {m-i}=\binom{m+n}{m}(n\geq m) \]

  3. \[\binom n r \binom r k=\binom n k \binom{n-k}{r-k} \]

  4. \[\sum\limits_{i=0}^n \binom {n-i} {i} =F_{n+1} \]

    其中 \(F_i\) 为斐波那契数列第 \(i\) 项。考虑 \(F_i\) 的组合意义:给定 \(i-2\) 个位置,在里面放若干个球,是的球两两不相邻的方案数。而左边也可以像这样解释。

  • 例题:


容斥原理

直接推荐这个,讲的非常全面。

自己总结一下,谈谈模型的建立。就是你首先要确定你要容斥的集合(包括确定元素,全集),然后每个元素都有一个属性,你要根据题目要求判断是求属性的交还是并等等,最后套用容斥公式解答。

  • 集合幂级数

    (Update 2020.6.6)今天问了Binary_Search_Tree神仙一个式子的推导:

    \[f(S)=\sum\limits_{S\subseteq T}g(T) \Leftrightarrow g(S)=\sum\limits_{S\subseteq T}(-1)^{|T|-|S|}f(T) \]

    然后他就花了一个小时给我讲了集合幂级数(呜呜呜我太菜了理解了好久)。

    定义

    定义形如

    \[f(x)=\sum\limits_{S}a_Sx^S \]

    为集合幂级数,其中枚举的\(S\)为集合\(\{1,2,3,4,...,n\}\)的一个子集,\(a_S\)为系数。

    运算

    • 加法:对应系数相加。

    • 减法:对应系数相减。

    • 乘法:

    \[f(x)g(x)=\sum\limits_{S_1}\sum\limits_{S_2}a_{S_1}b_{S_2}x^{S_1+S_2} \]

    其中\(a_{S_1}\)\(b_{S_2}\)表示对应项的系数。

    • 子集卷积:

    \[f(x)*g(x)=\sum\limits_{S}(\sum\limits_{S_1}\sum\limits_{S_2}[S_1\cap S_2=\varnothing][S_1 \cup S_2=S]a_{S_1}b_{S_2})x^S \]

    • 求逆:
      两个函数的子集卷积为\(e\)

    特殊集合幂级数

    说白了就跟数论中一些基本函数差不多。

    • \(I\):所有系数均为\(1\)
    • \(e\):空集的系数为\(1\),其余系数为\(0\)

    (基础知识完结撒花)

    好了,bb了这么多,回到开始的那个式子上去吧。

    首先我们发现一个神奇的性质:

    \[I*T=e,T=\sum\limits_{S}(-1)^{|S|}x^S \]

    考虑它为什么成立。

    证明:

    \[\begin{aligned}I*T[S] &=\sum\limits_{i=1}^{|S|}\binom{|S|}{i}(-1)^i1^{|S|-i}\\&=(1-1)^{|S|}\\&=0^{|S|} \end{aligned} \]

    中间的推导过程使用了二项式定理。我们发现只有当\(|S|=0\)也就是\(S\)是空集时这一项的系数才为\(1\),否则为\(0\),这正是\(e\)的定义啊。

    证毕。

    所以这跟最开始的式子有什么关系

    这就来啦(式子是什么来着

    \[f(S)=\sum\limits_{S\subseteq T}g(T) \Leftrightarrow g(S)=\sum\limits_{S\subseteq T}(-1)^{|T|-|S|}f(T) \]

    我们可以把\(f(S)\)看成一个集合幂级数(具体是啥不在乎,假设他是\(F\)),然后这个推导就变成了

    \[F=G*I \Leftrightarrow G=T*F \]

    其中\(T\)同上文为\(I\)求逆后的结果。类似于反演,显然成立。

  • 例题:

  1. luogu P1450 [HAOI2008]硬币购物 题解

卡特兰数

定义卡特兰数 \(C_n\) 表示:\(n\)\(0\)\(n\)\(1\) 组成的序列,满足任意前缀 \(0\) 的个数大于等于 \(1\) 的个数的数量。最近系统的学习了一下每个公式,从不同角度理解卡特兰数。

  1. \(C_n=\binom{2n}{n}-\binom{2n}{n-1}\)

    正难则反,考虑求不合法的序列个数。对于每个不合法的序列,构造一个映射:找到这个序列第一个 \(0\) 的个数小于 \(1\) 的个数 的前缀,假设这个位置为 \(i\),那么把 \(i+1\sim 2n\) 的位置去反。这样我们得到了一个有 \(n+1\)\(1\)\(n-1\)\(0\) 的序列,把这个序列对应上那个不合法的原序列。这样我们就有了一个一一映射,也就找到了不合法的序列个数为 \(\binom{2n}{n-1}\)

  2. \(C_n=\sum\limits_{i=0}^{n-1} C_i\times C_{n-i-1}\)

    发现这就是二叉树计数。考虑二叉树计数如何对应卡特兰数的基本定义就能证明这个公式。对于一个非空节点,我们把 \(0\) 对应访问左子树,\(1\) 对应访问右子树(空子树也要进入)。然后显然这就是卡特兰数的基本定义。

  3. \(C_n=\frac{C_{n-1}\times (4n-2)}{n+1}\)

    考虑凸 \(n\) 边形的划分计数。考虑两种计算方法:

    • 钦定一条边,枚举剩下 \(n-2\) 个点谁跟这条边组成一个三角形,\(H_n=H_{n-1}+H_{3}H_{n-2}+\cdots+H_{n-2}H_3 +H_{n-1}\),显然这样不重不漏。
    • 从每个点引一条对角线,去重后答案为 \((n-3)\times H_n=n/2\times (H_3H_{n-1}+H_4H_{n-2}+\cdots + H_{n-1}H_3)\)

    第一个式子的第 \(n+1\) 项为 \(H_{n+1}=H_n+H_3H_{n-1}+\cdots +H_{n-1}H_3+H_n\)。把这个式子与第二个式子相减得:

    \[H_{n+1}=(\frac {4n-6} {n})\times H_n \]

    然后通过某种神奇的想像我们发现 \(H_n=C_{n-2}\),于是就有:

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


斯特林数

  • 基础概念

    第一类斯特林数

    定义第一类斯特林数 \({n\brack k}\) 表示把 \(n\) 个元素分成 \(k\) 个轮换的方案数,递推式:

    \[{n\brack k}={n-1\brack k-1}+ (n-1)\times {n-1\brack k} \]

    第二类斯特林数

    定义第二类斯特林数 \({n \brace k}\) 表示把 \(n\) 个元素分成 \(k\) 个集合的方案数,递推式:

    \[{n \brace k}={n-1 \brace k-1} + k\times{n-1 \brace k} \]

  • 普通幂与阶乘幂的转换

    下降幂转普通幂

    \[x^n = \sum\limits_{k}{n \brace k}x^{\underline{k}} \]

    可以用归纳法证明(然鹅我看不懂),但是组合意义证明更加易懂:等式的左右相当于把 \(n\) 个球放进 \(x\) 个盒子里的方案数。

    普通幂转上升幂

    \[x^{\overline{n}}=\sum\limits_{k}{n\brack k}x^k \]

    证明留坑。

    其他转换

    那如果我们想要将普通幂转下降幂或上升幂转普通幂怎么办呢? 注意到这样一个事情:

    \[x^{\overline{n}}=(-1)^n(-x)^{\underline{n}}\\ x^{\underline{n}}=(-1)^n(-x)^{\overline{n}} \]

    所以显然就有:

    \[x^{\underline{n}}=\sum\limits_{k}(-1)^{n-k}{n\brack k}x^k\\ x^n=\sum\limits_{k}(-1)^{n-k}{n\brace k}x^{\overline{k}} \]

posted @ 2020-05-06 21:40  With_penguin  阅读(458)  评论(0编辑  收藏  举报