zoukankan      html  css  js  c++  java
  • [学习笔记]生成函数

    不懂是第几次重修了。
    现在可能比较懂了一点。
    以下可能略过某些过程。

    OGF

    fib数列

    写作生成函数\(F(x) = x + x F(x) + x ^2 F(x)\)

    \(F(x) = \frac{x}{1 - x - x^2}\)

    \((1 - ax) (1 - bx) = 1 - x - x^2\)

    解得 \(a = \frac{1 + \sqrt 5}{2},b = \frac{1 - \sqrt 5}{2}\)

    所以有\(F(x) = \frac{1}{\sqrt 5}(\frac{1}{1 - ax} - \frac{1}{1 - bx}) = \sum \frac{a^i - b^i}{\sqrt 5} x^i\)

    则有\(f_n = \frac{1}{\sqrt 5}(a^i - b^i)\)

    微积分

    \(\frac{d}{dx}(\sum f_nx^n) = \sum (n + 1)f_{n + 1}x^n\)
    \(\int(\sum f_n x^n)dx = \sum frac{f_{n - 1}}{n} x^n + C\)

    一些OGF的例子

    image

    卡特兰数

    参见浅谈卡特兰数中生成函数一节。

    整数拆分

    \(\sum a_i = n(a_{i + 1}\leq a_i)\)的方案数。

    \(P(x) = \prod_{i = 1}\frac{1}{1 - x^i}\)

    实际上是对每个数系合并。

    五边数定理

    \(\prod_{i = 1}\frac{1}{1 - x^i} = \sum (-1) ^ k x ^ {k (3k \pm 1} / 2\\ = 1 - x - x ^ 2 + x ^ 5 + x ^ 5 - x ^ {12} - x ^ {15} .....\)

    \(P(x)\prod_{i = 1}\frac{1}{1 - x^i} = 1\)

    所以有\(1 + xP(x) + x^2P(x) - x^5 - x^7P(x) .. = P(x)\)

    所以有\(p_n = [n = 0] + p_{n - 1} + p_{n - 2} - p_{n - 5} - p_{n - 7}....\)

    暴力枚举可以在\(O(n\sqrt n)\)内解决该问题。

    EGF

    咕咕咕咕。

    指数型生成函数

    其用来处理一类物品有标号问题。

    \(h_n = \sum_{i = 0}^n\binom{n}{i}f_ig_{n - i}\)

    我们称其为二项卷积。

    那么我们展开组合数。

    \(\frac{h_n}{n!} = \sum_{i = 0}\frac{f_i}{i!} \frac{g_{n - i}}{(n - i)!}\)

    所以\({\frac{h_n}{n!}}\)\({\frac{f_n}{n!}}\)\({\frac{g_n}{n!}}\)的卷积。

    所以这也是为什么指数型生成函数给定的是\(F(x) = \sum \frac{x^i}{i!} f_i\)

    微积分

    \(\frac{d}{dx}\sum f_n \frac{x^n}{n!} = \sum f_{n + 1} \frac{x^n}{n!}\)

    \(\int\sum f_n \frac{x^n}{n!} = \sum_{1 \leq n} f_{n - 1} \frac{x^n}{n!}\)

    发现求导或积分是对一个生成函数完成系数左移或右移。

    如果乘于或除\(x\),就会得到一个类似于\(OGF\)的求导和积分一样的东西:

    \(x\sum f_n \frac{x^n}{n!} = \sum_{1 \leq n} \frac{f_{n - 1}}{n} \frac{x^n}{n!}\)

    \(\frac{1}{x} (\sum f_n \frac{x^n}{n!} - f_0) = \sum(n + 1)\frac{f_{n + 1}}{n} \frac{x^n}{n!}\)

    一些简单的例子

    image

    贝尔数——exp

    定义\(w_n\),为\({1,2,....,n}\)的集合划分为若干不相交非空子集的并的方案数。

    所以有\(w_n = [n = 0] + \sum_{i = 1}^n \binom{n - 1}{i - 1}w_{n - i}\)

    知道右边为\({w_n}\)\({1}\)的二项卷积的\(n - 1\)项,即\(W(x)\)\(e^x\)乘起来右移一位,即积分一下。

    所以\(W(x) = 1 + \int W(x)e^x dx\)

    \(\frac{dW(x)}{dx} = W(x)e^x\)

    \(\frac{dW(x)}{W(x)} = e^xdx\)

    \(ln W(x) = e^x + C\)

    代入\(W(x) = e^x = 1(x = 0)\)

    所以\(C = -1\)

    所以我们得到\(W(x) = \exp(e^x - 1)\)
    我们期望给其一个合理的组合解释。

    考虑\(A(x) = e^x - 1\)是只有一个盒子的方案数。

    考虑每次乘一个\(A(x)\)就相当于多拼上了一个盒子。

    那么\([x^n]A^k(x)\)相当于\(k\)个有标号盒子拼了\(n\)个位置出来,因为我们是无标号的,所以多除一个\(k!\)

    简单无向连接图——ln

    \(f_n\)表示\(n\)个点的简单无向联通图的个数(点带标号)。

    \(g_n\)表示\(n\)个点的简单无向图的个数。

    要求\(f_n\),先用\(g_n\)减去不连通的个数,不连通的话,枚举\(1\)号点所在的联通块大小\(i\),先从\(\binom{n - 1}{i - 1}\)选出和\(1\)在一块的方案数,然后\(f_i\)连成一块,\(g_{n - i}\)任意连。

    \(f_n = g_n - \sum_{i = 1}^{n - 1}\binom{n - 1}{i - 1}f_ig_{n - i}\)

    所以移项得\(g_n = [n = 0] + \sum_{i = 1} ^ n\binom{n - 1}{i - 1}f_ig_{n - i}\)

    我们规定\(g_0 = 1,f_0 = 0\)

    \(ln G(x) = F(x) + C\)
    \(C = 0\)

    所以\(F(x) = ln G(x)\)

    强连通竞赛图计数——求逆

    考虑其求的是所有有哈密顿回路的竞赛图的哈密顿回路个数的期望。

    但实际上所有哈密顿回路的个数很好求,即\((n - 1)!2^{n(n - 1) / 2 - n}\)

    那我们只要求有哈密顿回路的竞赛图。

    其等价于强连通的竞赛图。

    所以令\(f_n\)\(n\)个点的强连通竞赛图,\(g_n\)为竞赛图个数。

    \(g_n = \sum_{i = 1}^n \binom{n}{i}f_ig_{n - i}\)
    相当于枚举拓扑序最小的强连通分量的大小。

    于是有$G(x) = G(x) F(x) $

    所以有\(G(x) = \frac{1}{1 - F(x)}\)

    所以有\(F(x) = 1 - \frac{1}{G(x)}\)

    无穷背包方案数——ln/exp

    \(f_{i_j} = f_{i- 1,j} + f_{i,j - vi}\)
    \(F_i(x) = \sum f_{i,j}x^j\)

    所以有\(F_i(x) = F_{i - 1}(x) + x^{vi}F_i(x)\)
    所以最后答案是
    \(\prod \frac{1}{1 - x^{vi}}\)
    考虑如何算这个东西
    发现\(\prod\)很难算。
    但其取对数后会变成加法。

    \(F(x) = exp ln F(x)\\=exp\sum_{i = 1}^n ln \frac{1}{1 - x^{jvi}}\\=exp \sum_{i = 1}^n\sum_{1\leq j}\frac{x^{jvi}}{j}\)

    \(vi = k\)\(b_k\)

    所以有\(exp\sum_{1 \leq k}b_k\sum_{1\leq j}\frac{x^{jk}}{j}\)

    因为\(exp\)只依赖前\(m\)项,所以我们枚举\(jk\leq m\)即可。

    \(ln \ exp\)的另一个用途,在\(\prod 和\)\sum$中反复横跳。

  • 相关阅读:
    FastAdmin 提示框 toastr 改变文字
    FastAdmin 将会员模块升级为基础模块的升级指导
    随笔
    随笔
    c++11 lambda(了解)
    c++11 类型推断
    boost::archive::text_oarchive
    std::ostringstream
    随笔
    随笔1
  • 原文地址:https://www.cnblogs.com/dixiao/p/15728064.html
Copyright © 2011-2022 走看看