什么叫母函数_母函数和矩母函数

什么叫母函数_母函数和矩母函数生成函数(母函数)什么是生成函数:wiki上的介绍在数学中,某个序列(an)n∈N\large{\displaystyle(a_{n})_{n\in\mathbb{N}}}(an​)n∈N​的母函数(又称生成函数,英语:Generatingfunction)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

生成函数(母函数)

什么是生成函数:wiki上的介绍

在数学中,某个序列 ( a n ) n ∈ N \large {\displaystyle (a_{n})_{n\in \mathbb {N} }} (an)nN母函数(又称生成函数,英语:Generating function)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法

母函数可分为很多种,包括普通母函数指数母函数L级数贝尔级数狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型。

母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目。

生成函数的定义: g ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + . . . \large g(x)=a_0+a_1x+a_2x^2+a_3x^3+… g(x)=a0+a1x+a2x2+a3x3+ g ( x ) \large g(x) g(x)是序列 a 0 , a 1 , a 2 , . . . a_0,a_1,a_2,… a0,a1,a2,的生成函数, x x x充当形式参数没有意义。

小题


一、

有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?每种重量各有几种可能方案?

Jetbrains全家桶1年46,售后保障稳定

我们用母函数来解决这个问题

1个1克砝码可以看成1+x^1,1表示不取,x^1表示取一个,以下同理
1个2克砝码可以看成1+x^2
1个3克砝码可以看成1+x^3
1个4克砝码可以看成1+x^4

那么生成函数就是

g ( x ) = ( 1 + x 1 ) ( 1 + x 2 ) ( 1 + x 3 ) ( 1 + x 4 ) = 1 + x + x 2 + 2 x 3 + 2 x 4 + 2 x 5 + 2 x 6 + 2 x 7 + x 8 + x 9 + x 10 \large g(x)=(1+x^1)(1+x^2)(1+x^3)(1+x^4)\\=1+x+x^2+2x^3+2x^4+2x^5+2x^6+2x^7+x^8+x^9+x^{10} g(x)=(1+x1)(1+x2)(1+x3)(1+x4)=1+x+x2+2x3+2x4+2x5+2x6+2x7+x8+x9+x10

这个函数中可以看出重量为3克的方案有两种,重量为7的方案有两种,重量为10的有1种。

不难发现指数表示重量,系数表示方案数。


二、

求用1分、2分、3分的邮票贴出不同数值的方案数:
大家把这种情况和第一种比较有何区别?第一种每种是一个,而这里每种是无限的。

那么生成函数就是 g ( x ) = ( 1 + x + x 2 + x 3 + . . . ) ( 1 + x 2 + x 4 + x 6 + . . . ) ( 1 + x 3 + x 6 + x 9 + . . . ) \large g(x)=(1+x+x^2+x^3+…)(1+x^2+x^4+x^6+…)(1+x^3+x^6+x^9+…) g(x)=(1+x+x2+x3+)(1+x2+x4+x6+)(1+x3+x6+x9+)

以展开后的x^4为例,其系数为4,即4拆分成1、2、3之和的拆分方案数为4;

即 :4=1+1+1+1=1+1+2=1+3=2+2


三、

设有n个标志为1,2,…,n的网袋,第i个(i=1,2,…n)网袋里放有ni个球。不同网袋里的球是不同的,而同一网袋里的球则是没有差别的,认为是相同的。询问从中取r个球的方案数。

设生成函数 g ( x ) = ( 1 + x 1 + x 2 + . . . + x n 1 ) ( 1 + x 1 + x 2 + . . . + x n 2 ) . . . \large g(x)=(1+x^1+x^2+…+x^{n1})(1+x^1+x^2+…+x^{n2})… g(x)=(1+x1+x2++xn1)(1+x1+x2++xn2)

最后指数为r的那一项的系数就是方案数。


总结一下,生成函数大多用来解决有限或无限物体的组合方案。

给出通用模板,其实就是暴力拆这个函数罢了。

#include<cstdio>
using namespace std;
int N,g[2][125];
int main(){ 
   
	while(~scanf("%d",&N)){ 
   
		for(int i=0;i<=N;++i) g[1][i]=1,g[0][i]=0;
		for(int i=2;i<=N;++i){ 
   
			for(int j=0;j<=N;++j)
			for(int k=0;k<=N-j;k+=i) g[i&1][j+k]+=g[1-(i&1)][j];
			for(int j=0;j<=N;++j) g[1-(i&1)][j]=0;
		}
		printf("%d\n",g[N&1][N]);
	}
	return 0;
}

以上是一些基础,接下来给一道难题(反正我一点也不会,逃):BZOJ4001

不会也没有关系,我们慢慢来。


特殊情况

a = { 1 , 1 , 1 , 1 , . . . } a=\{1,1,1,1,…\} a={
1,1,1,1,}
f ( x ) = 1 + x + x 2 + x 3 + . . . = 1 1 − x \large f(x)=1+x+x^2+x^3+…=\frac{1}{1-x} f(x)=1+x+x2+x3+=1x1

这又是为什么呢?

在母函数中, x x x作为形式参数,本身是没有意义的。

所以我们只要能找到一个函数代表它即可。

由于 1 1 − x \frac{1}{1-x} 1x1的泰勒展开式为 1 + x + x 2 + x 3 + . . . 1+x+x^2+x^3+… 1+x+x2+x3+,所以 f ( x ) = 1 1 − x f(x)=\frac{1}{1-x} f(x)=1x1

拓展 f ‘ ( x ) = 1 + 2 x + 3 x 2 + 4 x 3 + . . . = 1 ( 1 − x ) 2 = ( 1 1 − x ) 2 = f 2 ( x ) \large f`(x)=1+2x+3x^2+4x^3+…=\frac{1}{(1-x)^2}=(\frac{1}{1-x})^2=f^2(x) f(x)=1+2x+3x2+4x3+=(1x)21=(1x1)2=f2(x)

f ‘ ‘ ( x ) = 1 + 3 x + 6 x 2 + 10 x 3 + 15 x 4 . . . = 1 ( 1 − x ) 3 = f 3 ( x ) \large f“(x)=1+3x+6x^2+10x^3+15x^4…=\frac{1}{(1-x)^3}=f^3(x) f‘‘(x)=1+3x+6x2+10x3+15x4=(1x)31=f3(x)

推广 1 ( 1 − x ) k = ∑ i ∞ C i + k − 1 k − 1 x i = f k ( x ) \large \frac{1}{(1-x)^k}=\sum_{i}^{\infty} C_{i+k-1}^{k-1}x^i=f^k(x) (1x)k1=iCi+k1k1xi=fk(x)

用组合数学中的所谓“隔板法”求一下,第 i i i项的系数就是 C i + k − 1 k − 1 C_{i+k-1}^{k-1} Ci+k1k1


斐波那契通项公式

下面我们用生成函数求斐波那契数列的通项公式:

首先 f ( x ) = x + x 2 + 2 x 3 + 3 x 4 + 5 x 5 + . . . \large f(x)=x+x^2+2x^3+3x^4+5x^5+… f(x)=x+x2+2x3+3x4+5x5+

f ( x ) f(x) f(x)乘上个 x x x,然后相减

f ( x ) − x ∗ f ( x ) = ( x + x 2 + 2 x 3 + 3 x 4 + . . . ) − ( x 2 + x 3 + 2 x 4 + 3 x 5 + . . . ) = x + x 3 + x 4 + 2 x 5 + 3 x 6 = x + x 2 f ( x ) \large f(x)-x*f(x)=(x+x^2+2x^3+3x^4+…)-(x^2+x^3+2x^4+3x^5+…)=x+x^3+x^4+2x^5+3x^6=x+x^2f(x) f(x)xf(x)=(x+x2+2x3+3x4+)(x2+x3+2x4+3x5+)=x+x3+x4+2x5+3x6=x+x2f(x)

f ( x ) f(x) f(x) f ( x ) = x 1 − x − x 2 f(x)=\frac{x}{1-x-x^2} f(x)=1xx2x

然后如何还原成序列呢?

先因式分解

x 1 − x − x 2 = x ( 1 − 1 − 5 2 x ) ( 1 − 1 + 5 2 x ) \large \frac{x}{1-x-x^2}=\frac{x}{(1-\frac{1-\sqrt{5}}{2}x)(1-\frac{1+\sqrt{5}}{2}x)} 1xx2x=(1215
x)(121+5
x)
x

用裂项法 1 n ( n + k ) = 1 k ( 1 n − 1 n + k ) \frac{1}{n(n+k)}=\frac{1}{k}(\frac{1}{n}-\frac{1}{n+k}) n(n+k)1=k1(n1n+k1)

x ( 1 − 1 − 5 2 x ) ( 1 − 1 + 5 2 x ) = 1 ( 1 − 1 − 5 2 x ) ( ( 1 − 1 − 5 2 x + ( − 5 x ) ) x = 1 − 5 ( 1 1 − 1 − 5 2 x − 1 1 − 1 + 5 2 x ) = − 1 5 1 1 − 1 − 5 2 x + 1 5 1 1 − 1 + 5 2 x \large \frac{x}{(1-\frac{1-\sqrt{5}}{2}x)(1-\frac{1+\sqrt{5}}{2}x)}\\ \large=\frac{1}{(1-\frac{1-\sqrt{5}}{2}x)((1-\frac{1-\sqrt{5}}{2}x+(-\sqrt{5}x))}x\\ \large=\frac{1}{-\sqrt{5}}(\frac{1}{1-\frac{1-\sqrt{5}}{2}x}-\frac{1}{1-\frac{1+\sqrt{5}}{2}x})\\ \large=-\frac{1}{\sqrt{5}}\frac{1}{1-\frac{1-\sqrt{5}}{2}x}+\frac{1}{\sqrt{5}}\frac{1}{1-\frac{1+\sqrt{5}}{2}x} (1215
x)(121+5
x)
x
=(1215
x)((1215
x+(5
x))
1
x
=5
1
(1215
x
1
121+5
x
1
)
=5
1
1215
x
1
+
5
1
121+5
x
1

把他分裂成等比数列的形式。

a n = − 1 5 ( 1 − 5 2 ) n + 1 5 ( 1 + 5 2 ) n \large a_n=-\frac{1}{\sqrt{5}}(\frac{1-\sqrt{5}}{2})^n+\frac{1}{\sqrt{5}}(\frac{1+\sqrt{5}}{2})^n an=5
1
(215
)n+
5
1
(21+5
)n

这就是斐波那契数列通项公式。


终于写完了,接下来就是多刷例题训练了。

HDU1028

HDU1085

洛谷P2000

BZOJ3028

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200888.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java和 javaw 以及 javaws的区别

    java ,javaw 和 javaws的区别:首先,所有的这些都是java的启动装置,java.exe经常使用,当使用命令行输出到window的时候,会有java.exe进程,通过任务管理器可以看到。通常我们执行一些小的java程序的时候会有java.exe进程在运行。javaw.exe对于我们也比较特殊,我们也能够通过任务管理器看到javaw.exe进程的运行。javaws通

    2022年4月4日
    66
  • java8以后字符串常量池的位置,以及元空间的探秘,使用VisualVM进行实战验证

    java8以后字符串常量池的位置,以及元空间的探秘,使用VisualVM进行实战验证  在网上看了很多博客,解释也比较多,关于字符串常量池的具体位置难以分辨谁真谁假。  对于jdk8以后的版本有人说字符串常量池在元空间中,也有人说字符串常量池存在堆中。  到底谁说的对?他们的说法有依据吗?  今天让我们来一起探讨一下这个问题有人说字符串常量池在java堆中,可又有人说常量池存在元空间中。分享几篇知乎文章关于jvm运行时数据区的模型:1、面试官|JVM为什么使用元空间替换了永久代?2、Java方法区与元空间为了解决这个问题,下面我们通过Idea、VisualVm

    2022年7月28日
    17
  • BestMPRBaseVtk-009-设置默认窗宽窗位

    BestMPRBaseVtk-009-设置默认窗宽窗位今天我们来解决一个小问题,就是让图像加载完了,按照图像自带的窗宽窗位显示,这么形容不知道是否准确,大概意思就是这样吧。目前和MITK对比如下图所示:

    2022年6月23日
    40
  • wxpython入门教程_wxPython 入门教程

    wxpython入门教程_wxPython 入门教程这篇文章是关于wxPython,但wxPython实际是两件事物的组合体:Python脚本语言和GUI功能的wxWindows库(关于wxWindows的介绍,请参阅developerWorks上的“细述wxWindows”)。wxWindows库是为了最大可移植性的C/C++库,而抽取GUI功能。所以wxWindows应用程序与生俱来地可以运行在Win…

    2022年5月21日
    22
  • 常量字符串过长的解决办法_编译异常和运行异常有哪些

    常量字符串过长的解决办法_编译异常和运行异常有哪些如果使用String str = “这是一个很长很长很长 你需要的字符串。”; 出现异常不能正常编译运行时,可以使用下方:StringBuilder sb = new StringBuilder();sb.append(“这是一个很长很长”);sb.append(“很长 你需要的字符串”);字符串太长或字符串其他情况下可使用 : StringBuilder sb = new StringBuilder()…

    2022年8月19日
    9
  • oracle中is not null,oracle之is null和is not null的优化「建议收藏」

    oracle中is not null,oracle之is null和is not null的优化「建议收藏」oracle之优化isnull语句一:isnull的优化方法:通过nvl(字段,j)=j的方式,将字段中为空的数据转化为j,从而正常使用索引。具体实现条件则是:iisnull<===>j=nvl(i,j);注意:使用时必须要确保字段的数据不包含j,例如:(age,15)=15,此时有可能age内容是15,此时不可以,j的值要变换,保证不再age的范围之内。函数介绍:nv…

    2022年8月30日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号