指数型生成函数 及 多项式求ln

指数型生成函数

我们知道普通型生成函数解决的是组合问题,而指数型生成函数解决的是排列问题

对于数列{an},我们定义其指数型生成函数为

G(x)=a0+a1x+a2x22!+a3x33!+a4x44!+=i=0aixii!

那么对于两个数列{an}{bn},其对应成生成函数为

G(x)=i=0aixii!

F(x)=i=0bixii!

那么

F(x)G(x)=(i=0aixii!)(i=0bixii!)=n=0(i=0aixii!bnixni(ni)!)xn=n=0(i=0(ni)aibni)xnn!

由此可见两个指数型生成函数相乘,如果xi的系数表示的是选择i个该物品的方案数,那么F(x)G(x)xi的系数表示的就是从ab中选出i个物品的排列数

一般地,对于多重集合M,从中选取k个元素的排列数,若限定元素ai出现的次数集合为Mi,则该组合数序列的生成函数为

i=1n(mMixmm!)

泰勒展开式

通常,在指数型生成函数的使用过程中,一般都会用到泰勒展开式:

ex=i=0xii!=1+x+x22!+x33!+x44!++xnn!+

扩展的一些式子:

ex+ex2=i=0x2i(2i)!

exex2=i=0x2i+1(2i+1)!

还有一些比较有用的公式:

11x=i=0xi

ln(1+x)=i=0(1)ixi+1i+1

(1+x)a=i=0ai_xii!

sin(x)=i=0(1)ix2i+1(2i+1)!

cos(x)=i=0(1)ix2i(2i)!

多项式求ln

意义?
我们要求将一个集合大小为n的方案数,逆向思考
假如我们求出了生成函数F(x),其中xi项的系数表示集合大小为i的方案数
我们构造一个函数

G(x)=F(x)1!+F2(x)2!+F3(x)3!+

观察式子发现G(x)xi的系数实际上就是选出若干集合大小刚好为i的方案数
假设这个方案数很好求,我们能很快构造出G(x),我们现在要求F(x)的话就要使用多项式求ln
观察

G(x)=F(x)1!+F2(x)2!+F3(x)3!+=eF(x)

F(x)=lnG(x)

求法

假如我们要求G(x)=lnF(x)
求导得

G(x)=F(x)F(x)

G(x)=F(x)F(x)dx

所以我们只需多项式求导,多项式求逆,多项式乘法,多项式积分
复杂度O(nlogn)

例题BZOJ3456城市规划

posted @   Mychael  阅读(4558)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示