zoukankan      html  css  js  c++  java
  • 组合与排列

    目录

    前言

    霍金先生的伟大,我无法想象,它的技术成就,我亦不配评论。但霍金先生对抗病魔的精神,就值得我由衷敬佩。尽自己的能力写好该系列,以此缅怀霍金先生。

    排列数公式推导证明

    定义:从 n 个不同元素的集合中,任意取出 m(m<=n) 个元素排成一列(有先后顺序)称为一个排列;此种排列的总数即为排列数,即叫做从 n 个不同元素中取出 m 和元素的排列数。

    公式
    这里写图片描述

    (当 n=m 时,分母为 0! = 1,即为全排列)

    推导:在具有 n 个数的集合中,顺序取出 m 个数,成为一个排列。

    • 取出第 1 个数,有 n 种选法
    • 取出第 2 个数,有 n-1 种选法
    • 取出第 m 个数,有 n-m+1 种选法
    • 最后一个数,只有 1 中选法

    上述过程符合「分步乘法计数」场景,应用分步乘法计数公式:这里写图片描述

    得到 n(n-1)(n-2)…(n-m+1),即 A(n, m) = n! / (n-m)! 。

    组合数公式推导证明

    定义:从 n 个不同元素的集合中,任意取出 m(m<=n) 个元素并成一组(无先后顺序),叫做从 n 个不同元素中取出 m 个元素的一个组合;从 n 个不同元素的集合中取出 m(m<=n) 个元素的所有组合的个数,叫做从 n 个不同元素中取出 m 个元素的组合数。

    公式

    这里写图片描述

    推导:在具有 n 个数的集合中,获取 m 个数组成一组。
    首先依旧可以得到排列数 A(n, m),但又因为组合数是无序的,而排列数是有序的,所以需要在 A(n, m) 的基础上去除掉元素组合一致的排列。即 C(n, m) = A(n, m) / m! 。这里的理解需要转一下弯,所以我们通过下述证明来辅助理解这条公式。

    证明:A(n, m) = C(n, m) * A(m, m)
    第一步,从 n 个球中取出 m 个来,先不排序,所以为组合数问题,得到 C(n, m)。
    第二步,将第一步取出的球全部排列,A(m, m) = m!,即求组合的全排列。
    第三步,应用分步乘法计数原理,得到 A(n, m) = C(n, m) * A(m, m),即 A(n, m) = C(n, m) * m! 得证。

    所以从 n 中取出 m 的排列数,实际为从 n 中取出 m 的组合数与每一个组合自身所拥有的全排列数的乘积。

    重复组合数公式推导证明

    定义:重复组合是一种特殊的组合,从 n 个不同元素的集合中允许重复地取出 m 个元素(任意取出一个元素,然后再将其放回到集合中)形成一个组合,叫做从 n 个元素中取出 m 个元素的重复组合。

    公式:
    这里写图片描述

    分析(放球模型):将重复组合的概念转换为放球模型来进行分析,将 n 个不同的元素当作 n 个不同的格子,既有 n-1 块相同的隔板。同时用 m 个相同的小球,当作取出 m 个元素。现在问将 m 个相同的小球放到 n 个格子里,有多少种方法?

    相当于:

    • 先求 m 个小球和 n-1 块隔板所组成的集合 (m+n-1) 的全排列。
    • 又因为 m 个小球是相同的,n-1 块隔板亦是相同的,所以需要除以重复的情况 C(m, m) * C(n-1, n-1) = m! * (n-1)! 。
    • 所以最终使用全排列数除以重复的次数,得到重复组合数 (m+n-1)! / m! * (n-1)!,即 C(m+n-1, m) 。

    组合数恒等公式

    这里写图片描述

    最后再给出组合数恒等公式,大家不妨自己推导一下吧。

  • 相关阅读:
    cookie
    接上一篇
    es6
    本地文件r如何上传到github上
    npm的使用说明
    被公司996下的程序媛心路历程
    起点2020
    ES5(基本包装类型)字符串的方法
    ES5数组的方法
    css伪类
  • 原文地址:https://www.cnblogs.com/jmilkfan-fanguiju/p/10589777.html
Copyright © 2011-2022 走看看