• 组合数从入门到入土


    首先要知道:

      1.加法原理:方案数加起来;

      2.乘法原理:方案数乘起来;

    以上芝士不容解释,因此略过;

    1.集合的排列组合

    集合的组合数:$C_{n}^{m}$表示从n个元素中任取m个不同元素,有多少种不同的方案数;

    集合的排列数:$P_{n}^{m}$表示从n个元素中任取m个不同元素,并把他们按任意顺序排好序,有多少种不同的方案数;

    用jio想想,排列数与组合数就差那么一句话,而这句话如果用爆搜dfs来体会的话恰好让我们知道,$P_{n}^{m}=C_{n}^{m} imes m!$

    而至于$P_{n}^{m}$,可如此思考:先取第一个,有n种取法,第二个有n-1种取法......第m个有n+1-m种取法。

    因此$P_{n}^{m}=frac{n!}{(n-m)!}$,因为$P_{n}^{m}=C_{n}^{m} imes m!$,所以$frac{n!}{(n-m)! imes m!}$;

    特殊的:$P_n^n=n!$

    2.多重集合的排列组合

    再用jio想一想,对于一个集合:$S={r_1​⋅x_1​,r_2​⋅x_2​,⋯,r_k​⋅x_k},n=r_1+r_2+...+r_k$,多重集合的排列为$frac {n!}{r_1! imes r_2! imes ... imes r_k!}$

    很显然的,这n个元素的全排列是$n!$,但是由于这n个元素中存在相同元素的值,会使得存在重复方案(尽管每种方案选取的元素排列后各不相同,但选取的元素的值经排列后可能相同)。

    因此我们需要忽略相同元素的值的影响:即对于某种元素$x_i$,不考虑$r_i$种相同元素内部的不同排列。而$r_i$种相同元素内部的不同排列等于$r_i !$,因此得到多重集合的排列公式$frac {n!}{r_1! imes r_2! imes ... imes r_k!}$;

    然后就是如何求多重集合的组合。再说那之前,有必要先说说几个解决问题的最最基本的方法:

      2.1 捆绑法:如果要求某些元素一定要相邻,那么就可以把她们看作一个整体,先忽略内部的影响,对捆绑后的整体进行计算,然后计算捆绑产生的内部影响。

      2.2 插空法:如果要求某些元素一定不相邻,那么就可以把除她们之外的元素对答案的贡献计算出来,然后再考虑把她们插入到其他元素的两两空隙中,计算对答案的贡献;

  • 相关阅读:
    算法之递归(4) 应用
    算法之递归(1)
    [Async] [Series #1] 初识Async异步编程模型。
    CVE202142287/CVE202142278 复现
    易读文库下载器1.2版发布
    Sqlite.net 读取DateTime异常的解决方案
    QZFL 2.0.5 源代码
    Sqlite 管理工具 SQLiteDeveloper 及破解
    visio2010数据库正向工程生成数据库脚本
    什么是高内聚、低耦合?
  • 原文地址:https://www.cnblogs.com/kamimxr/p/12418430.html
Copyright © 2020-2023  润新知