生成函数(母函数)
对于一个数列A={a0,a1,a2,a3,...},存在函数F(x)=∞∑i=0ai∗xi则称函数F(x)为数列A的生成函数(母函数)。
需要注意的是 生成函数的实际值与自变量没有任何意义,我们在意的只是他的每一项系数与指数。
生成函数相乘(卷积)可以用来解决类似求相加得到某个数的方案数
例如现在有可重正整数集合A,B,要求把A中任意一个元素a和B中任意一个元素b相加得到一个结果,求得到每一个数的方案数。
设numa[x],numb[x]分别为x在A,B中的个数,则有
A(x)=∞∑i=0numa[i]∗xi,B(x)=∞∑i=0numb[i]∗xi
有以下公式:
A(x)∗B(x)=(∞∑i=0numa[i]∗xi)∗(∞∑i=0numb[i]∗xi)=∞∑i=0i∑j=0numa[j]∗numb[i−j]∗xi
所以将A(x)与B(x)利用NTT卷积,得到的多项式每一项系数即为答案。
泰勒展开
对于一个函数f(x)和在其定义域内的值x0,若f(x)在x0处存在任意阶导数(多项式就是典型的例子),则定义f(x)在x0处的泰勒展开为
f(x)=∞∑i=0f(i)(x0)(x−x0)ii!
通常情况下,x0可以取0,即
f(x)=∞∑i=0f(i)(0)xii!
一些常用的泰勒展开:
ex=∞∑i=0xii!
e−x=∞∑i=0(−1)ixii!
ex+e−x2=∞∑i=0x2i2i!
ex−e−x2=∞∑i=0x2i+1(2i+1)!
指数型生成函数
对于一些排列与组合的问题,我们引入指数型生成函数:
G(x)=∞∑i=0xii!
这种函数同样满足以上的性质。
例: 给定四种颜色abcd给长度为N的格子染色,要求颜色ab个数必须为偶数,求方案数。
可以写出生成函数:
(∞∑i=0x2i(2i)!)2(∞∑i=0xii!)2=(ex+e−x2)2(ex)2=e4x+2e2x+14
=14+∑∞i=04ixii!+2∑∞i=02ixii!4=14+∞∑i=04i+2i+14xii!
于是答案即为4N+2N+14
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现