初等组合计数小结

基础知识点:

加法原理:

具有性质1的事件有a件,具有性质2的事件有b件,则有性质12的事件有\(a+b\)件。

乘法原理:

具有性质1的事件有a件,具有性质2的事件有b件,则有性质12的事件有\(a\times b\)件。

排列与组合:

组合意义

即一个公式的实际化的解释

排列公式

\[p_n^r=\frac{n!}{(n-r)!} \]

{从n个有标号中的数中取出r个,进行全排列}

证明:
选第一个数有n种选择,第二个数有n-1种选择...,以此类推,第r个数有(n-r+1)种选择,故\(p_n^r=n\times (n-1) \times (n-2)...\times (n-r+1)=\frac{n!}{(n-r)!}\)
得证

可重全排列

\[p=\frac{n!}{c_1!\times c_2! \times...\times c_m!} \]

{把n个有标号的数进行全排列,其中有\(c_1,c_2...c_m\)个数标号相同}

证明:

只考虑取出n个数进行全排列,先不考虑有重复,这时方案数为

\[n! \]

而此时,这\(c_i\)个数同时也会进行全排列,故重复\(ci!\)次,故得证。

组合公式

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

{从n个有标号的数中取出r个数来}

证明:

  • 理解1

从n个数中间取出r个数来进行全排列,有

\[P_n^r=\frac{n!}{(n-r)!} \]

而此时因为全排列重复r次,故不进行全排列(除掉全排列方案数),即可得到组合公式

\[C_n^r=\frac{P_n^r}{r!}=\frac{n!}{(n-r)!\times r!} \]

  • 理解2

考虑分子为n个数的全排列,而分母的解释为排列的过程,有r个元素重复和n-r个元素重复,而重复的元素去了重正好就是组合方案。

允许重复的组合

\(C_{n+r-1}^{r}\){从n个有标号元素中允许重复地选出r个}

证明:

1.全排列划分模型:
考虑每个元素可以重复选择,过于复杂,但是无论如何只要选出r个元素,故对r个元素下手,问题也就变成了这r个元素如何分成n种,于是转换成经典模型,将r个0和n-1个1进行全排列,而n-1个1正好将r个0分成n个部分,每个部分对应一种划分,所以与原问题一一对应。
故问题变为求r个0与n-1个1进行全排列方案数,不难由可重全排列知道,方案数为

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

又注意到分母两式之和为分子之和,有

\[\frac{(n+r-1)!}{r!(n-1)!}=C_{n+r-1}^{r} \]

得证

2.变标号

考虑只要证明\(c_{n+r-1}^{r}\)与从n个有标号数中允许重复的数一一对应即可。
所以不妨设n个数的标号从小到大\(1-n\),而设选出来的数为\(a_1,a_2,...,a_r\),因为可以重复,必然有
\(a_1\leq a_2\leq,...,\leq a_r\)
而要让其对应于\(c_{n+r-1}^{r}\),不妨对每个选出来的标号按一定顺序加上一些值,于是有

\[a_1< a_2+1< a_3+2 <,...,< a_r+r-1 \]

此时各个选出来的数互不相同,对应了\(c_{n+r-1}^{r}\)的一种方案.
而为了证明一一对应,从\(c_{n+r-1}^{r}\)角度来看,设选出来的数
\(b_1<b_2<b_3<...<b_r\),继续采取变标号的方法,于是有

\[b_1\leq b_2-1\leq b_3-2\leq...\leq b_r-r+1 \]

于是两者一一对应,故得证。

圆周排列:

从n个有标号元素中取出r个元素进行圆周排列,方案数为:

\[Q_n^r=\frac{p_n^r}{r} \]

证明:
对于一个圆周排列的每一种方案,被排列重复了r次,故得证。

常用性质:

  1. 补集公式

\[C_n^r=C_n^{n-r} \]

证明:该情况对应于那些元素不选,故得证。

  1. 递推公式
  • \[C_n^r=C_{n-1}^{r}+C_{n-1}^{r-1} \]

证明:对于一个元素考虑,可以选择必然不选和选两种状态,故划分了问题。

  • \[C_n^r=C_n^{r-1}\times \frac{n-r+1}{r} \]

证明:拆式易证可得。

  1. 上标公式

\[C_n^0+C_n^1+...+C_n^n=\sum_{i=0}^{n}C_n^i=2^n \]

证明:该情况对应与一个元素要么选,要么不选,故得证。

\[C_n^0-C_n^1+...+(-1)^nC_n^n=\sum_{i=0}^{n}(-1)^iC_n^i=0 \]

证明:(注:先看完下方二项式定理在来看)

\[0^n=(1-1)^n=\sum_{i=0}^{n}(-1)^iC_n^i \]

  1. 组合与平面直角坐标系从(0,0),只能往上走和往左走的,到(m,n)方案数的关系。

\[C_{n+m}^n \]

证明:往上走和往右走可以看做0,1,不难得知组成序列长度为n+m,
而可以看成是这n+m个空中选出n个空填上1或者0的方案数。

  1. 在平面直角坐标系上,从(0,0)出发,每次只能选择向上走和向右走,走到(n,m)(n<m),使走的点横坐标一定小于纵坐标的的方案数为:

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

转换问题,n<m即不触碰y=x这条线,固然我们不好表现所有方案,所以考虑补集,因为发现从(1,0)出发一定不满足条件,而从(1,0)出发的路径经过y=x对称后与从(0,1)出发的路径一一对应,于是合法方案数为

\[(0,1)\rightarrow(n,m)-(1,0)\rightarrow(n,m)= \]

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

  1. 下标公式

\[C_r^r+C_{r+1}^r+C_{r+2}^r+...+C_n^r=C_{n+1}^{r+1} \]

{单递增形式}

or

\[C_r^0+C_{r+1}^1+C_{r+2}^2+...+C_n^{n-r}=C_{n+1}^{r+1} \]

{双递增形式}

证明:

考虑要证明与之一一对应,先要理解右式组合意义,从n+1个数中选出r+1个,它与所有组合数的关系,在于少选了一个数,也就是有了一个数已经选择,它与\(C_r^r\)的关系,不难看出,是有少了n-r+1个数的选择。

于是不难得知,问题的划分在于有一个数已经选,于是设可选下标为\(a_1,a_2,...,a_{n+1}\),不妨先假设第一个数已经选了,自然就只有\(C_{n}^{r}\),而第二个数已经选了,那么第一个数就不能选了,所以方案为\(C_{n-1}^{r}\),以此类推,...,第\(n+1-r\)个数已经选了,后面的都不能选了,所以为\(C_r^r\),因此单递增形式得证,利用补集公式,双递增形式也得证。

二项式定理

\[(a+b)^n=\sum_{i=0}^{n}C_n^i\times a^i \times b^{n-i} \]

证明:与组合一一对应,故得证。

用途:拆分式子,证明组合关系。

Lucus定理

\(C_n^r\equiv C_{n/p}^{r/p}\times C_{n\%p}^{r\%p}(mod \ p)\){p是质数}

证明:
考虑组合数不好证明,于是想到二项式定理这一工具,而出来的数字里面存在余数,故考虑余数的定义,于是设

\[\left\{\begin{array}{c}r=k_1\times p+r_1\\n=k_2\times p+r_2\end{array}\right. \]

因为证明的右式中n在下方,于是设

\[\begin{array}{c}(x+1)^n\equiv(x+1)^{k_2\times p+r2}\equiv [{(x+1)^p}]^{k_2}\times(x+1)^{r_2}[a]\equiv\\(x^p+1)^{k_2}\times (x+1)^{r_2}\equiv\sum_{i=0}^{k_2}(C_{k_2}^i\times x^{pi})\sum_{j=0}^{r2}(C_{r2}^{j}\times x^j)\\(mod\ p) \end{array} \]

注释:

[a]注意到p是质数于是,我们联想费马小定理.

[b]

\[\begin{array}{c}(x+1)^p\equiv x+1(mod \ p)\\x^p\equiv x(mod\ p)\\ \Downarrow\\(x+1)^p\equiv x^p+1(mod\ p)\end{array} \]

接下来,我们回到\(r=k_1\times p+r_1\),注意到当且仅当\(i=k_1,j=r_1\),可以保证有次数\(x^{k_1\times p+r_1}\),而对于最右式,拆开也只有唯一一项有\(x^{k_1\times p+r_1}\),故有

\[C_n^r\equiv C_{n/p}^{r/p}\times C_{n\%p}^{r\%p}(mod \ p) \]

{p是质数}

Exlucus

当p不为质数时,它必然为合数,但是我们只能解决p为质数的问题,
所以考虑拆分p,不妨设:

\[p=p_1 \times p_2 \times ... p_m \]

注意到其中系数全为1,我们考虑分别用lucus求出它们的余数,
问题变成我们如何合并这些数,变为%p的余数,注意到\(p=p_1 \times p_2 \times ... p_m\)之间是互质的,而且要合并,
于是联想到中国剩余定理(crt),故把求出来的值作为已知数列出方程,求解即为答案

证明正确性:

\[\left\{\begin{array}{c}x=a_1(mod\ p_1)\\x=a_2(mod\ p_2)\\x=a_3(mod\ p_3)\\.\\.\\.\\x=a_n(mod\ p_n)\end{array}\right. \]

\[\left\{\begin{array}{c}x=a_{n+1}(mod\ p)\end{array}\right. \]

设有x,容易知道上面方程通解为\(x+k\times p\),而下面方程通解也如此,故解集相同,可以合并。

ExExlucus

\[p=p_1^{c_1} \times p_2^{c2} \times ... p_m^{c_m} \]

由其中两两互质考虑CRT合并,问题也就变成求出
\(C_n^r\%p_i^{c_i}\),而显然\(p_i^{c_i}\)没有再拆解的意义了,与是考虑拆解组合数。

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

现在问题变成快速求阶乘,问题在于分母式子可能不存在逆元,故不能
直接%了以后求,于是想是否能够把所有与\(p_i^{c_i}\)不互质的数先提出来,对于\(n!\),不难知道,只提出来一个数,总共有\(\frac{n}{p_i}\)
,而剩下的能做贡献的只有\([\frac{n}{p_i}]!\),对此进行递归出来即可。

接下来问题在与如何处理不是\(p_i\)的倍数的数,自然不能全部算,所以考虑问题是否有重复性,优先考虑循环节,显然发现数好像被它切成好几截,而每一截余数又相同,故对此进行处理出一部分,其他循环节直接调用结果即可,剩余的循环节部分,暴力预处理即可。

Catalan数列

给定n个0和n个1全排列,当其任意前缀中0的个数总多于1的个数,方案数为

\[\frac{C_{2n}^{n}}{n+1} \]

证明:

显然直接求一次满足所有条件方案数很难做,故考虑不成立的方案数,用总方案数减去即可,当其方案中不满足条件,总存在一个位置2p+1,使得它的前缀1的个数为p+1,0的个数为p,于是现在考虑寻找谁与其对应。
因为是0,1串,考虑将其2p+2后面取反,此时不难得知整个序列0的个数现在为n-1,1的个数为n+1,所以原排列的不成立方案对应新排列(即n-1个0和n+1个1进行全排列)。

对于新排列,因为1的个数多于0的个数,所以总存在一个位置2p+1,使得0的个数为p,1的个数为p+1,同样对2p+2位置后面取反,不难的得到0的个数为n-1个,1的个数n+1个,此时仍然不满足条件。

故两种排列一一对应,而新排列的方案数为

\[\frac{2n!}{(n-1)!\times (n+1)!} \]

要获得满足条件的方案数为

\[\begin{array}{c}\frac{2n!}{n!n!}-\frac{2n!}{(n-1)!\times (n+1)!}=(2n)!\times (\frac{1}{n!n!}-\frac{1}{(n-1)!(n+1)!})=(2n!)\frac{(n-1)!(n+1)!-n!n!}{n!n!(n-1)!(n+1)!}\\\\=(2n!)\frac{(n-1)!(n+1)-n!}{n!(n-1)!(n+1)!}=(2n!)\frac{(n+1)-n}{n!(n+1)!}=\frac{2n!}{n!(n+1)!}=\frac{2n!}{n!n!(n+1)}=\frac{C_{2n}^{n}}{n+1}\end{array} \]

故得证

Catalan数列的常见模型

  1. n个左括号与右括号合法排列的方案数

解释:
将左括号看做0,右括号看做1,无论在哪个位置1总比0多。

  1. 1,2,3,...,n的合法出栈序列方案数

解释:
因为只有n个数,无法凑出2n个数,难以解释,于是将入栈序列考虑进来,把出栈作为1,入栈作为0,0总比1多,故对应。

  1. n个节点的构成二叉树方案数
    解释:显然只有n个不好解释,但注意到2,联想catalan,于是要创造各种树的序列,失败后,便不再考虑转换模型一一对应,可以考虑科学归纳法,对于n个节点的树的方案数,为了划分问题,我们钦定一个点作为根节点,这个点显然引出了两棵子树,不难得知,方案数的不同在与这两棵子树的大小与点边之间的关系,于是不难有
    \(f[n]\)表示n个节点的方案数,不难有:

\[f[n]=f[0]\times f[n-1]+f[1]\times f[n-2]+...+f[n-1]\times f[0]=\sum_{i=1}^{n}f[i]\times f[n-i] \]

而该数列为catalan数列,故得证。
这也告诉我们catalan的另外一种形式,因为你如果设
\(f[n]\)表示长度为n的catalan数列的方案数,其实也可以同样利用树的划分思想,放一个长度2的catalan的数,左右接catalan数列即可。

4.在平面直角坐标系上,从(0,0)出发,每次只能选择向上走和向右走,走到(n,n),不穿过y=x直线的的方案数。

解释:
考虑转换模型,向上走和向右走即2种策略,可以考虑catalan,设0向上走,1向右走,显然要n个0和1才能走到目的地,而不能穿过y=x,自然要么0一定比1多,或者1一定比0多,故方案数得知。

Prefur 序列

定义:有标号的树所对应的序列

树变序:每次从叶结点(度数为1的点)中选出标号最小的,将其从树中删去,记录与其相邻的点的标号,这样按时间先后记录的标号,即prefur序列。

序变树:把P序列叫做prefur序列,A序列为{1,2,3...,n}(1~n的递增排列),从前到后删除P序列中的每一个元素,在A序列寻找未在P序列中出现的最小的元素删去,把删去的两个元素连边,直至P序列为空,连上A序列剩下的两个元素所得应的节点。

性质:(把序列长度记做n)

  1. prefur序列长度n-2
  2. 与一棵有标号的树一一对应。
  3. caley定理:有标号的树生成个数为\(n^{n-2}\)(即序列的可重排列个数)
  4. 度数体现:一个度数为d的点,在序列中出现的次数为d-1.

启发性:

对于非序列组合问题,我们不好探究,于是除了catalan数此路以外,我们可以寻找一种一一对应的特殊的生成方式,使之与一个序列一一对应,变成我们好研究的序列。
prefur序列特殊到选择叶结点标号最小的的相邻点,和删去的生成方式以便于序列记录的完整,再序变树时,因为删去的点必不在序列中出现,故要另找一个递增序列,寻找未出现的标号最小的点,不可不谓巧。

基础巩固

  1. \[C_n^r=\_=\_=\_; \]

  2. 请写出可重全排列公式。

  3. 请写出catalan公式

  4. 请证明lucus定理。

  5. \(2^n\)用组合数表示。

  6. 请写出允许重复的组合的公式。

  7. 请写出二项式定理的公式。

  8. 请证明catalan数。

  9. 请举出catalan数的几个应用,并给予解释。

  10. 请写出圆周排列的公式。

  11. 在平面直角坐标系上,从(0,0)出发,每次只能选择向上走和向右走,走到(n,m)(n<m),使走的点横坐标一定小于纵坐标的的方案数。

  12. 7位科学工作者从事一项机密的技术研究,他们的实验室装有电子锁,每位参加该项工作的人都有一把打开电子锁的钥匙。为安全起见,必须有4位到场方可打开实验室的门。试问该电子锁必须具备多少特征?每位科学工作者的钥匙应具有多少这些特征?

套路小结

排列与组合

递推:

  1. 按照性质设状态
  2. 根据问题划分与策略以及补集转移
  3. 有有关标号状态,限制标号范围转移。

组合:

常见模型:

  1. 小球放盒子
  2. 从(0,0)到(n,m)上右操作方案。
  3. 可重组合
  4. 插空问题
    5.递增序列,不降序列

小结

  1. 通常可以转换成其他模型
  2. 用于通项公式
  3. 大部分情况应为有标号元素放入无标号盒子

排列:

常见模型:

  1. 可重排列
  2. 分组问题
  3. 插空问题

小结:

  1. 通常可以转换成其他模型
  2. 重结果,忽略过程,抓住影响结果关键(因为其后效性过于严重)
  3. 用于通项公式的推出

圆周排列

常见模型:

  1. 围桌吃饭

小结

  1. 用于推通项公式
  2. 通常不好求,故拆环成链
  • 一些常见拆环成链的办法:
  • 再补一截(元素较为固定,确定,较少)
  • 拆环分问(元素不确定,但没有排列限制,用于划分方案数的问题)
  • 移链接首 or called floyd环(元素不确定,而且有排列限制,但是限制较小)

错排模型归纳

常见模型:

  1. 矩阵错排
  2. 排列错排(递推式\(f[i]=(i-1)\times (f[i-1]+f[i-2])\)

小结:

  1. 错排模型标志即一行一列最多只能放一个棋子,或者排列中元素不能放到有且仅有的某个位置。

  2. 错排自由定理:在错排问题中,行列之间互不影响,可以任意交换。

  3. 解决错排两个常用工具

  • 递推(简单好些)
  • 通项(速度快)
  1. 对于错排的变式,需要抓住错排的对象,如[CQOI2011]放棋子
    对象是颜色。

catalan数模型归纳

基本模型:

  1. 括号
  2. (0,0)到(n,n)不穿过y=x
  3. 二叉树方案数。

基本证明办法:

  1. 定义
  2. 递推(重在寻找划分)
  3. 转换模型

一些技巧

  1. 序列保证递增尽量构造递增。
  2. 需要什么尽可能保证什么

树的组合计数问题归纳

二叉树

二叉树压维模型

常用状态:节点数,节点编号

常用转移:

  1. 递推方程左右子树划分
  2. catalan数
  3. 拆分

  1. 有标号的树考虑prefur序列
posted @ 2019-04-27 19:32  a1b3c7d9  阅读(527)  评论(0编辑  收藏  举报