zoukankan      html  css  js  c++  java
  • [学习笔记]斯特林数与斯特林反演

    第二类斯特林数

    \(\begin{Bmatrix}n\\k\end{Bmatrix}\),可记做 \(S(n,k)\),表示 \(n\) 个两两不同元素,划分为 \(k\) 个互不区分的非空子集的方案数。

    \(\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n - 1\\k - 1\end{Bmatrix} + k\begin{Bmatrix}n - 1\\k\end{Bmatrix}\)

    边界\(\begin{Bmatrix}n\\0\end{Bmatrix} = [n = 0]\)

    通项公式

    \(\begin{Bmatrix}n\\k\end{Bmatrix} = \sum_{i = 0}^{m} \frac{(-1) ^{m - i}\ \ i^n}{i! (m - i)!}\)

    考虑设\(G_i\)为放到\(k\)个两两不同的集合的,允许空集的方案,\(F_i\)为两两不同的集合的,不允许空集的方案。

    那么有\(G_i = k^n = \sum_{j = 0}^i\binom{i}{j}F_j\)

    二项式反演可得

    \(F_i = \sum_{j = 0}^i (-1)^{i - j}\binom{i}{j}G_j\\= \sum_{j = 0}^i (-1)^{i - j}\binom{i}{j}j^n\\=\sum_{i = 0}^{m} \frac{i!(-1) ^{i - j}\ \ j^n}{j! (i - j)!}\)

    考虑\(F_i\)\(\begin{Bmatrix}n\\i\end{Bmatrix}\)的关系,因为集合无标号,后者是前者的\(i!\)倍。

    同一行第二类斯特林数的计算

    方法一:直接利用通项公式。

    直接卷积即可。

    \(O(nlogn)\)

    方法二:利用指数型生成函数

    一个盒子装 \(i\) 个物品且盒子非空的方案数为\([i > 0]\),写出其生成函数\(\sum \frac{x_i}{i!} = e^x - 1\),我们知道\(F^k(x)\)就是\(i\)个有标号物品放到\(k\)个有标号的盒子里的指数型生成函数,那么\(\exp F(x) = \sum \frac{F^i(x)}{i!}\),即变成了盒子无标号。

    所以计算多项式快速幂即可,实际看起来比方法一慢。

    第一类斯特林数

    第一类斯特林数,\(\begin{bmatrix}n\\k\end{bmatrix}\),表示把\(n\)个两两不同的元素划分成\(k\)个圆排列的方案数。

    \(\begin{bmatrix}n\\k\end{bmatrix} = \begin{bmatrix}n - 1\\k - 1\end{bmatrix} + *(n - 1)\begin{bmatrix}n - 1\\k\end{bmatrix}\)
    \(\begin{bmatrix}n\\0 \end{bmatrix} = [n = 0]\)

    同一行第一类斯特林数的计算

    构造生成函数。

    \(F_n(x) = \sum_{i = 0}^n \begin{bmatrix}n\\i\end{bmatrix}x^i\)

    那么不难写出\(F_n(x) = (n - 1)F_{n - 1}(x) + xF_{n - 1}(x)\)

    那么有\(F_n(x) = \prod_{i = 0}^{n - 1}(x + i)\)为上升幂,用上升幂的操作也可做到\(O(nlogn)\),具体是斯特林数及斯特林反演

    同一列第一类斯特林数的计算

    单个轮换的指数型生成函数

    \(F(x) = \sum_{i = 1} ^ n\frac{(i - 1) !x^i}{i!} = \sum_{i = 1}^n \frac{x^i}{i}\)

    直接\(k\)个相乘,就是第一类斯特林数的指数生成函数。

    普通数幂及上升幂与下降幂之间的关系

    \(x^{\overline n} = \sum_k \begin{bmatrix}n\\i\end{bmatrix} x^k\)

    \(x^{n} = \sum_k \begin{Bmatrix}n\\i\end{Bmatrix} (-1) ^ {n - k}x^{\overline k}\)

    \(x^{n} = \sum_k \begin{Bmatrix}n\\i\end{Bmatrix} x^{\underline k}\)

    \(x^{\underline n} = \sum_k \begin{bmatrix}n\\i\end{bmatrix} (-1) ^ {n - k}x^k\)

    多项式下降幂与多项式点值标表示的关系

    \(f(x) = \sum_{i = 0}^n b_i x^{\underline i}\)

    \((i,a_i),i = 0...n\)

    \(a_k = \sum^{n}_{i = 0}b_ik^{\underline i}\)

    \(a_k = \sum_{i = 0}^n \frac{bk!}{(k - i)!}\)

    \(\frac{a_k}{k!} = \sum_{i = 0}^k b_i \frac{1}{(k - i)!}\)

    是一个卷积形式。

    斯特林数反演

    \(f(n) = \sum_{i = 0}^n \begin{Bmatrix}n\\i\end{Bmatrix} g(i)\)

    则有\(g(n) = \sum_{i = 0}^n (-1) ^ {n - i}\begin{bmatrix}n\\i\end{bmatrix}f(i)\)

    \(f(i) = \sum_{j = i}^n \begin{Bmatrix}j\\i\end{Bmatrix} g(i)\)

    则有\(g(i) = \sum_{i = 0}^n (-1) ^ {j - i}\begin{bmatrix}j\\i\end{bmatrix}f(i)\)

    反转公式:

    \(\sum_{k = m}^n \begin{bmatrix}n\\k\end{bmatrix}\begin{Bmatrix}k\\m\end{Bmatrix} = [n = m]\)

    \(\sum_{k = m}^n \begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\m\end{bmatrix} = [n = m]\)

  • 相关阅读:
    C++ Primer高速入门之六:数组和指针
    C++ Primer高速入门之六:数组和指针
    C++ Primer高速入门之六:数组和指针
    大学生毕业卖蔬菜,成就财富梦想
    美女毕业去养牛,创造自主牛肉品牌
    情侣合开夫妻店,爱情和努力让他们生活走向光明
    从3万元创业资金到年销售3亿元,看他是如何做到的?
    “海归”创办服装公司,全国竟拥有2000多家网点?
    90后卖地瓜,仅仅一个月就可以赚2万元
    老头创业弄养殖,每亩收入3万元,水蛭为啥这么值钱?
  • 原文地址:https://www.cnblogs.com/dixiao/p/15727857.html
Copyright © 2011-2022 走看看