【学习笔记】基础数学相关-生成函数
我们先用一道题来引入生成函数: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}\)

浙公网安备 33010602011771号