重新审视 Stirling Number
转载自http://www.mamicode.com/info-detail-1982164.html
原文地址http://www.cnblogs.com/Sdchr/p/7462045.html
原文markdown挂掉没法看了,转载顺便修一下
无标号计数, 带标号计数
我们经常处理的有两种计数类型: 组合计数, 排列计数
但是, 我更喜欢这样称呼:
组合计数为无标号计数,排列计数为带标号计数
因为它能反应我们直观看到的
无标号计数有一个等价的概念:定序计数.
把无标号的元素按照某种指标唯一地规定顺序, 那么无标号的方案与定序的方案一一对应
例如, 对于集合 4 , 2 , 5 , 1 {4, 2, 5, 1} 4,2,5,1 , 我们按照集合元素从小到大定序, 得到 ( 1 , 2 , 4 , 5 ) (1, 2, 4, 5) (1,2,4,5) , 那么 4 , 2 , 5 , 1 {4, 2, 5, 1} 4,2,5,1 对应有且仅有 ( 1 , 2 , 4 , 5 ) (1, 2, 4, 5) (1,2,4,5)
按照集合元素从小到大定序, 这是一种很常见的观念
带标号计数有一个等价的概念:任意定序计数
例如, 对于集合
4
,
2
,
5
,
1
{4, 2, 5, 1}
4,2,5,1 , 我们可以任意的定序, 即进行无穷次 random_shuffle
, 那么得到
(
4
,
2
,
5
,
1
)
,
(
4
,
2
,
1
,
5
)
,
.
.
.
.
.
.
(4, 2, 5, 1) , (4, 2, 1, 5) , ......
(4,2,5,1),(4,2,1,5),......
无标号计数 与 带标号计数 之间存在数量关系, 即 定序计数 与 任意定序计数 的关系
设我们计数的对象为 m m m 个, 无标号计数的答案为 x x x , 带标号计数的答案为 y y y , 那么 y = m ! x y=m!x y=m!x
下降幂与上升幂
x
n
‾
=
x
(
x
+
1
)
(
x
+
2
)
.
.
.
(
x
+
n
−
1
)
x ^ {\overline{n}} = x (x + 1) (x + 2) ... (x + n - 1)
xn=x(x+1)(x+2)...(x+n−1)
x
n
‾
=
x
(
x
−
1
)
(
x
−
2
)
.
.
.
(
x
−
n
+
1
)
x ^ {\underline{n}} = x (x - 1) (x - 2) ... (x - n + 1)
xn=x(x−1)(x−2)...(x−n+1)
上升幂与下降幂的关系
(
−
x
)
n
‾
=
(
−
1
)
n
x
n
‾
(-x)^ {\underline{n}} = (-1) ^ n x ^ {\overline{n}}
(−x)n=(−1)nxn
(
−
x
)
n
‾
=
(
−
1
)
n
x
n
‾
(-x)^ {\overline{n}} = (-1) ^ n x ^ {\underline{n}}
(−x)n=(−1)nxn
证明
(
−
x
)
n
‾
(-x) ^ {\underline{n}}
(−x)n
=
(
−
x
)
(
−
x
−
1
)
(
−
x
−
2
)
(
−
x
−
n
+
1
)
= (-x) (-x - 1) (-x - 2) (-x - n + 1)
=(−x)(−x−1)(−x−2)(−x−n+1)
=
(
−
1
)
n
x
(
x
+
1
)
(
x
+
2
)
.
.
.
(
x
+
n
−
1
)
= (-1) ^ n x (x + 1) (x + 2) ... (x + n - 1)
=(−1)nx(x+1)(x+2)...(x+n−1)
=
(
−
1
)
n
x
n
‾
= (-1) ^ n x ^ {\overline{n}}
=(−1)nxn
二项式定理与下降幂的关系
(
n
k
)
=
n
!
k
!
(
n
−
k
)
!
=
n
k
‾
k
!
\binom{n}{k} = \frac{n !}{k ! (n - k) !} = \frac{n ^ {\underline{k}}}{k!}
(kn)=k!(n−k)!n!=k!nk
x p ‾ ≡ x p − x m o d p x^{\overline{p}}\equiv x^p-x\mod p xp≡xp−xmodp
第二类斯特林数
第二类斯特林数写作 { n k } \left\{ \begin{aligned} n \\ k \end{aligned} \right\} {nk} 或 S 2 ( n , k ) S_2(n, k) S2(n,k) , 表示 n n n 个带标号元素划分到 k k k 个无标号非空集合的方案数.
第二类斯特林数应该是除了二项式系数外, 最常用的特殊的数.
我不会告诉你写
S
2
(
n
,
k
)
S_2(n, k)
S2(n,k) 只是因为我想偷懒.
探究一些特殊的情况.
1. S 2 ( 0 , 0 ) = 1 , S 2 ( n , 0 ) = 0 S_2(0, 0) = 1, S_2(n, 0) = 0 S2(0,0)=1,S2(n,0)=0 , 即 S 2 ( n , 0 ) = [ n = 0 ] S_2(n, 0) = [n = 0] S2(n,0)=[n=0] .
2. S 2 ( 0 , 1 ) = 0 , S 2 ( n , 1 ) = 1 S_2(0, 1) = 0, S_2(n, 1) = 1 S2(0,1)=0,S2(n,1)=1 , 即 S 2 ( n , 1 ) = [ n > 0 ] S_2(n, 1) = [n > 0] S2(n,1)=[n>0] .
3. S 2 ( 0 , 2 ) = 0 , S 2 ( 1 , 2 ) = 0 , S 2 ( n , 2 ) = 2 n − 1 − 1 S_2(0, 2) = 0, S_2(1, 2) = 0, S_2(n, 2) = 2 ^ {n - 1} - 1 S2(0,2)=0,S2(1,2)=0,S2(n,2)=2n−1−1 .
说明:
S
2
(
n
,
2
)
S_2(n, 2)
S2(n,2) 是将
n
n
n 个带标号元素划分到
2
2
2 个无标号非空集合的方案数.
我们将 集合 按照 最小元 定序, 任何一个元素, 都可以在
1
1
1 的集合, 但不能全部都在
1
1
1 的集合.
所以
S
2
(
n
,
2
)
=
2
n
−
1
−
1
S_2(n, 2) = 2 ^ {n - 1} - 1
S2(n,2)=2n−1−1 .
4. S 2 ( n , n − 1 ) = ( n 2 ) S_2(n, n - 1) = \binom{n}{2} S2(n,n−1)=(2n) .
说明:将
n
n
n 个元素, 划分到
n
−
1
n-1
n−1 个集合.
那么有
n
−
2
n-2
n−2 个集合只有
1
1
1 个元素, 有
1
1
1 个集合有
2
2
2 个元素.
相当于选择
2
2
2 个元素放置到
1
1
1 个集合, 所以为
(
n
2
)
\binom{n}{2}
(2n) .
5. S 2 ( n , n ) = 1 S_2(n, n) = 1 S2(n,n)=1 .
6. 当 $0 < n < k $ 时, S 2 ( n , k ) = 0 S_2(n, k) = 0 S2(n,k)=0 .
我们尝试将 第二类Stirling
数 的表给刷出来, 然后观察规律.
考虑如何递归求解 S 2 ( n , k ) S_2(n, k) S2(n,k) .
我们考虑最后一个元素 n n n , 它可以开辟一个新的集合, 也可以放置到原来的某个集合.
所以 S 2 ( n , k ) = S 2 ( n − 1 , k − 1 ) + k S 2 ( n − 1 , k ) S_2(n, k) = S_2(n - 1, k - 1) + k S_2(n - 1, k) S2(n,k)=S2(n−1,k−1)+kS2(n−1,k) .
我们尝试通过第二类斯特林数, 建立通常幂与下降幂之间的关系, 即将 x n x ^ n xn 进行表示.
我们尝试利用组合推理的方法, 将 x n x^n xn 视为这样一个问题:
将 n n n 个带标号元素, 每个元素染成 x x x 种颜色中的一种.
我们还可以这样考虑: 枚举最终染的颜色数 k k k, 在 x x x 种元素中选择 k k k 种, 计算将 n n n 个元素划分成 k k k 个带标号集合. 而 n n n 个元素划分成 k k k 个带标号集合的方案数, 等于 k ! k! k! 乘上划分成 k k k 个无标号集合的方案数.
所以
x
n
=
∑
k
(
x
k
)
k
!
S
2
(
n
,
k
)
=
∑
k
S
2
(
n
,
k
)
x
k
‾
x ^ n = \sum_{k} \binom{x}{k} k! S_2(n, k) = \sum_{k} S_2(n, k) x ^ {\underline{k}}
xn=k∑(kx)k!S2(n,k)=k∑S2(n,k)xk
根据上升幂与下降幂的关系, 我们还可以得到通常幂与上升幂的关系.
( − x ) n = ( − 1 ) n x n = ∑ k S 2 ( n , k ) ( − 1 ) k x k ‾ (-x) ^ n = (-1) ^ n x ^ n = \sum_{k} S_2(n, k) (-1) ^ k x ^ {\underline{k}} (−x)n=(−1)nxn=k∑S2(n,k)(−1)kxk
x n = ∑ k S 2 ( n , k ) ( − 1 ) n − k x k ‾ x ^ n = \sum_{k} S_2(n, k) (-1) ^ {n - k} x ^ {\underline{k}} xn=k∑S2(n,k)(−1)n−kxk
考虑用容斥原理直接计算第二类斯特林数.
首先, 我们通过除以系数 k ! k! k! , 考虑计算将 n n n 个带标号元素划分到 k k k 个带标号集合的方案数.
我们假装 k k k 个集合一定都会被划分到, 那么每个元素有 k k k 种选择, 所以答案为 k n k ^ n kn , 但这样会算多. 于是假装 k k k 个集合中有一个集合没有被划分到, 那么出现这种情况的个数为 ( k 1 ) \binom{k}{1} (1k) , 那么每个元素有 k − 1 k - 1 k−1 种选择, 所以答案为 k n − 1 k ^ {n - 1} kn−1 , 但这样会算少. 以此类推.
我们考虑容斥原理, 枚举假装有多少个集合没有被划分到
S 2 ( n , k ) = ∑ i ( − 1 ) i ( k i ) ( k − i ) n = ∑ i ( k i ) ( − 1 ) i ( k − i ) n S_2(n, k) = \sum_{i} (-1) ^ i \binom{k}{i} (k - i) ^ n = \sum_{i} \binom{k}{i} (-1) ^ i (k - i) ^ n S2(n,k)=i∑(−1)i(ik)(k−i)n=i∑(ik)(−1)i(k−i)n
这是二项卷积的形式, 利用指数生成函数, 我们就可以在 O ( k log k ) O(k \log k) O(klogk) 进行求解 S 2 ( n , 1 ) , S 2 ( n , 2 ) , . . . , S 2 ( n , n ) S_2(n, 1), S_2(n, 2), ..., S_2(n, n) S2(n,1),S2(n,2),...,S2(n,n)
第一类斯特林数
第一类斯特林数写作 [ n k ] \left[ \begin{aligned} n \\ k \end{aligned} \right] [nk] 或 S 1 ( n , k ) S_1(n, k) S1(n,k) , 表示将 n n n 个带标号元素划分到 k k k 个无标号轮换的方案数.
轮换是一种奇妙的结构, [ a , b , c , d ] = [ b , c , d , a ] = [ c , d , a , b ] = [ d , a , b , c ] [a, b, c, d] = [b, c, d, a] = [c, d, a, b] = [d, a, b, c] [a,b,c,d]=[b,c,d,a]=[c,d,a,b]=[d,a,b,c] , 直观上的理解就是一个环.
同样地, 探究一些基本的情况.
1. S 1 ( n , 0 ) = S 2 ( n , 0 ) = [ n = 0 ] S_1(n, 0) = S_2(n, 0) = [n = 0] S1(n,0)=S2(n,0)=[n=0] .
2. S 1 ( n , 1 ) = ( n − 1 ) ! S_1(n, 1) = (n - 1)! S1(n,1)=(n−1)! .
说明:固定轮换的第 1 1 1 位为 1 1 1 , 那么剩下有 ( n − 1 ) ! (n - 1)! (n−1)! 种排列方案.
3. S 1 ( n , 2 ) = ( n − 1 ) ! H n − 1 S_1(n, 2) = (n - 1)! H_{n - 1} S1(n,2)=(n−1)!Hn−1 .
说明:对于不连通的计数, 我们的常见做法是然后枚举 1 1 1 所在的连通块的大小, 这里同样如此.
S
1
(
n
,
2
)
S_1(n, 2)
S1(n,2)
=
∑
x
=
1
n
−
1
(
n
−
1
x
−
1
)
(
x
−
1
)
!
(
n
−
x
−
1
)
!
= \sum_{x = 1} ^ {n - 1} \binom{n - 1}{x - 1} (x - 1)! (n - x - 1)!
=x=1∑n−1(x−1n−1)(x−1)!(n−x−1)!
=
∑
x
=
1
n
−
1
(
n
−
1
)
!
(
x
−
1
)
!
(
n
−
x
)
!
(
x
−
1
)
!
(
n
−
x
−
1
)
!
=\sum_{x = 1} ^ {n - 1} \frac{(n-1)!}{(x-1)! (n - x)!} (x - 1)! (n - x - 1)!
=x=1∑n−1(x−1)!(n−x)!(n−1)!(x−1)!(n−x−1)!
=
(
n
−
1
)
!
H
n
−
1
= (n - 1)! H_{n - 1}
=(n−1)!Hn−1
4. S 1 ( n , n − 1 ) = S 2 ( n , n − 1 ) = ( n 2 ) S_1(n, n-1) = S_2(n, n-1) = \binom{n}{2} S1(n,n−1)=S2(n,n−1)=(2n) .
5. S 1 ( n , n ) = S 2 ( n , n ) = 1 S_1(n, n) = S_2(n, n) = 1 S1(n,n)=S2(n,n)=1 .
6. 当 k > n k > n k>n 时, S 1 ( n , k ) = S 2 ( n , k ) = ( n k ) = 0 S_1(n, k) = S_2(n, k) = \binom{n}{k} = 0 S1(n,k)=S2(n,k)=(kn)=0
第一类斯特林数的通项公式
[ n k ] = [ n − 1 k − 1 ] + [ n − 1 k ] × ( n − 1 ) \left[\begin{aligned}n\\k\end{aligned}\right]=\left[\begin{aligned}n-1\\k-1\end{aligned}\right]+\left[\begin{aligned}n-1\\k\end{aligned}\right]\times (n-1) [nk]=[n−1k−1]+[n−1k]×(n−1)
考虑将 x n ‾ x ^ {\overline{n}} xn 用通常幂进行表示.
∑ i = 0 n S 1 ( n , i ) x i = x n ‾ \sum_{i=0}^{n}S_1(n,i)x^i=x^{\overline{n}} i=0∑nS1(n,i)xi=xn
证明
数学归纳法+通项公式
具体证明在这里
利用上升幂与下降幂的关系, 我们可以将下降幂用通常幂表示.
x
n
‾
x^{\underline{n}}
xn
=
(
−
1
)
n
(
−
x
)
n
‾
=(-1)^n(-x)^{\overline{n}}
=(−1)n(−x)n
=
(
−
1
)
n
∑
k
S
1
(
n
,
k
)
(
−
x
)
k
=(-1)^n\sum_{k}S_1(n,k)(-x)^k
=(−1)nk∑S1(n,k)(−x)k
=
∑
k
(
−
1
)
n
−
k
S
1
(
n
,
k
)
x
k
=\sum_{k}(-1)^{n-k}S_1(n, k)x^k
=k∑(−1)n−kS1(n,k)xk
考虑利用容斥原理求第一类斯特林数.
S 1 ( n , k ) = ∑ i = 0 k − 1 ( − 1 ) i ( k i ) ( ∑ x 1 + x 2 + . . . + x k − i = n ( n x 1 , x 2 , . . . , x n ) ∏ j = 1 k − i ( x j − 1 ) ! S_1(n, k) = \sum_{i = 0} ^ {k - 1} (-1) ^ i \binom{k}{i} (\sum_{x_1 + x_2 + ... + x_{k - i} = n} \binom{n}{x_1, x_2, ..., x_n} \prod_{j = 1} ^ {k - i} (x_j - 1)! S1(n,k)=∑i=0k−1(−1)i(ik)(∑x1+x2+...+xk−i=n(x1,x2,...,xnn)∏j=1k−i(xj−1)! .
令 F = ∑ i = 0 n ( i − 1 ) ! x i i ! = x i i F = \sum_{i = 0} ^ n (i - 1)! \frac{x ^ i}{i!} = \frac{x ^ i}{i} F=∑i=0n(i−1)!i!xi=ixi .
那么 S 1 ( n , k ) = ∑ i = 0 k − 1 ( k i ) ( − 1 ) i F k − i ( n ) S_1(n, k) = \sum_{i = 0} ^ {k - 1} \binom{k}{i} (-1) ^ i F ^ {k - i} (n) S1(n,k)=∑i=0k−1(ik)(−1)iFk−i(n) .
至于如何求出 F 0 , 1 , . . . , k ( n ) F ^ {0, 1, ..., k} (n) F0,1,...,k(n) , 我还没有一个比较好的 idea .
但是假如能求出来, 那么只需要再来一次二项卷积就可以在 O ( n log n ) O(n \log n) O(nlogn) 求出 S 1 ( n , 0 ) , S 1 ( n , 1 ) , . . . , S 1 ( n , n ) S_1(n, 0), S_1(n, 1), ..., S_1(n, n) S1(n,0),S1(n,1),...,S1(n,n) 了.