欢迎光临散文网 会员登陆 & 注册

【乐正垂星】母函数是可以被理解的?!

2023-02-18 12:49 作者:在下白狼王  | 我要投稿

1.问题引入:

给定一个大小为n的集合a,求a的子集中有多少个的元素和为k。


(0)暴力:枚举每个子集再求和,时间复杂度约为O(n*2^n),几乎不可接受。

(OI生:这还不简单,背包模板题)


00:25



(1)正解:构建母函数

F(x)=(1+x^a1)(a+x^a1)……(1+x^an)

将其乘开,其中x^k项的系数即为答案。


(2)合理性证明:在乘开的同时,本质上就是在枚举所有的子集。


01:05



2.母函数的推导过程

(0)概念理解:x的意义

也许有人会跟你说x是没有意义的,但是实际上,“x虽然不是一个具体的数,但并不抽象”。(请先三连)

(1)第一节 加法原理和乘法原理

以集合{1,2,3,4,5}为例。对于1,有选或不选共(1+1)种情况。同理,对于另外4个元素都是如此。因此,该集合的子集个数为

(1+1)(1+1)(1+1)(1+1)(1+1)=32

(包括空子集)


仔细观察,这个式子与我们之前得出的母函数的形式几乎完全一致:

本质上,(1+1)……(1+1)就是

(选1不选1)(选2不选2)……(选5不选5)

同时,我们的母函数也是这样如此构造出来的。因此,这两个式子同构(这里是不是说得太简略了一点)。


03:47



或 与 和,是有分配律的。

(Tips:这里的“或”与“和”与bool运算中的概念没什么关系,只是名字差不多,切勿搞混了)

形象的展开:两者同构性得证(《数学频道》)

但是,当我们把函数变为

F(x)=(1+a1)(1+a2)……(1+an)时,没法算出来特定和的子集个数,而是所有子集的和(为什么答案是所有子集之和,我会在笔记最后说明)


原因分析:加法变成了乘法。

因此我们需要寻找一种方法,能够将乘法运算变为加法运算,“正巧,指数运算就有这种性质”。也正是因此,x取任何数都无所谓。但是通过“x什么也不表示”来推导“x没有意义”,是颠因为果的。


06:17


母函数出现了。

(2)不同的母函数(母函数的推广)

将 “或” 与 “和” 推广,运用结合律,可以得到如下的式子:

这与母函数形式及其相似。

原因:+ → 或 ,X → +1,x → 和,这三者是同构的,只有名称上的区别。

(这小写的x怎么跟乘号一模一样啊)



新的问题:计算有3个元素的子集的个数

(注意,我们要用母函数的方式推导,而不是直接用组合数)

推导过程视频说得已经很清楚了。我简单概括一下:先计算出每个数字的加入或不加入的影响,再以“和”运算(即乘法)连接,就得到了——

这也说明了,每一个组合数都是二项式的对应系数。

(3)数列

对于一个数列a,该数列的母函数为

P(x)=a0x^0+a1x^1+a2*x^2……

例:求斐波那契数列的通项公式:

得出F(x)=1/(1-x-x^2),展开,得到其通项公式。



数列part:

用一个数列定义另一个数列(不推荐):

以{bn}={S(a)n}来表示。这里S就不是一个什么数字了,而是类似于一个函数,称作移位算子。

常见的有:

于是,嗯——

能不能像之前处理x那样处理S呢?

可不可以安心地用麦克劳林展开呢?

对于任意的多项式,都有其唯一的逆。除以一个多项式,就相当于乘其逆(怎么有乘法逆元那味儿了)

因此,上面问题的答案均为是。

3.后记:

技术总结:一键三连。


15:21



结尾补充:

为什么对于任意的集合a,其中所有元素与1之和的乘积一定是a的所有子集的元素和呢?


对于第i个元素,不取时,贡献为*1;当取时,贡献即为*ai。


轻松得证。


(本蒟蒻第一次写这么长的笔记,定然有错误,有不足,请各位dalao指教)

【乐正垂星】母函数是可以被理解的?!的评论 (共 条)

分享到微博请遵守国家法律