算法分析与设计学习(4)——组合学

组合学

排列和组合

  • 基本概念

    • 加法原理:

      • 设集合 S S S 划分为部分 S 1 , S 2 , … , S m S_1,S_2,…,S_m S1,S2,,Sm。则 S S S 的元素的个数可以通过找出它的每一部分的元素的个数来确定,把这些数相加,得到:

      ∣ S ∣ = ∣ S 1 ∣ + ∣ S 2 ∣ + ⋯ + ∣ S m ∣ \Large{|S|=|S_1|+|S_2|+\cdots+|S_m|} S=S1+S2++Sm

    • 加法原理

      • S S S 是元素的序偶 ( a , b ) (a,b) (a,b)的集合,其中第一个元素 a a a 来自大小为 p p p 的一个集合,而对于 a a a的每个选择,元素 b b b 存在着 q q q 种选择。
        ∣ S ∣ = p × q \Large{|S|=p \times q} S=p×q
    • r − r- r排列

      • n n n 个元素中的 r r r 个元素的有序摆放称为 n n n 个元素的集合 S S S 的一个 r − r- r 排列。
      • n n n 个元素集合的 r − r- r 排列的数目用 P ( n , r ) P(n,r) P(n,r)​ 来表示。
    • r − r- r 组合

      • n n n 个元素中对 r r r 个元素的无序选择称为 n n n 个元素的集合 S S S 的一个 r − r- r 组合。
      • n n n 个元素集合的 r − r- r 组合的数目用 ( n r ) \begin{pmatrix} n\\r\end{pmatrix} (nr) C ( n , r ) C(n,r) C(n,r) 来表示。
    • 如果 S S S 是一个多重集,那么 S S S 的一个 r − r- r 排列是 S S S r r r 个元素的一个有序排放。如果 S S S 的元素总个数是 n n n,那么 S S S n − n- n排列也将成为 S S S​ 的排列。

  • 性质

    • 对于正整数 n n n r r r r ≤ n r≤n rn,有
      P ( n , r ) = n × ( n − 1 ) × ( n − 2 ) × ⋯ × ( n − r + 1 ) = n ! ( n − r ) ! \large{P(n,r)=n \times (n-1) \times (n-2)\times \cdots \times (n-r+1)=\frac{n!}{(n-r)!}} P(n,r)=n×(n1)×(n2)××(nr+1)=(nr)!n!

    • n n n 个元素的集合的循环 r − r- r 排列计算

      • 一般情形
        P ( n , r ) r = n ! r ( n − r ) ! \large{\frac{P(n,r)}{r}=\frac{n!}{r(n-r)!}} rP(n,r)=r(nr)!n!

      • 特殊地, n n n 个元素的集合的循环 n − n- n 排列计算为 ( n − 1 ) ! (n-1)! (n1)!

    • 对于 0 ≤ r ≤ n 0≤r≤n 0rn P ( n , r ) = r ! ( n r ) P(n,r)=r!\begin{pmatrix} n\\r\end{pmatrix} P(n,r)=r!(nr),即
      ( n r ) = n ! r ! ( n − r ) ! \Large{\begin{pmatrix} n\\r\end{pmatrix}=\frac{n!}{r!(n-r)!}} nr =r!(nr)!n!

    • S S S 是一个多重集,它有 k k k 个不同类型的元素。

      • 每一个元素都有无穷重复个数。那么 S S S r − r- r 排列的个数为 k r k^r kr​。

      • 各元素的重数分别为 n 1 , n 2 , … , n k n_1,n_2,…,n_k n1,n2,,nk。设 S S S 的大小为 n = n 1 + n 2 + … + n k n=n_1+n_2+…+n_k n=n1+n2++nk。则 S S S​ 的排列数等于
        n ! n 1 ! n 2 ! ⋯ n k ! \Large{\frac{n!}{n_1!n_2!\cdots n_k!}} n1!n2!nk!n!

鸽巢原理

  • 基本概念
    • 简单形式:如果 n + 1 n+1 n+1 个物体被放进 n n n 个盒子,那么至少有一个盒子包含两个或更多的物体。
    • 加强形式:令 q 1 , q 2 , … , q n q_1,q_2,…,q_n q1,q2,,qn 为正整数。如果将 q 1 + q 2 + … + q n − n + 1 q_1+q_2+…+q_n-n +1 q1+q2++qnn+1 个物体放入 n n n 个盒子内,那么,或者第一个盒子至少含有 q 1 q_1 q1 个物体,或者第二个盒子至少含有 q 2 q_2 q2 个物体……或者第 n n n 个盒子至少含有 q n q_n qn​ 个物体。
  • 性质
    • 如果将 n n n 个物体放入 n n n​ 个盒子并且没有一个盒子是空的,那么每个盒子恰好包含一个物体。
    • 如果将 n n n 个物体翻入 n n n​ 个盒子并且没有盒子被放入多于一个的物体,那么每个盒子里有一个物体。
    • 如果 n n n 个非负整数 q 1 , q 2 , … , q n q_1,q_2,…,q_n q1,q2,,qn 的平均数大于 r − 1 r-1 r1,则那么至少有一个整数大于或等于 r r r

容斥原理

  • 基本概念

    • 容斥原理:集合 S S S 不具有性质 P 1 , P 2 , … , P m P_1,P_2,…,P_m P1,P2,,Pm 的物体的个数由下式给出:
      ∣ A 1 ‾ ∩ A 2 ‾ ∩ ⋯ ∩ A m ‾ ∣ = ∣ S ∣ − ∑ i = 1 m ∣ A i ∣ + ∑ i , j : i < j ∣ A i ∩ A j ∣ − ∑ i , j , k : i < j < k ∣ A i ∩ A j ∩ A k ∣ + ⋯ + ( − 1 ) m ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A m ∣ \begin{aligned} \left|\overline{A_{1}} \cap \overline{A_{2}} \cap \cdots \cap \overline{A_{m}}\right| & =|S|-\sum_{i=1}^{m}\left|A_{i}\right|+\sum_{i, j:i<j}\left|A_{i} \cap A_{j}\right|-\sum_{i, j, k:i<j<k}\left|A_{i} \cap A_{j} \cap A_{k}\right| \\ & +\cdots+(-1)^{m}\left|A_{1} \cap A_{2} \cap \cdots \cap A_{m}\right| \end{aligned} A1A2Am =Si=1mAi+i,j:i<jAiAji,j,k:i<j<kAiAjAk++(1)mA1A2Am
      其中 A i A_i Ai 表示 S S S 中具有性质 P P P 的集合,$\overline{A_{i}} $表示 A i A_i Ai 在集合 S S S 中的补集。

    • 推论:至少具有性质 P 1 , P 2 , … , P m P_1,P_2,…,P_m P1,P2,,Pm​ 之一的集合
      ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A m ∣ = ∑ i = 1 m ∣ A i ∣ − ∑ i , j : i < j ∣ A i ∩ A j ∣ + ∑ i , j , k : < < j < k ∣ A i ∩ A j ∩ A k ∣ + ⋯ + ( − 1 ) m + 1 ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A m ∣ \begin{aligned} \left|A_{1} \cup A_{2} \cup \cdots \cup A_{m}\right|= & \sum_{i=1}^{m}\left|A_{i}\right|-\sum_{i, j: i<j}\left|A_{i} \cap A_{j}\right|+\sum_{i, j, k:<<j<k}\left|A_{i} \cap A_{j} \cap A_{k}\right| \\ & +\cdots+(-1)^{m+1}\left|A_{1} \cap A_{2} \cap \cdots \cap A_{m}\right| \end{aligned} A1A2Am=i=1mAii,j:i<jAiAj+i,j,k:<<j<kAiAjAk++(1)m+1A1A2Am

    • 设集合 S S S 中满足性质 P , Q P,Q P,Q 的集合分别为 A , B A,B A,B ,满足性质 P P P Q Q Q 的物体个数为:
      ∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ \Large{|A\cup B|=|A|+|B|-|A\cap B|} AB=A+BAB

  • 性质

    • 错位排列

      • 假设用 D n D_n Dn 表示 { 1 , 2 , … , n } \{1,2,…,n\} {1,2,,n} 的错位排列的个数,用 S S S 表示 { 1 , 2 , … , n } \{1,2,…,n\} {1,2,,n} 全排列, A i A_i Ai表示数字 i i i 在第 i i i 位的 { 1 , 2 , … , n } \{1,2,…,n\} {1,2,,n} 的全排列, ∣ A i ∣ = ( n − 1 ) ! |A_i|=(n-1)! Ai=(n1)!​。
        ∣ A 1 ‾ ∩ A 2 ‾ ∩ ⋯ ∩ A m ‾ ∣ = ∣ S ∣ − ∑ i = 1 m ∣ A i ∣ + ∑ i , j : i < j ∣ A i ∩ A j ∣ − ∑ i , j , k : i < j < k ∣ A i ∩ A j ∩ A k ∣ + ⋯ + ( − 1 ) m ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A m ∣ \begin{aligned} \left|\overline{A_{1}} \cap \overline{A_{2}} \cap \cdots \cap \overline{A_{m}}\right| & =|S|-\sum_{i=1}^{m}\left|A_{i}\right|+\sum_{i, j:i<j}\left|A_{i} \cap A_{j}\right|-\sum_{i, j, k:i<j<k}\left|A_{i} \cap A_{j} \cap A_{k}\right| \\ & +\cdots+(-1)^{m}\left|A_{1} \cap A_{2} \cap \cdots \cap A_{m}\right| \end{aligned} A1A2Am =Si=1mAi+i,j:i<jAiAji,j,k:i<j<kAiAjAk++(1)mA1A2Am

      • 由容斥原理得,
        D n = n ! ( 1 − 1 1 ! + 1 2 ! − 1 3 ! + ⋯ + ( − 1 ) n 1 n ! ) \Large{D_n=n!\Big(1-\frac{1}{1!}+\frac{1}{2!}-\frac{1}{3!}+\cdots +(-1)^n\frac{1}{n!}\Big)} Dn=n!(11!1+2!13!1++(1)nn!1)

特殊计数序列

  • 基本概念

    • Catalan 序列即序列 C 0 , C 1 , ⋯   , C n , ⋯ C_0,C_1,\cdots,C_n,\cdots C0,C1,,Cn,
      • n n n 个 Catalan 数为 C n = 1 n − 1 ( 2 n n ) ( 0 , 1 , 2 , ⋯   ) C_n=\frac{1}{n-1}\begin{pmatrix} 2n\\n\end{pmatrix}(0,1,2,\cdots) Cn=n11(2nn)(0,1,2,)
    • 第一类 Stirling 数 S ( p , k ) S(p,k) S(p,k)
      • p p p 个有区别的球排成 k k k​ 个非空的圆排列的方案数
      • p p p 个球分成非空的 k k k 份,再把每份中的球排成一个圆( n n n 个球的圆排列数为 ( n − 1 ) ! (n-1)! (n1)!
    • 第二类 Stirling 数 S ( p , k ) S(p,k) S(p,k)
      • p p p 个有区别的球放到 k k k​ 个相同的盒子中,要求没有空盒的方案总数。
  • 性质

    • n n n​ 个 Catalan 数的使用场景

      • n n n + 1 +1 +1 n n n − 1 -1 1 构成的 2 n 2n 2n a 1 , a 2 , . . . , a 2 n a_1,a_2,...,a_{2n} a1,a2,...,a2n
        • 其部分和满足非负性质,即 a 1 + a 2 + . . . + a k ≥ 0 ( k = 1 , 2 , . . . , 2 n ) a_1+a_2+...+a_{k} \ge 0(k=1,2,...,2n) a1+a2+...+ak0(k=1,2,...,2n),这个数列的个数
      • n n n 对括号构成的合法的括号序列的个数
      • n + 1 n+1 n+1 个叶子节点的二叉树个数
      • 通过不相交于内部的对角线把凸 n + 2 n+2 n+2​ 边形拆分成若干个三角形,不同的拆分数
    • 第一类 Stirling 数 S ( p , k ) S(p,k) S(p,k)

      • S ( p , k ) S(p,k) S(p,k) 性质

        • S ( p , 0 ) = 0 ( p ≥ 1 ) S(p,0)=0(p\ge 1) S(p,0)=0(p1)
        • S ( p , p ) = 1 ( p ≥ 1 ) S(p,p)=1(p\ge 1) S(p,p)=1(p1)
      • 计算 S ( p , k ) S(p,k) S(p,k)

        • 1 ≤ k ≤ p − 1 1≤k≤p-1 1kp1 。假设前 p − 1 p-1 p1 个球都已放好

        • 考察第 p p p​个球:

          • 单独放在一个盒子里。因为盒子是无区别的, 1 1 1 个球的圆排列只有 1 1 1 种,这种情形的方案数为 S ( p − 1 , k − 1 ) S(p-1,k-1) S(p1,k1)​ 。

          • 放在一个已有球的盒子里,即插入一个非空的圆中。每个圆定义顺时针方向为正方

            向。考虑第 p p p 个球在顺时针方向遇到的第一个球是哪个球,这个球有 p − 1 p-1 p1 种选择。以这种情形的方案数为 ( p − 1 ) S ( p − 1 , k ) (p-1)S(p-1,k) (p1)S(p1,k)​ 。

        • S ( p , k ) = ( p − 1 ) S ( p − 1 , k ) + S ( p − 1 , k − 1 ) S(p,k)=(p-1)S(p-1,k)+S(p-1,k-1) S(p,k)=(p1)S(p1,k)+S(p1,k1)

    • 第二类 Stirling 数 S ( p , k ) S(p,k) S(p,k)

      • S ( p , k ) S(p,k) S(p,k) 是将 p p p 个有区别的球放到 k k k​ 个相同的盒子中,要求没有空盒的方案总数。

      • S ( p , k ) S(p,k) S(p,k)​ 性质

        • S ( p , 0 ) = 0 ( p ≥ 1 ) S(p,0)=0(p\ge 1) S(p,0)=0(p1)
        • S ( p , p ) = 1 ( p ≥ 1 ) S(p,p)=1(p\ge 1) S(p,p)=1(p1)
        • S ( p , p ) = 1 ( p ≥ 1 ) S(p,p)=1(p\ge 1) S(p,p)=1(p1)
      • 1 ≤ k ≤ p − 1 1≤k≤p-1 1kp1。假设前 p − 1 p-1 p1 个球都已放好,考察第 p p p​ 个球:

        • 单独放在一个盒子里。因为盒子是无区别的,这种情形的方案数为 S ( p − 1 , k − 1 ) S(p-1,k-1) S(p1,k1)​。

        • 放在一个已有球的盒子里。因为球是有区别的,所以与第 p p p 个球共盒子的球是有区

          别的,需要选一个盒子放入第 p p p 个球。因此这种情形的方案数为 k S ( p − 1 , k ) kS(p-1,k) kS(p1,k)​ 。

      • S ( p , k ) = k S ( p − 1 , k ) + S ( p − 1 , k − 1 ) S(p,k)=kS(p-1,k)+S(p-1,k-1) S(p,k)=kS(p1,k)+S(p1,k1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值