正题
以前讲的东西并不是没有道理,但是如果要更严格地讨论生成函数,我们就要学习他的定义。
普通生成函数:
指数生成函数:
指数生成函数就是普通生成函数多了一个。
这个暂时先记下来,后面再讲有什么用。
先讲讲组合数卷积
如果题目给出两个多项式,要你求他们的组合数卷积,什么意思呢?
也就是给出两个多项式,要你求一个
。
这个怎么做?把组合数拆一拆就好了。
也就是将。
将两个多项式卷起来,然后再将就好了。
当题目给出一系列多项式系数的时候,要你求的可能不是简单的卷积操作,或者简单的组合数卷积操作。
而是要你求,保证
,怎么办!
暴力的话,我们可以直接将暴力卷n次,把第n项加起来就可以了。
但是考虑一系列优美的泰勒展开式:
可以自己试着推导一下。
发现。
可以多项式求逆解决。
再比如说,现在有。
就可以多项式exp解决,假设现在知道F,要求B,也可以多项式ln解决。
所以我们使用生成函数不是为了简单的卷积,而是因为生成函数在的时候收敛。
那么我们就可以使用泰勒展开式把它转化为一些优美的形式。从而使问题得到解决。
所以指数生成函数与普通生成函数的区别就在于,指数生成函数是处理组合数卷积的一种方法,仅此而已。
背熟式子,练好多项式全家桶,这部分就完了。
对于一串数字,我们可以把它写成一条函数,以便于化简和计算。
比如说,那么这个数列的生成函数就是
,而其中的x是没有意义的,真正有意义的只有系数,所以我们在化简式子时,x可以取任意实数。
用生成函数以及一些关于对数、求导之类的数学方法,我们可以把问题简化。
比如说,我们要求。
如果暴力枚举,我们就需要的时间,但是,我们看看生成函数怎么把这个式子简化。
首先构造生成函数。
发现第i项的系数恰好是数列中的第i个数。
所以,我们继续化简这个式子,只要求出每一项的系数就可以了。
因为x取任何值都可以,那我们就让。
所以,利用等比数列求和可以得到:
接着,我们发现,
。
换一下,发现:
所以,我们只需要分治FFT求出,然后再对这个东西求一个逆,再求一个导,最后卷积之后,向右偏移一位,取负,再加上n即可。具体怎么分治FFT,你只需要,不断地用NTT/FFT来合并最底层的两个多项式就可以了,这样的时间复杂度是
的。
那么时间复杂度就降到了。
这就很好地证明了生成函数可以解决一些很复杂的问题。
接着上面有一些对数求导以及积分的概念,这里讲一下:
首先我们要知道,积分是求导的反函数,对数是exp的反函数。
就是 。
接着的。
因为根据链式法则,所以
。
怎么求一个多项式的对数呢?
首先我们可以先把对数的导求出来,在求积分就是答案,因为他们俩是反函数啊。
也就是说

本文深入探讨了生成函数的定义与应用,包括普通生成函数与指数生成函数的区别,以及如何通过生成函数解决复杂的组合数卷积问题。文章详细介绍了多项式求逆、泰勒展开、对数求导等技巧在生成函数中的应用,展示了如何将问题简化并求解。
869

被折叠的 条评论
为什么被折叠?



