生成函数

前置芝士

普通型生成函数

是什么?

对于一个无穷项的序列 \(a_0, a_1, a_2, a_3,...\),定义它的普通生成函数为

\[f(x) = \sum_{i = 0} ^ \infty a_i x^i \]

这里 \(x^i\) 仅仅是用作记号

比如我有好多种物品\((a, b, c)\),每种物品分别有 \(k_i\) 种重量,每种物品只能选一个,求重量是 \(t\) 的方案数

我们让

\[(x^{a_{x_1}} + x^{a_{x_x}}+...) * (x^{b_{x_1}} + x^{b_{x_2}} + ...) * (x^{c_{x_1}}+...) \]

最终答案就是 \(x^t\) 的系数

指数生成函数

定义:

对于一个无穷项序列 \(a_0, a_1, a_2, a_3,...\),定义它的指数生成函数为级数:

\[\sum_{k = 0} ^ \infty a_k \frac {x ^ k} {k!} \]

普通生成函数一般用来解决无标号计数问题,指数生成函数常用来解决带标号计数问题。

一般我们给一个排列戴个帽子表示指数生成函数 \(p(n) \to \widehat{p}(x)\) 大小写随意

泰勒级数

就是一些特定式子泰勒展开后类似生成函数的形式

常见的泰勒级数

\[\begin{aligned} e^x &= \sum_{n = 0} ^ \infty \frac {x ^ n} {n!} \\ ln(x + 1) &= \sum_{n = 1} ^ \infty \frac {(-1)^{n + 1}} n x^n \\ \frac 1 {1 - x} &= \sum_{n = 0} ^ \infty x^n \\ sin(x) &= \sum_{n = 0} ^ \infty \frac {(-1) ^ n} {(2n + 1)!} x^{2n + 1} \\ cos(x) &= \sum_{n = 0} ^ \infty \frac{(-1)^n} {(2n)!} x^{2n} \\ (1 + x)^a &= \sum_{n = 0} ^ \infty \frac{a^{\underline{n}}} {n!} x^n \end{aligned}\]

小问号,你是否有很多朋友?看看麦克劳林展开就没了,咳咳

一些结论

part1

  • \(p_n\) 可以表示成一些 \(c_k\) 的不交并,\(\widehat{p}(x) = e^{\widehat{c}(x)}\)

举个例子,排列 \(p(n) = n!\),环排列 \(c(n) = (n - 1)!\)

我们在小学二年级的时候学过,排列可以看成置换,置换由一些轮换组成,也就是说,排列由一些环排列组成

\[\begin{aligned} \widehat{p}(x) &= \sum_{n = 0} ^ \infty p(n) \frac{x^n} {n!} = \frac 1 {1 - x} \\ \widehat{c}(x) &= \sum_{n = 0} ^ \infty c(n) \frac{x ^ n} {n!} = -ln(1 - x) = ln(\frac{1} {1 - x}) \\ \widehat{p}(x) &= e^{\widehat{c}(x)} \end{aligned}\]

但是我们想要证明这个结论,不能用到 \(p\)\(c\) 的性质

\(q_k(n)\) 表示由 \(k\) 个轮换组成的大小为 \(n\) 的置换的方案数

枚举排列由几个环排列组成

\[\begin{aligned} p(n) &= \sum_{k = 0} ^ n q_k(n) \\ \widehat{p}(x) &= \sum_{n = 0} ^ \infty \sum_{k = 0} ^ n q_k(n) \frac{x^n} {n!} \\ &= \sum_{k = 0} ^ \infty \sum_{n = 0} ^ \infty \frac{q_k(n) x^n} {n!} \end{aligned}\]

考虑怎么求 \(q_k(n)\),首先 \(q_1(n) = c(n),\widehat{q_1}(x) = \widehat{c}(x)\)

在求 \(q_2\) 的时候考虑枚举一个环的大小,把 \(c(0)\) 看做 \(0\)

\[q_2(n) = \frac 1 2 \sum_{k = 0} ^ n \binom n k c(k) c(n - k) \]

因为 \(\binom n k\) 是随便选一个环,我想要的是含有编号 \(1\) 的第一个环,枚举会重复所以 \(/2\),那么

\[\begin{aligned} \widehat{q_2}(x) &= \frac 1 2 \sum_{n = 0} ^ \infty \frac{x ^ n} {n!} \sum_{k = 0} ^ n \binom n k c(k) c(n - k) \\ &= \frac 1 2 \sum_{n = 0} ^ \infty \sum_{k = 0} ^ n \frac{c(k) x^k} {k!} \frac{c(n - k) x^{n - k}} {(n - k)!} \\ &= \frac 1 2 \widehat{c}(x) ^ 2 \end{aligned}\]

继续推 \(q_3(n)\) 发现

\[\widehat{q_3}(x) = \frac 1 {3!} \widehat{c}(x)^3 \]

于是我们知道了

\[\widehat{q_k}(x) = \frac 1 {k!} \widehat{c}(x) ^ k \]

那么,设 \(\widehat{q_0}(x) = \frac 1 {0!}\widehat{c}(x)^0\)

\[\widehat{p}(x) = \sum_{k = 0} ^ \infty \widehat{q_k}(x) = \sum_{k = 0} ^ \infty \frac {\widehat{c}(x)^k} {k!} = e^{\widehat{c}(x)} \]

证毕

错排数的生成函数

考虑错排也是排列,只不过轮换的大小 \(>1\)

回到之前的式子,让\(c(1) = 0\),就完美满足了轮换 \(>1\) 的要求

\(\widehat{c}(x)\) 没有了 \(\frac {c(1)} {1!} x^1\) 新的 \(\widehat{c}'(x) = \widehat{c}(x) - x\)

\[\widehat{P}(x) = e^{\widehat{c}(x) - x} = e^{ln(\frac 1 {1 + x}) - x} = \frac {e^{-x}} {1 - x} \]

无向联通图的生成函数

我们要求出无向联通图的生成函数 \(\widehat{B}(x)\)

考虑无向图个数 \(a(n) = 2^{\binom n 2}\)

无向图是无向联通图的不交并

\[\widehat{A}(x) = e^{\widehat{B}(x)} \]

\[\widehat{B}(x) = ln(\widehat{A}(x)) \]

多项式操作

posted @ 2020-06-06 11:42  __int256  阅读(434)  评论(0编辑  收藏  举报