【学习笔记】基础数学相关-生成函数

我们先用一道题来引入生成函数:P10780 食物

什么是生成函数呢?我们现在有一个序列 \(\{a_i\}\),我们将其写成 \(A(x) = \sum a_ix^i\) 的形式,这种就叫做普通生成函数。

很显然的是对于 \(A(x)\) 这种生成函数,运算规律是和普通函数一样的。

那么我们回归这道题,对于不同的食物我们可以构建不同的选取序列。

  • 承德汉堡:偶数个,因此其对应序列为 \(\{1,0,1,0,1,\cdots\}\),生成函数为 \(\frac{1}{1-x^2}\)

  • 可乐:0 个或 1 个,因此其对应序列为 \(\{1,1,0,0,0,\cdots\}\),生成函数为 \(1+x\)

  • 鸡腿:0 个,1 个或 2 个,因此其对应序列为 \(\{1,1,1,0,0,\cdots \}\),生成函数为 \(1+x+x^2\)

  • 蜜桃多:奇数个,因此其对应序列为 \(\{0,1,0,1,0,1,\cdots\}\),生成函数为 \(\frac{x}{1-x^2}\)

  • 鸡块:4 的倍数个,因此其对应序列为 \(\{1,0,0,0,1,0,\cdots\}\),生成函数为 \(\frac{1}{1-x^4}\)

  • 包子:0 个,1 个,2 个或 3 个;因此其对应的序列为 \(\{1,1,1,1,0,\cdots\}\),生成函数为 \(1+x+x^2+x^3\)

  • 土豆片炒肉:不超过一个;因此其对应序列为 \(\{1,1,0,0,0,\cdots\}\),生成函数为 \(1+x\)

  • 面包:3 的倍数个;因此其对应序列为 \(\{1,0,0,1,0,\cdots\}\),生成函数为 \(\frac{1}{1-x^3}\)

我们得到了很多很多的生成函数,把这些乘起来,化简得到 $f(x) = \frac{x}{(1-x)^4} $,后面的就很板了

发现这道题似乎很牛!我们定义一个 \(f_n\) 表示有 \(n\) 个点的二叉树个数,\(g_n\) 表示 \(n\) 个节点的二叉树的叶子节点总数喵。

那么对于 \(f_n\)\(g_n\) 有什么关系呢?打表发现 \(g_n=nf_{n-1}\),我们去尝试证明它们的关系嘛喵。

很容易发现这个 \(f_n\) 是卡特兰数啊,我们知道卡特兰数的递推公式是 \(C_n = \sum_{i=0}^{n-1} C_{i}C_{n-1-i}\),而通过枚举左右子树大小可以得出 \(f_n\)\(g_n\) 的关系:\(g_n = 2\times \sum_{i=0}^{n-1}g_if_{n-i-1}\)

我们设 \(F(x)\)\(f\) 的生成函数,\(G_(x)\)\(g\) 的生成函数,那么可以得到 \(F(x)=xF(x)^2+1,G(x)=2xF(x)G(x)+x\)

可以发现 \(F(x)\) 封闭形式为 \(\frac{1-\sqrt{1-4x}}{2x}\),可以得出 \(G(x)=\frac{x}{\sqrt{1-4x}}=x\sum_{i=0}\dbinom{-\frac{1}{2}}{i}(-4x)^i\)

我们计算得到 \(g_n=\dbinom{-\frac{1}{2}}{n-1}(-1)^{n-1}2^{2(n-1)}\),化简后得到 \(g_n=\dbinom{2n-2}{n-1}\)

直接计算 \(ans=\frac{f_n}{g_n}\)\(f_n\) 是卡特兰数,下面的刚才算出来了,可以算出 \(ans=\frac{n(n+1)}{4n-2}\)

斐波那契额数列的生成函数是 \(\text {Fib}(x)=x\text {Fib}(x)+x^2\text {Fib}(x)+x\),封闭形式为 \(\frac{1-x-x^2}{x}\)

拆分为恰好 \(k\) 个数时,答案的生成函数是 \(\text{Fib}(x)^k\),那么总的答案就是 \(G(x)=\sum_{i=0} \text {Fib}(x)^i = \frac{1-x-x^2}{1-2x-x^2}\)

posted @ 2025-10-21 15:52  Vsinger_洛天依  阅读(6)  评论(0)    收藏  举报