母函数浅析

母函数可以用于数列,概率,组合数学中,是个极其强大的工具。

定义

对于一个数列 a0,a1,a2,a3 ,定义 G(x)=a0+a1x+a2x2+a3x3 为其母函数(这里对是否无穷项并没有什么要求)。

看起来没什么用,但是我们看一个例子:

已知母函数 G(x)=Cn0+Cn1x+Cn2x2+Cn3x3

很明显,这是个二项式展开式,那我们不妨将其写成 G(x)=(x+1)n 。这里母函数的作用就体现出来了。我们可以将一个无穷式变成一个收敛形式,便于计算处理。

普通型母函数

首先来看看几个常见普通母函数:

  1. G(x)=11x=1+x+x2+x3+

    由等比数列求和公式可知 G(x)=a1(1qn)1q ,这里的话 q=x,a1=1 。由于 x 可以是任何数,我们不妨设其小于 1 。那么 qn 趋近于 0 ,就得到收敛形式。

  2. G(x)=11kx=1+kx+k2x2+k3x3

    证明同上。

  3. G(x)=1(1x)n=Cn+010+Cn+111x+Cn+212x2+Cn+313x3+Cn+k1kxk

    证明:数学归纳法。

    假设 n 的情况成立,那么对于 n+1

    G(x)=1(1x)n+1=1(1x)n1(1x)kak=i=1kCn+i1i=Cn+1+k1k

    这里用到了 Cmn=Cm1n1+Cm1n,最后的递归边界由于 Cn10=Cn+110 所以就可以滚雪球上去。


虽然好像母函数主要是被用在组合上,但是用其来解数列递推式也非常香(初赛的递推数列题可以用母函数暴力推),这里以斐波那契数列为例:

已知 fn+1=fn+fn1

那么对于其母函数 T ,有:

(1)T=f0+f1x+f2x2+f3x3+(2)xT=f0x+f1x2+f2x3+(3)x2T=f0x2+f1x3+Tf0f1x=xTf0x+x2TT=11xx2

那么我们有了斐波那契数列母函数的收敛形式,只要将其向几个基本的母函数上靠,期望就能得到通项:

(4)T=1(512x)(512x)

可以看出其中有黄金分割率,看起来离正解不远了,我们设其为 ϕ1ϕ2 然后继续:

T=1ϕ1ϕ2(11ϕ1x)(11ϕ2x)=1(11ϕ1x)(11ϕ2x)

然后再裂个项:

T=15(ϕ211ϕ1x+ϕ111ϕ2x)

根据几个基本母函数,斐波那契的通项为:

Fn=15[(1+52)n+1(152)n+1]


除了解递推数列通项,普通型母函数还可以解一些无重复项的组合问题,如质数分解问题,将一个数 n 分解成质数和的形式,有多少种本质不同的方法。

根据题意构建方程:

G(x)=(1+x2+x4+x6+)×(1+x3+x6+)×(1+x5+x10)×

化简后 n 次项的系数即为方法数。

用这种方法甚至可以解决如凑零钱之类的 dp 问题,但根据上例可以发现,系数是要手动爆枚的,所以复杂度上来说并没有什么实际意义。

指数型母函数

基本形式如下:

G(x)=i=0xii!=1+x+x22!+x33!+x44!+

可以注意到阶乘的形式很特别,易联想到 Taylor 展开 ,因为 x 取值并没有什么关系,我们就取 ex 作为其收敛形式(与 ex0 处的展开式相同)。

那么同样,常见的指数型母函数有:

  1. G(x)=ex+ex2=i=0x2i(2i)!=1+x22!+x44!+
  2. G(x)=exex2=i=0x2i+1(2i+1)!=x+x33!+

皆为 Taylor 展开式。

指数型母函数主要是为求解有重复项的组合问题,比如 1,1,2,3 可以组合成的四位数个数,明显是 4!2! 个,这就是为何下面要除阶乘。

注意,最终我们需要的是 xnn! 前的系数,可以发现,下面没有阶乘的项乘出来会自动个乘阶乘,而有阶乘的会把重复部分除掉,刚好达到预计效果。

如果还不明白可以找个例子手动操作一遍。

指数型母函数大多可以通过 Taylor 展开找到通项,这是其优点。

如,求 1,3,5,7,9 可以组成的 n 位数个数。其中 3,7 分别出现偶数次。

依照题意构建母函数:

T=(1+x22!+x44!+)2×(1+x+x22!+x33!+x44!+)3=(ex+ex2)2×e3x=14(e5x+2e3x+ex)=14i=0(5i+2×3i+1)xii!

那么第 n 项的系数是: 5n+2×3n+14


-EOF-
posted @   T_horn  阅读(861)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
点击右上角即可分享
微信分享提示