「笔记」组合数学

组合数学

写在前面

题做不动了,来写点笔记

计数原理

抽屉原理

\(n + 1\) 件物品放入 \(n\) 个抽屉里,至少有一个抽屉放了 \(2\) 个物品

这不是很显然?

容斥原理

在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。——百度百科

类似于去交集并集之类的。功能很明确,计数时没有重复没有遗漏,结合实际问题可能要复杂些,脑子不够用

组合问题分类

具体分为四种:

  • 存在性问题:判断满足某种条件的情况或状态是否存在
  • 计数性问题:存在多少种满足某种条件的情况或状态
  • 构造性问题:如果以判断出满足某种条件的状态是存在的,那么如何构造出来
  • 最优化问题:找出某种评价标准下的最佳(或较佳)构造方案

排列

\(n\) 个物品中选 \(k\) 个物品的方案数,(先后顺序不同为两种方案)

\[P(n, k) = \frac{n!}{(n - k)!} \]

圆排列

\(n\) 个物品中选 \(k\) 个不分首尾的围成一个圆圈

方案数为:

\[\frac{P(n, k)}{k} = \frac{n!}{(n - k)! \times k} \]

组合

\(n\) 个物品中选 \(k\) 个,(先后顺序不同为一种方案)

定义式:

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

或者

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

Lucas 定理

就是一个公式:

\[C^m_n = C_{n/p}^{m/p} \times C_{n \ mod \ p}^{m \ mod \ p} \]

也可以写作:

\[Lucas(n, m) = Lucas(n / p, m / p) \times C_{n \ mod \ p}^{m \ mod \ p} \]

其中 \(Lucas(n, 0) = 1\) ,利用这个在递归的时候返回即可

一般应用于 \(n\)\(m\) 很大的时候,可以大大简化运算,但要注意 \(p\) 必须是质数

如果模数不是很大,可以预处理出 \(1 \sim mod - 1\) 的阶乘和逆元进行优化

例题P3807【模板】卢卡斯定理

组合数学的一些思想方法

插板法

一个典型的例子

\(n\) 个小球放进 \(k\) 个箱子里,求有多少种放法

  • 空隙间必须有值的情况(每个箱子里至少有一个球):

考虑将 \(n\) 个小球排成一列,每两个小球间会有一个空隙,一共有 \(n - 1\) 个空隙。把箱子看成板子,插入空隙里,显然只要插 \(k - 1\) 个板子就能把小球分成 \(k\) 份,所以答案为

\[C_{n - 1}^{k - 1} \]

  • 空隙间可以为空的情况(箱子里可以不放球):

与上面不同的是,两个板子可以同时插在一个地方,所以相当于多了 \(k\) 个可以插的地方,所以答案为:

\[C_{n + k - 1}^{k - 1} \]

几个问题

Question 1

\(n\) 个不同元素,选 \(r\) 个,可重复选,求方案数
求证: \(ans = C_{n + r - 1}^{r}\)

思路:

设当 \(n\) 个元素中选 \(r\) 个不重复的元素时

\[1 \le x_1 < x_2 < ... < x_r \le n \]

那么当从 \(n\) 个元素中选 \(r\) 个可重复的元素时

\[1 \le x_1 \le x_2 \le ... \le x_r \le n \]

\(y_i = x_i + i - 1\)

那么上式可表示为

\[1 \le y_1 < y_2 < y_3 < ... < y_r \le n + r - 1 \]

发现与第一个不等式形式相同,所以答案类似是 \(C_{n + r - 1}^{r}\)

因为对于每个 \(x_i\) 都有唯一的 \(y_i\) 与之对应,所以问题的答案也为 \(C_{n + r - 1}^{r}\)

证毕。

Question 2

\(n\) 个元素,从中选 \(r\) 个不相邻的元素,求方案数
求证: \(ans = C_{n - r + 1}^{r}\)

思路同 Question 1, 把 \(y_i = x_i + i - 1\) 改为 \(y_i = x_i - i + 1\),用相同的思路去推导即可

Question 3

\[\sum_{k=1}^{n}(C_{n}^{k})^2 \]

解:

\[\begin{alignedat}{3} \sum_{k=1}^{n}(C_n^k)^2 & = \sum_{k=1}^{n}C_{n}^{k} \times C_{n}^{k} \\ & = \sum_{k=1}^{n}C_{n}^{k} \times C_{n}^{n - k} \\ & = C_{2n}^{n} \\ \end{alignedat} \]

然后就做完了。

这样做的意义是啥?
这就是在前 \(n\) 个元素中选 \(k\) 个,在后 \(n\) 个元素中选 \(n - k\) 个(选 \(k\) 个和选 \(n -k\) 个是一个意思)的方案数

为什么 \(C_{2n}^{2k}\) 不对?
因为这样你无法确定在前 \(n\) 个元素中选择了几个,在后 \(n\) 个元素中选择了几个

组合数及其相关性质

\(C_{n+m}^{n} = C_{n+m}^m\)

实际意义:从 \(n+m\) 个元素中选 \(n\) 个元素的方案数与选 \(m\) 个元素 剩下 \(n\) 个元素的方案数相同

\(C_{n}^{m} = C_{n - 1}^{m - 1} + C_{n - 1}^{m}\)

暴力推导

\[\frac{(n - 1)!}{(m-1)! (n - m)!} + \frac{(n - 1)!}{m! (n - m - 1)!} = \frac{n!}{m!(n - m)!} \]

对左式进行通分合并就可以得到右式了

过程也很简单,在这里就不赘述了

实际意义:从 \(n\) 个里面选 \(m\) 个,对于最后一个元素,我们考虑两种情况:选或不选。如果选,那么还要在剩下的 \(n - 1\) 个元素中选择 \(m - 1\) 个元素;如果不选,那么还要在剩下的 \(n - 1\) 个元素中选择 \(m\) 个元素。
两种情况是并列的,因此把两种情况的方案数加起来即可。

其实这个式子还有另外一个名字:组合数的递推式。
也就是你可以从 \(C_{1}^{1}\) 采用递推的方式推到 \(C_{n}^{m}\)
如果你把整个递推出来的三角形列出来的话,会发现这是一个杨辉三角
各位有兴趣的话可以稍微在打草纸上一划,就很容易看出

\(C_{n+r+1}^{r} = C_{n+r}^{r} + C_{n + r-1}^{r-1} + ... + C_{n}^{0}\)

这个式子其实可以从上面那个式子进行更进一步的推导推出来

即来考虑更多的元素是否选择的情况

\(C_{n}^{l}C_{l}^{r} = C_{n}^{r}C_{n-r}^{l-r}\)

实际意义:在 \(n\) 个元素中先选 \(l\) 个元素,再在这 \(l\) 个元素中选 \(r\) 个元素的方案 等于 在 \(n\) 个元素中先选 \(r\) 个元素,再在剩下的 \(n - r\) 个元素中选择 \(l - r\) 个元素的方案。因为两次操作是递进的(或者说有先后的),所以计算的时候是相乘的形式,也就是上面的捏个等式

\(C_{n}^{0} + C_{n}^{1} + ... + C_{n}^{n} = 2^n\)

含义\(n\) 个元素,从中选任意个元素的方案数。

考虑对每个元素选或不选,对于每个元素都有两条路可走,所以 \(n\) 个元素随便选或不选的方案数为 \(2^n\)

另一个含义:把 \(n\) 个元素看做一个长度为 \(n\) 的 01 串,那么这个串中的 \(1\) 的个数对应着每种方案(或是 \(0\) 的个数),又因为这个 01 串能表示的数有 \(0 \to 2^n - 1\)\(2^n\) 个数,所以上式的方案数为 \(2^n\).

\(C_{n}^{0} - C_{n}^{1} + C_{n}^{2} - ... = 0\)

一种理解方式:上面的式子可以看做从 \(n\) 个元素中选 偶数 个和选 奇数 个的方案是一样的。考虑一个新加的东西选或不选,如果选的话,肯定会由原来的 奇数个 变成 偶数个 (或者 偶数个 变成 奇数个);如果不选的话,就不发生改变。因为两种情况是等概率出现的,因此从 \(n\) 个元素中选 奇数个 和选 偶数个 的方案数相同

\(C_{r}^{r} + C_{r+1}^{r} + ... + C_{n}^{r} = C_{n + 1}^{r + 1}\)

或者写成这样的形式:

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

左式就相当于每次确定 \(i+1\) 必须选,然后从前 \(i\) 个里面选 \(k\) 个的方案数,显然和右式意义相同。

(感谢 uoj 群友答疑/bx)

二项式定理

\[(x+y)^n = \sum_{i = 0}^{n}C_{n}^{i} x^i y^{n-i} = \sum_{i = 0}^{n}C_{n}^{i} x^{n-i} y^i \]

posted @ 2021-05-02 21:59  Suzt_ilymtics  阅读(415)  评论(6编辑  收藏  举报