组合数学笔记

待更新


计数原理

加法原理

又称分类计数原理

完成一个工作共有\(n\)类方法。在第一类方法中有\(m_1\)种不同的方法,在第二类方法中有\(m_i\)种不同的方法,……,在第\(n\)类方法中有\(m_n\)种不同的方法,那么完成这个工作共有\(m_1+m_2+……+m_n\)种不同的方法。

乘法原理

又称分步计数原理

完成一件工作共需\(n\)个步骤,完成第一个步骤有\(m_1\)种方法,完成第二个步骤有\(m_2\)种方法,……,完成第\(n\)个步骤有\(m_n\)种方法,那么完成这个工作共有\(m_1\times m_2\times…\times m_n\)种方法。

排列组合

排列数

\(A_n^m\)表示从\(n\)个不同元素中依次取出\(m\)个元素排成一列,产生的不同排列的数量

\(A_n^m=\dfrac{n!}{(n-m)!}=n\times (n - 1) \times(n-2)\times…\times(n-m+1)\)

组合数

\(C_n^m\)\(\dbinom{n}{m}\)表示从\(n\)个不同元素种取出\(m\)个组成一个集合(不考虑顺序),产生的不同集合的数量

\(\dbinom{n}{m}=\dfrac{n!}{m!(n-m)!}=\dfrac{n\times(n-1)\times…\times(n-m+1)}{m\times(m-1)\times…\times2\times1}\)

组合恒等式

证明百年之后补

  • \(\dbinom{n}{m}=\dbinom{n}{n-m};\)
  • \(\dbinom{n}{m}=\dbinom{n-1}{m-1}+\dbinom{n-1}{m}\)
  • \(\sum\limits_{i=0}^{n}\dbinom{n}{i}=2^n;\)
  • $\sum\limits_{i=0}^{n}\dbinom{n}{i}[2\mid i]=\sum\limits_{i=0}^{n}[2\nmid i]=2^{n-1} $
  • \(k\)非负整数变量和为\(n\)的方案数(插板法):\(\dbinom{n+k-1}{k-1}\)
  • \(\sum\limits_{i=0}^m\dbinom{n+i}{n}=\dbinom{n+m+1}{m}\)
  • \(\sum\limits_{i=m}^n\dbinom{i}{m}=\dbinom{n+1}{m+1}\)
  • \(\dbinom{n}{m}\dbinom{m}{k}=\dbinom{n}{k}\dbinom{n-k}{m-k}\)
  • \(\sum\limits_{i=0}^k\dbinom{n}{i}\dbinom{m}{k-i}=\dbinom{n+m}{k}\)

二项式定理

\((x+y)^n=\sum\limits_{k=0}^n\dbinom{n}{k} x^ky^{n-k}\)


自然数幂之和

\[S_k(n)=\sum\limits_{i=1}^ni^k \]

小结论

\(S_k(n)\)是关于\(n\)\(k+1\)次多项式。

归纳&&证明

\(k\)归纳:

  1. \(k=0,S_k(n)=n\),是关于\(n\)的一次多项式
  2. \(k\leq d-1\),是关于\(n\)\(d\)次多项式
    前置:谔项式定理
    \(\ \ \ (i+1)^{d+1}-i^{d+1}\\=\sum\limits_{j=0}^{d+1}\dbinom{d+1}{j}i^j-i^{d+1}\\=\sum\limits_{j=0}^d\dbinom{d+1}{j}i^j\)
    然而上面这些并没有用,这样并不能求出\(S_k(n)\)的值,所以考虑再加一层求和符号(因为可以交换/cy)
    \(\ \ \ \sum\limits_{i=1}^{n}((i+1)^{d+1}-i^{d+1})\\=\sum\limits_{i=1}^n\sum\limits_{j=0}^d\dbinom{d+1}{j}i^j\\=\sum\limits_{j=0}^d\dbinom{d+1}{j}\sum\limits_{i=1}^ni^j\\=\sum\limits_{j=0}^d\dbinom{d+1}{j}S_j(n)\)
    上面那个\(\sum\limits_{i=1}^{n}((i+1)^{d+1}-i^{d+1})\)其实又等于\((n+1)^{d+1}-1\)
    所以现在我们就得到了\((n+1)^{d+1}-1=\sum\limits_{i=0}^d\dbinom{d+1}{i}S_i(n)\)
    \(S_d(n)\)提出来再除一下,胡乱化一下就能发现\(S_d(n)\)的确是\(n+1\)次的多项式……得证(因为懒所以不想写了,而且是小学知识……

求法

暴力

\(O(n\log k)\)
rank1,呼呼呼,好快

拉格朗日插值

待补充

对于\(k\)次多项式函数\(\mathbf F\)以及\(k+1\)个点值\((x_0,y_0),(x_1, y_1),...,(x_k, y_k)\),有\(\mathbf F(x)=\sum\limits_{i=0}^jy_i\prod\limits_{i\ne j}\dfrac{x-x_j}{x_i-x_j}\)

可以做到\(O(k\log k)\)

局限性:模数必须是大于\(n\)的质数

斯特林数

\(S_k(n)=\dfrac{(n+1)^{\underline{k+1}}}{k+1}-\sum\limits_{i=0}^{k-1}(-1)^{k-i}\cdot\begin{bmatrix}k\\i\end{bmatrix}\cdot S_i(n)\)

证明

一个组合恒等式(先不讲为啥):

\[n^{\underline{k}} = \sum_{i=0}^{k}(-1)^{k-i}{ \left[{\begin{matrix}k\\i\end{matrix}}\right]}n^{i} \]

其中\(n^{\underline k}\)表示\(n\)\(k\)次下降幂
我们一般的\(n^k\)\(k\)\(n\)相乘,但是这里是每次乘都减一
展开就是\(n\times(n-1)\times(n-2)…\times(n-k+1)\)

\(i=k\) 时,有 \((-1)^{k-i} \begin{bmatrix}k\\i\end{bmatrix} n^i=n^k\),则

\[n^k = n^{\underline{k}} - \sum\limits_{i=0}^{k-1}(-1)^{k-i}{ \left[{\begin{matrix}k\\i\end{matrix}}\right]}n^{i} \]

是不是想到了什么?
没错,我们可以把\(1\)\(n\)\(k\)次方求和,显然这就是\(S_k(n)\),展开式子就是

\[S_k(n) = \sum_{i=1}^{n}i^k = \sum_{i=1}^{n}\left({i^{\underline{k}}-\sum_{j=0}^{k-1}(-1)^{k-j}{ \left[\begin{matrix}k\\j\end{matrix}\right]}i^j}\right) \]

显然的想法拆开求和符号。
对于第一项,转化为组合数。
使用组合恒等式合并,再展开组合数,有:

\[\begin{aligned} &\sum\limits_{i=1}^{n}i^{\underline{k}}\\ =&k!\sum_{i=1}^{n}\dfrac{i^{\underline{k}}}{k!}\\ =&k!\sum_{i=1}^{n}{\left(\begin{matrix}i\\k\end{matrix}\right)}\\ =&k!{\left(\begin{matrix}n+1\\k+1\end{matrix}\right)}\\ =&\dfrac{(n+1)^{\underline{k+1}}}{k+1} \end{aligned}\]

对于第二项,只有 \(i^j\)\(i\) 有关,交换求和符号,有:

\[\begin{aligned} &\sum_{j=0}^{k-1}(-1)^{k-j}{ \left[\begin{matrix}k\\j\end{matrix}\right]}\sum_{1}^{n}i^j \\= &\sum_{i=0}^{k-1} \cdot { \left[{\begin{matrix}k\\i\end{matrix}}\right]\,} \cdot S_i(n) \end{aligned}\]

这样就得到了上面的式子。

摆脱了质数的限制,时间复杂度\(O(k^2)\)

伯努利数 伯努利多项式

???果断抄式子走人

先求伯努利数,暴力算暴力算暴力算,多项式求逆

他们在说什么?不知道,走了

灾难始终慢我一步

\(\dfrac{x}{e^x-1}=\sum\limits_{i=0}^{\infty}\dfrac{B_i}{i!}x^i\)

\(\sum\limits_{i=0}^\infty \dfrac{\large\beta_i(t)}{i!}\cdot x^i=\dfrac{x}{e^x-1}\cdot e^{tx}\)

\(S_k(n)=\dfrac{1}{k+1}\sum\limits_{i=0}^k\dbinom{k+1}{i}\cdot(n+1)^i\cdot B_{k+1-i}\)


斯特林数

第一类斯特林数

定义

\(\begin{bmatrix}n\\m\end{bmatrix}\)

表示把\(n\)个数分入\(m\)个非空环排列的方案数

假设有三个数\(1,2,3\),要组成\(1\)个圆排列,因为是在一个圆上排列,所以\(1,2,3\)这个排列和\(3,1,2\)这个排列是一样的

递推公式

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

如何得出?

考虑最后一个放进去的数有几种放的方法:

  1. 新增一个圆排列
    这样的方案就是\(\begin{bmatrix}n-1\\m-1\end{bmatrix}\),意思是把前面\(n-1\)个数放到\(m-1\)个圆排列里,然后这一个数独成一个圆排列
  2. 插入到\(n-1\)个数中的一个的后面
    这样的方案是\((n-1)\cdot\begin{bmatrix}n-1\\m\end{bmatrix}\)
    总方案数就是两种加起来

第二类斯特林数

定义

\(\begin{Bmatrix}n\\m\end{Bmatrix}\)

表示把\(n\)个数分入\(m\)个非空集合的方案数

一般如果不特殊强调,集合都是不可以区分的,什么意思呢?

还是假设我们有三个数\(1,2,3\),要把他们放到两个集合中,那么\(\{1,2\},\{3\}\)\(\{3\},\{1,2\}\)这两种分法是一样的,也就是说集合是没有先后顺序这一说的

递推公式

\[\begin{Bmatrix}n\\m\end{Bmatrix}=\begin{Bmatrix}n-1\\m-1\end{Bmatrix}+m\cdot\begin{bmatrix}n-1\\m\end{bmatrix} \]

如何得出?

我们知道,这是要把\(n\)个数放到\(m\)个集合中,还是考虑最后一个放进去的数有几种放的方法

  1. 独成一个集合
    这样的方案就是\(\begin{Bmatrix}n-1\\m-1\end{Bmatrix}\),意思是把前面\(n-1\)个数放到\(m-1\)个集合里,然后这一个数独成一个集合
  2. 塞到已存在的集合里
    如果是这样的话,那么前面的\(n-1\)个数一定已经组成了\(m\)个集合,而这最后一个数可以往其中任何一个集合里放,所以就是\(m\cdot\begin{Bmatrix}n-1\\m\end{Bmatrix}\)

总的方案数就是加起来

通项公式

\[\begin{Bmatrix}n\\m\end{Bmatrix}=\dfrac{1}{m!}\sum\limits_{k=0}^m(-1)^k\dbinom{m}{k}(m-k)^n \]

考虑把集合无标号强行当成有标号来做。
有标号的方案数\(\div\ m!\)得出的就是无标号的方案数
因为在一个合法的方案里,是不会存在空集合的,一个无标号的方案就可以对应\(m!\)个有标号的方案数
所以得出有标号的方案数再\(\div\ m!\)就可以得出无标号的方案数
因此问题就转化为了如何求\(m\)个非空有标号的集合的方案数

考虑容斥来摆脱非空的限制。
考虑至少有\(k\)个空集合时的方案数
\(k\)个必空集合的方案数为\(\dbinom{m}{k}\)
剩下的\(m-k\)个集合中要放\(n\)个数字,每个数字可以有\(m-k\)种选法,这样的方案是\((m-k)^n\)

因此至少有\(k\)个空集合时的方案数为\(\dbinom{m}{k}(m-k)^n\)
乘上容斥系数,再除以\(m!\),就可以得出上面的式子了

容斥原理

并集

假设有\(n\)个满足全集\(U\)的性质相同的集合\(A_1,A_2,…,A_n\),那么他们的并集种的元素个数为:

\[\left|\bigcup\limits_{i=1}^{n}A_i\right|=\sum\limits_{k=1}^n(-1)^{k+1}\left(\sum\limits_{1\leq i_1\leq…i_k\leq n}|A_{i_1}\cap…\cap A_{i_k}|\right) \]

证明

证明此式,其实就是要证明每个元素仅出现了一次

考虑一个处于\(\bigcup\limits_{i=1}^{n}A_i\)中的元素\(x\),他所属\(m\)个集合\(S_1,S_2,...S_m\),现在要统计他在并集中出现的次数。

  1. 选取一个集合时,\(x\)在其中出现的次数为\(\dbinom{m}{1}=m\)

  2. 选取两个集合时,两个集合的贡献为两个集合并集中\(x\)出现的次数的相反数

    这样的贡献是就是\(-\dbinom{m}{2}\)

  3. 选取三个集合时,根据上述方法贡献为\(\dbinom{m}{3}\)

  4. 继续根据上述方法进行,当选取的集合树\(>n\)时,\(x\)不会在并集中出现,因此没有贡献

\(x\)出现的总次数为:

\[\begin{aligned}cnt=&\dbinom{m}{1}-\dbinom{m}{2}+\dbinom{m}{3}-…+(-1)^{m-1}\dbinom{m}{m}\\=&\sum\limits_{i=1}^m(-1)^{i-1}\dbinom{m}{i}\end{aligned} \]

发现这玩意儿和二项式定理很像,试着化一化看看能不能化成二项式定理

\[\begin{aligned}cnt=&\sum\limits_{i=1}^{m}(-1)^{i-1}\dbinom{m}{i}\\=&-\sum\limits_{i=1}^{m}(-1)^i\dbinom{m}{i}\\=&\dbinom{m}{0}-\dbinom{m}{0}-\sum\limits_{i=1}^{m}(-1)^{i}\dbinom{m}{i}\end{aligned} \]

化到这一步发现右边两项之和就是二项式定理的式子了,可以进一步转化

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

所以每个在\(\bigcup\limits_{i=1}^{n}A_i\)中的元素都只出现了一次,合并起来就是并集的元素个数,得证

交集

用全集减去补集的并集即可得出,那么显然也为 补集的并集的 补集

\[\left|\bigcap\limits_{i=1}^{n}A_i\right|=|U|-\left|\bigcup\limits_{i=1}^{n}\overline{A_i}\right|=\overline{\bigcup\limits_{i=1}^n\overline{A_i}} \]

拓展——\(\min-\max\)容斥

给定全序集合\(S\),设\(\max\{S\}\)\(S\)中的最大值,\(\min\{S\}\)\(S\)中的最小值,则:

\[\begin{aligned} \max \{S\} &= \sum_{T\subseteq S}(-1)^{|T|-1} \min \{T\}\\ \min \{S\} &= \sum_{T\subseteq S}(-1)^{|T|-1} \max \{T\} \end{aligned} \]

\(\min-\max\)容斥对于期望同样满足,所以可以很方便地解决一些概率和期望问题

证明见https://www.cnblogs.com/butterflydew/p/10457362.html

写在最后

\(\texttt{gyh}\)也太神了吧

为什么我这么菜/kk

你可能感兴趣的:(组合数学笔记)