初等组合计数小结

基础知识点:

加法原理:

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

乘法原理:

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

排列与组合:

组合意义

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

排列公式

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

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

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

可重全排列

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

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

证明:

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

[n! ]

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

组合公式

[C_n^r=frac{n!}{(n-r)! imes 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)! imes 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_1leq a_2leq,...,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_1leq b_2-1leq b_3-2leq...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} imes 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) ightarrow(n,m)-(1,0) ightarrow(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 imes a^i imes b^{n-i} ]

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

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

Lucus定理

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

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

[left{egin{array}{c}r=k_1 imes p+r_1\n=k_2 imes p+r_2end{array} ight. ]

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

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

注释:

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

[b]

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

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

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

{p是质数}

Exlucus

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

[p=p_1 imes p_2 imes ... p_m ]

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

证明正确性:

[left{egin{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} ight. ]

[left{egin{array}{c}x=a_{n+1}(mod p)end{array} ight. ]

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

ExExlucus

[p=p_1^{c_1} imes p_2^{c2} imes ... 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)! imes (n+1)!} ]

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

[egin{array}{c}frac{2n!}{n!n!}-frac{2n!}{(n-1)! imes (n+1)!}=(2n)! imes (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] imes f[n-1]+f[1] imes f[n-2]+...+f[n-1] imes f[0]=sum_{i=1}^{n}f[i] imes 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) imes (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序列
原文地址:https://www.cnblogs.com/a1b3c7d9/p/10779865.html