一、无重复元素的排列组合定义

排列,英文名为Permutation,是指从某元素集合中取出指定个数的元素进行排序
组合,英文名为Combination,是指从某元素集合中仅仅取出指定个数的元素,不考虑排序

从有n个不同元素的集合任取r个元素的排列方式有:
P(n,r)=n∗(n−1)∗...∗(n−r+1)=n!/(n−r)!,特别地P(n,n)=n!P(n, r) = n*(n-1)*...*(n-r+1) = n! / (n-r)!,特别地 P(n,n) = n!P(n,r)=n∗(n−1)∗...∗(n−r+1)=n!/(n−r)!,特别地P(n,n)=n!

从有n个不同元素的集合任取r个元素的组合方式有:
C(n,r)=P(n,r)/r!=n!/((n−r)!∗r!),特别地C(n,n)=1C(n, r) = P(n, r) / r! = n! / ( (n-r)! * r!),特别地C(n,n) = 1C(n,r)=P(n,r)/r!=n!/((n−r)!∗r!),特别地C(n,n)=1

二、多重集合(multiset)的排列组合

设多重集合 S=n1∗a1,n2∗a2,...,nk∗akn=n1+n2+...+nkS = { n1 * a1, n2 * a2, ..., nk * ak }\ \ \ \ \ n = n1 + n2 + ... + nkS=n1∗a1,n2∗a2,...,nk∗ak     n=n1+n2+...+nk

即集合 S 中含有n1个元素a1, n2个元素a2,…,nk个元素ak,ni被称为元素ai的重数,k成为多重集合的类别数

在 S 中任选 r 个元素的排列称为S的r排列,当r = n时,有公式
P(n;n1∗a1,n2∗a2,...,nk∗ak)=n!/(n1!∗n2!∗...∗nk!)P(n; n1*a1, n2*a2, ..., nk*ak) = n! / (n1! * n2! * ...* nk!)P(n;n1∗a1,n2∗a2,...,nk∗ak)=n!/(n1!∗n2!∗...∗nk!)

在 S 中任选 r 个元素的组合称为S的r组合,当r<=任意ni时,有公式
C(n;n1∗a1,n2∗a2,...,nk∗ak)=C(k+r−1,r)C(n; n1*a1, n2*a2, ..., nk*ak) = C(k+r-1, r)C(n;n1∗a1,n2∗a2,...,nk∗ak)=C(k+r−1,r)

由公式可以看出多重集合的组合只与类别数k 和选取的元素r 有关,与总数无关!

三、多重集合问题的转化例子

例1:线性方程 x1 + x2 + … + xk = r 一共有多少组非负整数解?

解答:上述不定方程的非负整数解对应于下述排列

1…101…1 01…1 0 … 01…1

x1 个 x2 个 x3 个 … xk 个

其中 k-1个 0 将 r 个 1 分成k段, 每段含1的个数分别为 x1, x2, …, xk,

很明显这个排列是多重集合 S = { r * 1, (k-1)* 0 }的全排列

即:P(r+k-1; r*1, (k-1)*0) = (r+k-1)! / ( r! * (k-1)! ) = C( r+k-1, r),即从k类元素中选r个的种类

例二:某车站有6个入口处,每个入口处每次只能进一个人, 一组9个人进站的方案有多少?

解答:进站方案可以表示为

1 011 011 01 011 01

g1 g2 g3 g4 g5 g6

其中 1 表示不同的人, 而 0 表示门框, 6-1= 5个门框将序列分为六段,

则任意进站方案可表示成上面 14 个元素 S = { 5 * 1, 1 * p1, 1 * p2, …, 1 * p9 }的一个排列

即:P(5+9;51, 1p1, 1p2, …, 1p9) = 14! / ( 5! * 1! * … 1! ) = 14! / 5!

例三、求从(0,0)点到(m,n)点的非降路径数

解答:无论哪条路径,必须在x方向上走m步,y方向上走n步,将非降路径数与多重集合 S = { m * x, n * y } 的排列建立一一对应关系,所以格路总数为 P(m+n; mx, ny) = (m+n)! / ( m! * n! ) = C(m+n, n) = C(m+n, m)

一般地,设c>=a, d>=b,则由(a,b)到(c,d)的非降路径数为C(c-a+d-b, c-a)

扩展问题: 在上例基础上若设m<n,求点(0,1)到点(m,n)不接触对角线 y=x的非降路径数据(接触包括穿过)

解答:从(0,1)到(m,n)的非降路径,有的接触 y=x,有的不接触,对于每条接触 y=x的非降路径,做(0,1)关于y=x的对称点(1,0)到(m,n)的对称非降路径,容易看出从(0,1)到(m,n)接触y=x的非降路径与 (1,0)到(m,n)的非降路径(必穿过y=x)一一对应,

故所求的非降路径数为 C(m+n-1, m) - C(m+n-1, m-1)

例四、将r个相同的小球放入n个不同的盒子,总共有多少种方案?

解答:该问题可以转化为r个相同的小球与n-1个相同的盒壁的排列问题

1…1 0 1…1 0 1…1 0 … 0 1…1

其中有 n-1个 0 分成 n段,每段表示不同的盒子, 每段中1的个数表示该盒子里放入的小球总数,总共r个1

即:P( r+n-1; r*1, (n-1)*0 ) = (r+n-1)! / ( r! * (n-1)! ) = C( r+n-1, r)

例五、求集合 X = { 1,2,…, n }的不含相邻整数的k元子集个数

解答:任意一个X的k元子集s都可以对应于一个由0,1组成的有序n重组(a1 a2 … an),其中 ai = 1 当 i属于s,否则 ai = 0,当i不属于s,由于s中不含相邻整数,所以在此n重组中没有两个1是相邻的,所以子集s是与这样的n重组 S = { k*1, (n-k)*0 }之间是一一对应的,由于任意两个1彼此不相邻,故可以把(n-k)个0依次排列,然后在(n-k+1)个空隙中插入k个1,所以从(n-k+1)个空隙中选择k个位置来放置1,有 C(n-k+1, k) 种选法,这也是原问题所对应的答案。

四、母函数
生成函数(母函数)有普通生成函数和指数生成函数:
1.普通生成函数用于解决多重集的组合问题

2.指数型母函数用于解决多重集的排列问题

母函数可以解决递归数列的通项问题:斐波那契数列、卡特兰数列等

普通母函数:
构造母函数G(x), G(x) = a0 + a1x + a2 + a3* +…+ an*, 则称G(x)是数列a0,a1…an的母函数。

通常普通母函数用来解多重集的组合问题,其思想就是构造一个函数来解决问题,一般过程如下:

1.建立模型:

物品n种,每种数量分别为k1,k2,…kn个,每种物品又有一个属性值p1,p2,…pn,(如本题的字母价值),求属性值和为m的物品组合方法数。(若数量ki无穷 也成立,即对应下面式子中第ki项的指数一直到无穷)

2.构造母函数:

G(x)=(1++…)(1+++…)…(1+++…) (一)

=a0 + a1x + a2 + a3* +…+ akk* (设kk=k1·p1+k2·p2+…kn·pn) (二)

G(x)含义: ak 为属性值和为k的组合方法数。

母函数利用的思想:
1.把组合问题的加法法则和幂级数的乘幂对应起来。

2.把离散数列和幂级数对应起来,把离散数列间的相互结合关系对应成为幂级数间的运算关系,最后由幂级数形式来 确定离散数列的构造。

代码实现:
求G(x)时一项一项累乘。先令G=1=(1+0x+0+…0*),再令G=G*(1++…)得到形式(二)的式子…最后令G=G*(1+++…)。
下面是指数型母函数的定义:


对于上面的问题“假设有8个元素,其中a1重复3次,a2重复2次,a3重复3次。从中取r个组合,求其组合数。”:

(感谢 3Dnn 同学指出,下图的 28/3! 应该改为 26/3!)

引用博客1
引用博客2
引用博客3

数学--数论-多重集排列组合与母函数相关推荐

  1. 【数论】排列组合学习笔记

    目录 简介 加原理和乘法原理 加法原理 乘法原理 两原理的区别 例子 排列 例子 简介 排列组合是组合数学中的一种.排列就是指从给定个数的元素中取出指定个数的元素进行排序:组合则是指从给定个数的元素中 ...

  2. 【数论】 排列组合中的隔板问题

    排列组合中的可以一个空插多个隔板的问题 但是现在要解决的情况是盒子可以分不到球.这样我们通过一步化归,转换为上面的情况:添加 nn 个球,使每个盒子至少有一个球.这样分完后只要将每个盒子多拿的一个球收 ...

  3. 组合数学-多重集排列组合问题

    组合数学-多重集象棋车的排列问题 多重集r-排列及其证明 多重集全排列定理及其证明 了解主题前先知道这个定理,方便接下来的讨论 解法1 解法2 象棋车的排列问题 解法 多重集组合问题 当多重集的元素只 ...

  4. 【数论】排列组合问题

    排列 定义: 从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列:从n个不同元素中取出m(m≤n)个元素的所有排列的个数 ...

  5. 使用java实现数学中的排列组合公式A和C以及阶乘

    package math;public class Stastic {/*** 数学中的统计方法,用于整数,A(3,2)即3*2,A(5,3)即5*4*3* @param first 开始的数* @p ...

  6. 信奥中的数学:排列组合

    排列组合题型总结课程(一) 排列组合题型总结课程(一)_哔哩哔哩_bilibili 排列组合的公式 排列组合的公式_百度知道 [Manim动画]如何以可视化视角直观理解排列组合? [Manim动画]如 ...

  7. 【组合数学】指数型母函数 应用 ( 多重集排列问题 | 不同球放在不同盒子里 | 奇/偶数序列的指数生成函数推导 )

    文章目录 多重集全排列公式 指数型母函数 处理多重集排列问题 引入 指数型母函数 处理多重集排列问题 公式推导 指数型母函数 处理 有限数字串问题 指数型母函数 处理 n 位数字串问题 指数型母函数 ...

  8. 【Math】排列组合

    排列组合 百科名片 加法 & 乘法原理 加法原理 乘法原理 排列与组合基础 排列数 组合数 二项式定理 排列与组合进阶篇 多重集的排列数 | 多重组合数 多重集的组合数 1 多重集的组合数 2 ...

  9. LeetCode--62.不同路径(排列组合,动态规划)

    不同路径(排列组合,动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 3.1 动态规划 3.2 排列组合 1. 题目描述 难度:中等 2. 题目分析 这是一道典型的动态规划问题,这道题有两 ...

最新文章

  1. php session bug,thinkphp2.x中session的BUG及解决办法
  2. 返回json格式 不忽略null字段
  3. 如何将linux内核的带级别控制的printk内容打印出来
  4. hive修改默认创建表格式
  5. 网易云上线新版容器服务,开放更多Kubernetes功能
  6. NetAssist.exe网络调试工具
  7. CMMI、ISO、6sigma、ITIL软件质量管理体系了解
  8. SpringBoot多种自定义错误页面方式
  9. 威廉玛丽学院计算机教授刘旭,国家超级计算济南中心,欢迎您!
  10. CSS第五天——学成网在线
  11. 计算机在英语翻译上的运用,有道如何在网页上翻译一句话,有道网页上的字翻译怎么用...
  12. 【计网】2.2.4 Web缓存/代理服务器
  13. 【媒体】黑灰产横行,金融行业如何“数智化”反欺诈?
  14. 安卓开发教你监听手机Home键
  15. 10年网安经验分享:一般人别瞎入网络安全行业
  16. 苹果从中国赚六百多亿美元,却在转移生产线,该减轻对它的依赖了
  17. linux操作系统安全防护
  18. python分析微博粉丝_python爬虫,对粉丝夺宝的一次数据分析
  19. mysql表的增删改select 和 where
  20. 电影院选票系统(C语言课设)

热门文章

  1. Android开发之RadioButton位于文字右边的显示方法
  2. Android开发之listview添加头布局(header)和脚布局(footer)的方法
  3. 函数式编程笔记 01
  4. 2017中国新型智慧城市创新50强在京发布
  5. 网络管理员的爱情,不解释...
  6. js 获取url多个参数
  7. php无法写入word文档,PHP生成WORD文档的问题
  8. web业务系统权限控制
  9. mfc搜索新建access字段_MFC ODBC类 Access数据库的操作
  10. js方式调用php_javascript调用PHP和PHP调用javascript的方法