数学--数论-多重集排列组合与母函数
一、无重复元素的排列组合定义
排列,英文名为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
数学--数论-多重集排列组合与母函数相关推荐
- 【数论】排列组合学习笔记
目录 简介 加原理和乘法原理 加法原理 乘法原理 两原理的区别 例子 排列 例子 简介 排列组合是组合数学中的一种.排列就是指从给定个数的元素中取出指定个数的元素进行排序:组合则是指从给定个数的元素中 ...
- 【数论】 排列组合中的隔板问题
排列组合中的可以一个空插多个隔板的问题 但是现在要解决的情况是盒子可以分不到球.这样我们通过一步化归,转换为上面的情况:添加 nn 个球,使每个盒子至少有一个球.这样分完后只要将每个盒子多拿的一个球收 ...
- 组合数学-多重集排列组合问题
组合数学-多重集象棋车的排列问题 多重集r-排列及其证明 多重集全排列定理及其证明 了解主题前先知道这个定理,方便接下来的讨论 解法1 解法2 象棋车的排列问题 解法 多重集组合问题 当多重集的元素只 ...
- 【数论】排列组合问题
排列 定义: 从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列:从n个不同元素中取出m(m≤n)个元素的所有排列的个数 ...
- 使用java实现数学中的排列组合公式A和C以及阶乘
package math;public class Stastic {/*** 数学中的统计方法,用于整数,A(3,2)即3*2,A(5,3)即5*4*3* @param first 开始的数* @p ...
- 信奥中的数学:排列组合
排列组合题型总结课程(一) 排列组合题型总结课程(一)_哔哩哔哩_bilibili 排列组合的公式 排列组合的公式_百度知道 [Manim动画]如何以可视化视角直观理解排列组合? [Manim动画]如 ...
- 【组合数学】指数型母函数 应用 ( 多重集排列问题 | 不同球放在不同盒子里 | 奇/偶数序列的指数生成函数推导 )
文章目录 多重集全排列公式 指数型母函数 处理多重集排列问题 引入 指数型母函数 处理多重集排列问题 公式推导 指数型母函数 处理 有限数字串问题 指数型母函数 处理 n 位数字串问题 指数型母函数 ...
- 【Math】排列组合
排列组合 百科名片 加法 & 乘法原理 加法原理 乘法原理 排列与组合基础 排列数 组合数 二项式定理 排列与组合进阶篇 多重集的排列数 | 多重组合数 多重集的组合数 1 多重集的组合数 2 ...
- LeetCode--62.不同路径(排列组合,动态规划)
不同路径(排列组合,动态规划) 1. 题目描述 2. 题目分析 3. C语言实现 3.1 动态规划 3.2 排列组合 1. 题目描述 难度:中等 2. 题目分析 这是一道典型的动态规划问题,这道题有两 ...
最新文章
- php session bug,thinkphp2.x中session的BUG及解决办法
- 返回json格式 不忽略null字段
- 如何将linux内核的带级别控制的printk内容打印出来
- hive修改默认创建表格式
- 网易云上线新版容器服务,开放更多Kubernetes功能
- NetAssist.exe网络调试工具
- CMMI、ISO、6sigma、ITIL软件质量管理体系了解
- SpringBoot多种自定义错误页面方式
- 威廉玛丽学院计算机教授刘旭,国家超级计算济南中心,欢迎您!
- CSS第五天——学成网在线
- 计算机在英语翻译上的运用,有道如何在网页上翻译一句话,有道网页上的字翻译怎么用...
- 【计网】2.2.4 Web缓存/代理服务器
- 【媒体】黑灰产横行,金融行业如何“数智化”反欺诈?
- 安卓开发教你监听手机Home键
- 10年网安经验分享:一般人别瞎入网络安全行业
- 苹果从中国赚六百多亿美元,却在转移生产线,该减轻对它的依赖了
- linux操作系统安全防护
- python分析微博粉丝_python爬虫,对粉丝夺宝的一次数据分析
- mysql表的增删改select 和 where
- 电影院选票系统(C语言课设)
热门文章
- Android开发之RadioButton位于文字右边的显示方法
- Android开发之listview添加头布局(header)和脚布局(footer)的方法
- 函数式编程笔记 01
- 2017中国新型智慧城市创新50强在京发布
- 网络管理员的爱情,不解释...
- js 获取url多个参数
- php无法写入word文档,PHP生成WORD文档的问题
- web业务系统权限控制
- mfc搜索新建access字段_MFC ODBC类 Access数据库的操作
- js方式调用php_javascript调用PHP和PHP调用javascript的方法