母函数是求解组合数学中计数问题的重要方法,其效率高,编程规范,容易实现。但是,母函数的思想起源和最早应用确实在概率方面。母函数有两种形式,普通型母函数和指数型母函数
——《信息学奥赛之数学一本通》
1、把组合问题的加法法则和幂级数的的乘幂的相加对应起来
2、把离散数列间的相互结合关系对应成为幂级数间的运算关系
什么是普通母函数呢,——把组合问题的加法法则和幂级数的的乘幂的相加对应起来,这句话可能一开始难以理解,不过其实学完了之后很容易理解,母函数的思想很简单—就是把离散数列和幂级数一一对应起来,把离散数列间的相互结合关系对应成为幂级数间的运算关系,最后由幂级数形式来确定离散数列的构造。
1、加法原理:
设事件A有n类方式,每一类方式Ai 中都有mi 中方法,而在Ai , Aj 中任何两种方法都不相同,则完成事件A中的方法共有:
以吃饭为例子,我们可以选择不同的主食来进食,我们可以选择面条,米饭,包子,饼等。
但是我们主要选择一种 主食,那么通常都不会选其他的主食(即事件相互独立)。
但是我们每选择一种主食,我们都有不同的选择:
如面条有:打卤面,炸酱面,拌面,米线,羊肉汤面,小骨汤面,大骨汤面……
如包子有:白菜包子,猪肉包子,牛肉包子,韭菜包子,三鲜包子……
如饼有:烤饼,各类馅饼(青椒、豆腐、头菜、胡萝卜、白菜、猪肉、牛肉)……
…………
所以我们选择主食的选择就是把全部可以选择的主食加起来
如上:选择主食的事件,共有:7+5+8=20种可能
2、乘法原理:
设事件A需要分n个步骤做完,每一类方式Ai中都有mi种方法,则完成事件A的方法共有
例子:
为了构成美好生活的一天,我们吃的选择多了。
早餐有:3种馅饼选择(青椒,头菜,肉)
午餐有:两种面条选择(打卤面,炸酱面)
晚餐有:两种面条选择(打卤面,炸酱面)
请问一天内,有多少种情况构成美好的一天呢?
答案:
ans=3*2*2=12种
(早、中、晚)三个独立的事件,而每个事件有对应的选项,满足乘法原理。
从组合数学的角度来讲:
例如:
比如我们从5个球(球有序号)里拿3个球的
高中数学题目:
展开式中 和 的系数是多少?
解:
1、的系数为:
2、的系数为:
1、如上图,请问从源点到汇点共有多少种情况?
2、可以称出多少种不同重量的物品?
3、若要称出重量为7克的物品,所使用的砝码有多少中本质上的不同的情况?
解:
2、3+6+9=18(种)不同重量的物品
3、若要称出7克的物品???????
解法(1)、枚举。
解法(2)、普通型母函数
对于每一种砝码来讲,以它自身取多少个砝码为独立事件。
就是说,完成一次称重,必须从1g,2g,3g砝码中选取。
至于具体从1g砝码里选取多少个,需要看1g砝码有多少个?
那么砝码种类之间存在的是乘法关系,而选取砝码个数存在的是加法关系。
设a,b,c分别为1g,2g,3g砝码,那么下标代表拿去多少个砝码?
例如: 代表的是:两个重量为1g的砝码。
我们把一次称重的事件设为:W
我们写成编译语言:
转化为命题联结词:
转化为数字逻辑:
发现:砝码种类之间存在的是乘法关系,而选取砝码个数存在的是加法关系
问题来了?请问怎样表示这个 ,……等事件呢?
我们看看结果 写成 主析取范式:
共有64项相加的结果。
那么我们通过怎样的构造这个事件来达到,对于砝码种类里选择是相加关系,对于砝码种类之间是相乘关系呢?
——>用数学的符号表示出来,有没有一种运算,以乘法的形式运算,得到的结果类似加法的关系呢?
构造成:幂运算主要是由于
1、在事件内加法原理时,事件保持相互独立。
2、在做乘法运算时明显满足乘法原理的。
返回去看结果表达的意思:
某一个事件 :
表示1g砝码拿了1个,2g砝码拿了2个,3g砝码拿了3个的一个事件。
表示构成 能够称重为14g的一个事件。
所以我们需要构造出来
幂形式表示事件:
指数表示:根据实际情况进行构造,其中在例子中表示:能够称重多少g
系数表示:事件的方案数,在例子中表示称重 对应指数的重量的事件
:含义为:表示1g砝码拿了1个,2g砝码拿了2个,3g砝码拿了3个,能够称重为14g的一个事件。
表示成:
在例子中构造成普通型母函数:
G(x)=……………………
其中G是generate,生成的意思
母函数=生成函数(Generating function)
请问这个G(x)中x有没有意义,请说明原因?
贴上代码 ( 模拟多项式乘法 ) :
#include
using namespace std;
const int N=1e2;
int n,a[N],b[N],c1[N],c2[N],Max_index;
int main()
{
scanf("%d",&n);
for(int i=0;i
准备知识:泰勒公式、不全相异的全排列。
不全相异的全排列:
枚举:
1、白红红红
2、红白红红
3、红红白红
4、红红红白
分两种情况,白球是分开的,白球是一起的。
指数型母函数有如下定理来描述:
从多重集合中选取k个元素的排列中,若限定元素出现的次数集合为,则该组合数序列的母函数为:
比较普通型母函数和指数型母函数,可以看出普通性母函数的标志函数为1,x,x^2……,而指数型母函数的标志函数为1,x/1!,x^2/2!,x^3/3!,…….指数性母函数的标志函数的物理意义可以这样理解。对于xj/j!表示在一个方案中某个元素出现了j次,而在不同的位置中j次出现是相同的,所以在计算排列总数时,只应算作一次。由排列组合的知识知道,最后的结构应该除以j!。
另外在指数性母函数的使用过程中,一盘都会用到高等数学里介绍的e^x的Taylor展开式:
问题分析:
这实际上求的是S={3x1,2x2,1x3}中取四个的多重集排列数问题,其指数型母函数为:
所以,可以组成38个四位数。
设a,b,c为1,6,8.其中下标为取了多少个,能组合成不同位,不同的数字的事件为G。
把事件G用编译语言表达:
用命题联结词表示:
转化为数字逻辑语言:
我们知道需要用到幂级数把事件表示出来,但是这个问题增加了一个排列组合的,
如何构造才能使得两个事件乘积,会得到下一个事件的方案数。
后来指数型母函数给出了答案。
指数:根据实际情况有不同的含义,例子中为:多少位数字
系数:对应于指数的情况下的 方案数
分母: 与指数相对应的阶乘