知识点简单总结——斯特林数、斯特林反演

知识点简单总结——斯特林数、斯特林反演

斯特林数

第一类斯特林数: $ n $ 元置换分解为 $ k $ 个独立轮换的方案数,即:

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

第二类斯特林数: $ n $ 个元素分成 $ k $ 个非空集合的方案数,即:

\[\begin{Bmatrix} n \\ k \end{Bmatrix} = k \begin{Bmatrix} n - 1 \\ k \end{Bmatrix} + \begin{Bmatrix} n - 1 \\ k - 1 \end{Bmatrix}. \]

下降幂与上升幂与斯特林反演

下降幂:

\[x^{ \underline{ n } } = x( x- 1 ) \cdots ( x - n + 1 ). \]

上升幂:

\[x^{ \overline{ n } } = x( x + 1 ) \cdots ( x + n - 1 ). \]

以下给出的公式不予证明(咕了)。

反转公式:

\[\sum\limits_{ i } \begin{bmatrix} n \\ i \end{bmatrix} \begin{Bmatrix} i \\ m \end{Bmatrix} ( -1 )^{ n - i } = [ n == m ] \\ \sum\limits_{ i } \begin{Bmatrix} n \\ i \end{Bmatrix} \begin{bmatrix} i \\ m \end{bmatrix} ( -1 )^{ n - i } = [ n == m ] \]

借助反转公式容易证明以下三个等式:

\[\begin{aligned} x^{ \underline{ n } } = \sum_{ k = 0 }^{ n } (-1)^{ n - k } \begin{bmatrix} n \\ k \end{bmatrix} x^{ k } & \Longleftrightarrow x^{ n } = \sum_{ k = 0 }^{ n } \begin{Bmatrix} n \\ k \end{Bmatrix} x^{ \underline{ k } } \\ x^{ \overline{ n } } = \sum_{ k = 0 }^{ n } \begin{bmatrix} n \\ k \end{bmatrix} x^{ k } & \Longleftrightarrow x^{ n } = \sum_{ k = 0 }^{ n } (-1)^{ n - k } \begin{Bmatrix} n \\ k \end{Bmatrix} x^{ \overline{ k } } \\ x^{ \overline{ n } } = \sum_{ k = 0 }^{ n } L( n , k ) x^{ \underline{ k } } & \Longleftrightarrow x^{ \underline{ n } } = \sum_{ k = 0 }^{ n } ( -1 )^{ n - k } L( n , k ) x^{ \overline{ k } } \end{aligned} \]

其中 $ L( n , m ) = \sum\limits_{ i } \begin{bmatrix} n \newline i \end{bmatrix} \begin{Bmatrix} i \newline m \end{Bmatrix} = \binom{ n - 1 }{ m - 1 } \frac{ n! }{ m! } $ 。

而且以上三种关系均可以扩展到任意的 $ f( n ) , g( n ) $ 。

快速求斯特林数的行/列

第一类斯特林数-行

众所周知的有

\[x^{ \overline{ n } } = \sum\limits_{ k = 0 }^{n} \begin{bmatrix} n \\ k \end{bmatrix} x^{ k } \]

所以就是求 $ x^{ \overline{ n } } $ 。

考虑倍增,每次相当于是由 $ f( x ) $ 求 $ f( x + m ) $ 。

设 $ a_{ i } = [ x^{ i } ] f( x ) $ ,有

\[\begin{aligned} f( x + m ) &= \sum\limits_{ i = 0 }^{ n } a_{ i } ( x + m )^{ i } \\ &= \sum\limits_{ i = 0 }^{ n } a_{ i } \sum\limits_{ j = 0 }^{ i } x^{ j } m^{ i - j } \binom{ i }{ j } \\ &= \sum\limits_{ j = 0 }^{ n } \frac{ x^{ j } }{ j! } \sum\limits_{ i = j }^{ n } i!a_{ i } \frac{ m^{ i - j } }{ (i-j)! } \end{aligned} \]

把后面的 $ i!a_{ i } $ 反过来再卷积就好。

第一类斯特林数-列

生成函数。

强制环有标号,单个的EGF $ F( x ) = \sum\limits_{ i = 1 } ( i - 1 )! \frac{ x^{ i } }{ i! } $ 。

m个是 $ G( x ) = F^{ m }( x ) $ 。

快速幂之后除回去 $ m! $ 就好。

但注意由于 $ F( 0 ) $ 不能为 $ 0 $ ,所以要先平移计算完后在算回去。

第二类斯特林数-行

众所周知的有

\[\begin{aligned} m^{ n } &= \sum\limits_{ k = 0 }^{ n } \begin{Bmatrix} n \\ k \end{Bmatrix} m^{ \underline{ k } } \\ &= \sum\limits_{ k = 0 }^{ n } \begin{Bmatrix} n \\ k \end{Bmatrix} \binom{ m }{ k } k! \\ &= \sum\limits_{ k = 0 }^{ m } \begin{Bmatrix} n \\ k \end{Bmatrix} \binom{ m }{ k } k! \\ \end{aligned} \]

\[f( m ) =m^{ n } , g(m) = \begin{Bmatrix} n \\ m \end{Bmatrix} m! \]

二项式反演变成

\[\begin{aligned} \begin{Bmatrix} n \\ m \end{Bmatrix} m! &= \sum\limits_{ k = 0 }^{ m } \binom{ m }{ k } k^{ n } ( -1 )^{ m - k } \\ \begin{Bmatrix} n \\ m \end{Bmatrix} &= \sum\limits_{ k = 0 }^{ m } \frac{ k^{ n } }{ k! } \frac{ ( -1 )^{ m - k } }{ ( m - k )! } \end{aligned} \]

直接上fft卷就好。

第二类斯特林数-列

直接从生成函数的角度考虑。

先强制集合有标号,计算其EGF $ F( x ) = e^{ x } - 1 $ 。

m个集合的答案就是 $ G( x ) = F^{ m }( x ) $ 。

直接多项式快速幂。

最后再除回去 $ m! $ 。

关于 $ F( 0 ) $ 不能为 $ 0 $ 的处理方法同上。

posted @ 2020-07-30 15:50  RikukiIX  阅读(299)  评论(2编辑  收藏  举报