zoukankan      html  css  js  c++  java
  • 初等组合计数小结

    基础知识点:

    加法原理:

    具有性质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序列
  • 相关阅读:
    static inline和inline的区别——stm32实测
    实现自动构建编译javaweb项目并发布到N台服务器
    手把手教你用Mysql-Cluster-7.5搭建数据库集群
    HAProxy实现mysql负载均衡
    使用LVS+keepalived实现mysql负载均衡的实践和总结
    阿里巴巴Java开发手册———总结
    阿里巴巴Java开发手册———个人追加的见解和补充(五)
    阿里巴巴Java开发手册———个人追加的见解和补充(四)
    Chapter 3 Phenomenon——24
    阿里巴巴Java开发手册———个人追加的见解和补充(三)
  • 原文地址:https://www.cnblogs.com/a1b3c7d9/p/10779865.html
Copyright © 2011-2022 走看看