• 组合数学之排列组合(Permutations and Combinations)(四种情况)


    加减乘除四个原理不再赘述。(即使小学生都会的原理也能出些大学生不会的题目)

    1集合的排列(Pertutations of Sets)(无重有序)(无重复有序)

    设r为正整数,把n个元素的集合S的一个r排列理解为n个元素中r个元素的有序摆放。其数目用P(n,r)表示

    对正整数n和r,r<=n,有P(n,r) = n(n-1)(n-2)......(n-r+1) = n! / (n-r)!  (乘法原理证明)

    若r>n,P(n,r)=0.并且有P(n,1)=n, P(n,n) = n!,定义P(n,0) = 1.

    (在c++STL中,<algorithm>中有按照字典序产生排列的算法next_permutation和prev_permutation,函数返回bool值)

    定理:n个元素的循环r排列(围成一个环)的个数是P(n,r)/r, 即n!/ (r(n-r)!), r= n时有(n-1)!

    例如6个人围成环(固定一人)的方法有5!种。

    2集合的组合(Combinations of Sets)(无重无序)

    设r非负整数,理解为n中r个元素的无序选择。其数目记为C(n,r)

    C(n,r) = P(n,r) / r!   = n! / (r!(n-r)!)        性质:C(n,r)=C(n,n-r)

    定理:C(n,0) + C(n,1) + C(n,2) + ...... + C(n,n) = 2^n

    3多重集的排列(Permutations of Multisets)(有重有序)(有重只多重集的结合元素是有重复的)

    例如S={2.a, 1.b, 3.c}表示2个a,1个b,3个c。

    定理1:令S是一个多重集,它有k个不同类型的元素,每一个元素都有无限个,那么S的r排列个数为k^r

    定理2:令S是一个多重集,它有k个不同类型的元素,各元素重数分别是n1, n2, n3, ... ,nk。设S的大小n=n1+n2+...+nk,

    则S的排列数为n! / (n1!n2!...nk!)

    4多重集的集合(Combinations of Multisets)(有重无序)

    定理:令S是一个多重集,它有k个不同类型的元素,每一个元素都有无限个,那么S的r排列个数为C(r+k-1,r)

    元素有限个时需要用到容斥原理解决。

    ps:简单总结了一下四种排列组合问题,要学好排列组合需要大量的练习,以上没有给出证明,只是用来做个总结回顾,需要的自己参考一下相关书籍。打字不容易,自学数学伤不起啊。

  • 相关阅读:
    截取中文字符加省略号
    全面解读PHP的Yii框架中的日志功能
    curl 异步捉取数据类
    微信企业号OAuth2.0验证接口来获取成员的身份信息
    Linux下修改Mysql的用户(root)的密码
    curl 抓取图片
    git获取一个版本相对于另一个版本新增,修改,删除的文件
    php打乱数组二维数组、多维数组
    js 解密 16进制转10进制,再取ascii码的对应值
    防止页面后退(使浏览器后退按钮失效)
  • 原文地址:https://www.cnblogs.com/PegasusWang/p/2872312.html
Copyright © 2020-2023  润新知