OI中组合数学公式和定理90%歼灭

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

组合数学

基础概念

加法和乘法原理
加法原理

同一步下的不同选择,可以通过累加得到方案数。

乘法原理

整个流程的方案数可以由每一步的方案数相乘得到。

有了加法原理和乘法原理,就可以解决一些没有选择导致分支的问题了。

例题1

有 nnn 个篮子,第 iii 篮子有 aiaia_i 有水果,每个水果各不相同,问每个篮子选出一个得到的水果的方案数。

解答:

用加法和乘法原理,那么每个篮子选出的方案数为 aiaia_i ,总共就是 ∏ai∏ai\prod a_i 种方案。

排列和组合
排列数

从 nnn 个不同元素中选出 mmm 个,按照一定顺序排列,简而言之就是选出一个数列的方案数。

Amn=n(n−1)(n−2)…(n−m+1)=n!(n−m)!Anm=n(n−1)(n−2)…(n−m+1)=n!(n−m)!A^m_n=n(n-1)(n-2)…(n-m+1)=\frac{n!}{(n-m)!}

组合数

从 nnn 个不同元素中选出 mmm 个的方案数,换句话就是选出一个集合的方案数。

Cmn=Amnm!=n!m!(n−m)!Cnm=Anmm!=n!m!(n−m)!C_nm=\frac{A_nm}{m!}=\frac{n!}{m!(n-m)!}
其实排列数可以看做在选出 mmm 个数后还有对这 mmm 个数做一个全排列,所以多一个 m!m!m!

因为组合数我们用得多一点,所以我们一般用二项式系数来表示组合数,也就是说:

Cmn=(nm)Cnm=(nm)C_n^m=\binom{n}{m}
然后定义一些离谱的情况: m>nm>nm>n 或者 m<0m<0m<0 时, (nm)=0(nm)=0\binom{n}{m}=0

多重组合数
多重组合数和多重集排列数

多重集合,也叫可重集。一个多重集合 S={a1⋅n1,a1⋅n2,…,am⋅nm}S={a1⋅n1,a1⋅n2,…,am⋅nm}S={a_1\cdot n_1,a_1\cdot n_2,…,a_m\cdot n_m} (ninin_i 表示元素个数, aiaia_i 表示元素)的排列数(也被称为多重组合数):

(nn1,n2,…,nm)=n!n1!n2!..nm!(nn1,n2,…,nm)=n!n1!n2!..nm!\binom{n}{n_1,n_2,…,n_m}=\frac{n!}{n_1!n_2!..n_m!}
相当于是所有数的全排列数再除去相同元素的全排列数。

顺便补充一嘴:

(nm)=(nn,n−m)(nm)=(nn,n−m)\binom{n}{m}=\binom{n}{n,n-m}

多重集组合数

一个多重集合 S={a1⋅n1,a1⋅n2,…,ak⋅nk}S={a1⋅n1,a1⋅n2,…,ak⋅nk}S={a_1\cdot n_1,a_1\cdot n_2,…,a_k\cdot n_k} 的组合数,就是从中选出 rrr 个,得到不同可重集的方案数。

这个怎么弄?先来个简单的的,我们使 r<nir<nir<n_i。

这个我们考虑用插板法来求。可以看做我们现在有 rrr 个小球,然后现在往里面插板来分组。

最初的时候,我们有 rrr 个球,那么我们有 r+1r+1r+1 个位置是可以插空的。当我们插入了一个板子之后,我们可以插入的位置就又多了一个,后面就同理了。

于是乘法原理加上除去板子的全排列可以得到答案:

(r+k−1)!r!(k−1)!=(k+r−1k−1)=(k+r−1r)(r+k−1)!r!(k−1)!=(k+r−1k−1)=(k+r−1r)\frac{(r+k-1)!}{r!(k-1)!}=\binom{k+r-1}{k-1}=\binom{k+r-1}{r}
现在考虑把 r<nir<nir<n_i 的限制拿掉,怎么做?

这个要容斥原理!但是在这篇博客里我们还没有学!超纲了,我们等会讲容斥的时候再说。

CF451E

不相邻排列

1→n1→n1\to n 个自然数中选出 kkk 个,使得他们互不相邻的方案数?

答案是 (n−k+1k)(n−k+1k)\binom{n-k+1}{k} ,相当于是留了 k−1k−1k-1 个空加在每两个被选择的位置中间。

组合恒等式
1.对称式

(nm)=(nn−m)(nm)=(nn−m)\binom{n}{m}=\binom{n}{n-m}
证明:

从组合意义上来说容易证明。因为你 nnn 中拿 mmm 个等价于有 n−mn−mn-m 个不拿。

2.二项式定理

(x+y)n=∑i=0n(ni)xiyn−i(x+y)n=∑i=0n(ni)xiyn−i(x+y)n=\sum_{i=0}n\binom{n}{i}xiy{n-i}
证明:

从组合意义来证明。

我们把 (x+y)n(x+y)n(x+y)^n 看作是有 nnn 个 (x+y)(x+y)(x+y) 相乘,那么得到一个 xayn−axayn−axay{n-a} 相当于是从 nnn 个 (x+y)(x+y)(x+y) 中选出 aaa 个 (x+y)(x+y)(x+y) 中的 xxx 相乘,那么结果的多项式中就有一项是 (na)xayn−a(na)xayn−a\binom{n}{a}xay{n-a} 。所以的这种项都满足这种情况,那么公式可得。

Q.E.D.

其实不一定要求必须是两元的,多元的也是同理。

然后我们可以得到多项式定理:

(x1+x2+…+xm)n=∑n1+n2+…+nm=n(nn1,n2,…,nm)xn11xn22…xnmm(x1+x2+…+xm)n=∑n1+n2+…+nm=n(nn1,n2,…,nm)x1n1x2n2…xmnm(x_1+x_2+…+x_m)^n=\sum_{n_1+n_2+…+n_m=n} \binom{n}{n_1,n_2,…,n_m}x_1{n_1}x_2{n_2}…x_m^{n_m}
证明:

同二项式定理证明,对于 xn11xn22…xnmmx1n1x2n2…xmnmx_1{n_1}x_2{n_2}…x_m^{n_m} 这一项的系数为 (nn1)(n−n1n2)…(n−n1−n2−…−nm−1nm)(nn1)(n−n1n2)…(n−n1−n2−…−nm−1nm)\binom{n}{n_1}\binom{n-n_1}{n_2}…\binom{n-n_1-n_2-…-n_{m-1}}{n_m} 。

展开发现可以抵消一些东西,于是上面的系数就等于:

n!n1!n2!..nm!=(nn1,n2,…,nm)n!n1!n2!..nm!=(nn1,n2,…,nm)\frac{n!}{n_1!n_2!..n_m!}=\binom{n}{n_1,n_2,…,n_m}
Q.E.D.

3.递推式1

(nk)=(n−1k−1)+(n−1k)(nk)=(n−1k−1)+(n−1k)\binom{n}{k}=\binom{n-1}{k-1}+\binom{n-1}{k}
帕斯卡定理,你也可以说是杨辉三角。我们知道 (x+y)n(x+y)n(x+y)^n 得到的多项式是系数满足杨辉三角的,我们知道了二项式定理的话,发现这个东西实际上是组合数,所以实际上是组合数的同层展开是满足杨辉三角的。但是证明的话显然不能这么证明。

证明:

我们一个数一个数看这个数是否选取,假设现在已经看了 n−1n−1n-1 个数,选了 xxx 个数。我们考虑如果得到 (nk)(nk)\binom{n}{k}

那么接下来这个数选或不选分别造成 111 和 000 的贡献,也就是说:

如果接下来这个数选,那么只有 x=k−1x=k−1x=k-1 的情况符合条件。否则只有 x=kx=kx=k 的情况符合条件。于是加法原理把两种情况的方案数加起来即可。

Q.E.D.

4.特殊的二项式定理

(n0)+(n1)+…+(nn)=2n(1)(1)(n0)+(n1)+…+(nn)=2n\binom{n}{0}+\binom{n}{1}+…+\binom{n}{n}=2^n \tag{1}
实际上是 (1+1)n(1+1)n(1+1)^n ,当然也可以从组合意义上证明。

∑i=0n(−1)i(ni)=n=0(2)∑i=0n(−1)i(ni)=[n=0]\sum_{i=0}n(-1)i\binom{n}{i}=[n=0]\tag{2}
实际上是 (1−1)n(1−1)n(1-1)^n ,我称之为第一类二项式反演。

5.递推式2

(nk)=nk(n−1k−1)(nk)=nk(n−1k−1)\binom{n}{k}=\frac{n}{k}\binom{n-1}{k-1}
按定义来就没了,简单提一下。

6.积式

(nr)(rk)=(nk)(n−kr−k)(nr)(rk)=(nk)(n−kr−k)\binom{n}{r}\binom{r}{k}=\binom{n}{k}\binom{n-k}{r-k}
定义展开左边上下分子分母同乘 (n−k)!(n−k)!(n-k)! 即可证明。

7.变下项求和式

∑k=0nk(nk)=n2n−1(1)(1)∑k=0nk(nk)=n2n−1\sum_{k=0}nk\binom{n}{k}=n2{n-1}\tag{1}
证明:

∑k=0nk(nk)=∑k=1nk(nk)=∑k=1nn(n−1k−1)=n∑i=0n−1(n−1i)=n2n−1∑k=0nk(nk)=∑k=1nk(nk)=∑k=1nn(n−1k−1)=n∑i=0n−1(n−1i)=n2n−1\sum_{k=0}nk\binom{n}{k}=\sum_{k=1}nk\binom{n}{k}\
=\sum_{k=1}nn\binom{n-1}{k-1}=n\sum_{i=0}{n-1}\binom{n-1}{i}\
=n2^{n-1}
Q.E.D.

∑k=0nk2(nk)=n(n−1)2n−2(2)(2)∑k=0nk2(nk)=n(n−1)2n−2\sum_{k=0}nk2\binom{n}{k}=n(n-1)2^{n-2}\tag{2}
证明和上面差不多,就不证了。其实你想拆可以一直这么拆。

8.变上项求和式

∑l=0n(lk)=(n+1k+1)∑l=0n(lk)=(n+1k+1)\sum_{l=0}^n{\binom{l}{k} }=\binom{n+1}{k+1}
证明:

采用组合分析。

指定 n+1n+1n+1 个数的集合 S={a1,a2,…,an+1}S={a1,a2,…,an+1}S={a_1,a_2,…,a_{n+1}}

先考虑右边的组合意义,即从 n+1n+1n+1 个数中选出 k+1k+1k+1 个。

左边的组合意义:相当于是总共 n+1n+1n+1 种不累加的情况的加法原理。

第一种:在指定必须选择 a1a1a_1 ,然后从剩余的 nnn 个数中选择 kkk 个,方案数 (nk)(nk)\binom{n}{k}

第二种:在指定必须不选择 a1a1a_1 而选择 a2a2a_2 ,然后从剩余的 n−1n−1n-1 个数中选择 kkk 个,方案数 (n−1k)(n−1k)\binom{n-1}{k}

第三种:在指定必须不选择 a1,a2a1,a2a_1,a_2 而选择 a3a3a_3 ,然后从剩余的 n−2n−2n-2 个数中选择 kkk 个,方案数 (n−2k)(n−2k)\binom{n-2}{k}

⋮⋮\vdots
第 n+1n+1n+1 种:在指定必须不选择 a1,a2,…,ana1,a2,…,ana_1,a_2,…,a_n 而选择 an+1an+1a_{n+1} ,然后从剩余的 000 个数中选择 kkk 个,方案数 (0k)(0k)\binom{0}{k}

总体的组合意义 ∑ni=0(ik)∑i=0n(ik)\sum_{i=0}^n{\binom{i}{k} } 等价于从 n+1n+1n+1 个数中选出 k+1k+1k+1 个,那么等式左右两边组合意义相同,等式成立。

Q.E.D.

9.积和式

∑k=0r(mk)(nr−k)=(m+nr),r≤min{n,m}∑k=0r(mk)(nr−k)=(m+nr),r≤min{n,m}\sum_{k=0}^r\binom{m}{k}\binom{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值