「笔记」组合数学
组合数学
- 组合数学
- 写在前面
- 计数原理
- 组合问题分类
- 排列
- 组合
- Lucas 定理
- 组合数学的一些思想方法
- 几个问题
- 组合数及其相关性质
- \(C_{n+m}^{n} = C_{n+m}^m\)
- \(C_{n}^{m} = C_{n - 1}^{m - 1} + C_{n - 1}^{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}\)
- \(C_{n}^{0} + C_{n}^{1} + ... + C_{n}^{n} = 2^n\)
- \(C_{n}^{0} - C_{n}^{1} + C_{n}^{2} - ... = 0\)
- \(C_{r}^{r} + C_{r+1}^{r} + ... + C_{n}^{r} = C_{n + 1}^{r + 1}\)
- 二项式定理
写在前面
题做不动了,来写点笔记
计数原理
抽屉原理
把 \(n + 1\) 件物品放入 \(n\) 个抽屉里,至少有一个抽屉放了 \(2\) 个物品
这不是很显然?
容斥原理
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。——百度百科
类似于去交集并集之类的。功能很明确,计数时没有重复没有遗漏,结合实际问题可能要复杂些,脑子不够用
组合问题分类
具体分为四种:
- 存在性问题:判断满足某种条件的情况或状态是否存在
- 计数性问题:存在多少种满足某种条件的情况或状态
- 构造性问题:如果以判断出满足某种条件的状态是存在的,那么如何构造出来
- 最优化问题:找出某种评价标准下的最佳(或较佳)构造方案
排列
\(n\) 个物品中选 \(k\) 个物品的方案数,(先后顺序不同为两种方案)
圆排列
\(n\) 个物品中选 \(k\) 个不分首尾的围成一个圆圈
方案数为:
组合
\(n\) 个物品中选 \(k\) 个,(先后顺序不同为一种方案)
定义式:
或者
Lucas 定理
就是一个公式:
也可以写作:
其中 \(Lucas(n, 0) = 1\) ,利用这个在递归的时候返回即可
一般应用于 \(n\) 和 \(m\) 很大的时候,可以大大简化运算,但要注意 \(p\) 必须是质数
如果模数不是很大,可以预处理出 \(1 \sim mod - 1\) 的阶乘和逆元进行优化
组合数学的一些思想方法
插板法
一个典型的例子
把 \(n\) 个小球放进 \(k\) 个箱子里,求有多少种放法
- 空隙间必须有值的情况(每个箱子里至少有一个球):
考虑将 \(n\) 个小球排成一列,每两个小球间会有一个空隙,一共有 \(n - 1\) 个空隙。把箱子看成板子,插入空隙里,显然只要插 \(k - 1\) 个板子就能把小球分成 \(k\) 份,所以答案为
- 空隙间可以为空的情况(箱子里可以不放球):
与上面不同的是,两个板子可以同时插在一个地方,所以相当于多了 \(k\) 个可以插的地方,所以答案为:
几个问题
Question 1
有 \(n\) 个不同元素,选 \(r\) 个,可重复选,求方案数
求证: \(ans = C_{n + r - 1}^{r}\)
思路:
设当 \(n\) 个元素中选 \(r\) 个不重复的元素时
那么当从 \(n\) 个元素中选 \(r\) 个可重复的元素时
设 \(y_i = x_i + i - 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 \]
解:
然后就做完了。
这样做的意义是啥?
这就是在前 \(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}\)
暴力推导:
对左式进行通分合并就可以得到右式了
过程也很简单,在这里就不赘述了
实际意义:从 \(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}\)
或者写成这样的形式:
左式就相当于每次确定 \(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 \]