斯特林数与上升幂与下降幂

重新审视 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+n1)
x n ‾ = x ( x − 1 ) ( x − 2 ) . . . ( x − n + 1 ) x ^ {\underline{n}} = x (x - 1) (x - 2) ... (x - n + 1) xn=x(x1)(x2)...(xn+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)(x1)(x2)(xn+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+n1)
= ( − 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!(nk)!n!=k!nk

x p ‾ ≡ x p − x m o d    p x^{\overline{p}}\equiv x^p-x\mod p xpxpxmodp

第二类斯特林数

第二类斯特林数写作 { 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)=2n11 .

说明: 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)=2n11 .

4.   S 2 ( n , n − 1 ) = ( n 2 ) S_2(n, n - 1) = \binom{n}{2} S2(n,n1)=(2n) .

说明:将 n n n 个元素, 划分到 n − 1 n-1 n1 个集合.
那么有 n − 2 n-2 n2 个集合只有 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(n1,k1)+kS2(n1,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)=kS2(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=kS2(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=kS2(n,k)(1)nkxk

考虑用容斥原理直接计算第二类斯特林数.

首先, 我们通过除以系数 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 k1 种选择, 所以答案为 k n − 1 k ^ {n - 1} kn1 , 但这样会算少. 以此类推.

我们考虑容斥原理, 枚举假装有多少个集合没有被划分到

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)(ki)n=i(ik)(1)i(ki)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)=(n1)! .

说明:固定轮换的第 1 1 1 位为 1 1 1 , 那么剩下有 ( n − 1 ) ! (n - 1)! (n1)! 种排列方案.

3.   S 1 ( n , 2 ) = ( n − 1 ) ! H n − 1 S_1(n, 2) = (n - 1)! H_{n - 1} S1(n,2)=(n1)!Hn1 .

说明:对于不连通的计数, 我们的常见做法是然后枚举 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=1n1(x1n1)(x1)!(nx1)!
= ∑ 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=1n1(x1)!(nx)!(n1)!(x1)!(nx1)!
= ( n − 1 ) ! H n − 1 = (n - 1)! H_{n - 1} =(n1)!Hn1

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,n1)=S2(n,n1)=(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]=[n1k1]+[n1k]×(n1)

考虑将 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=0nS1(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)nkS1(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)nkS1(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=0k1(1)i(ik)(x1+x2+...+xki=n(x1,x2,...,xnn)j=1ki(xj1)! .

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(i1)!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=0k1(ik)(1)iFki(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) 了.

利用上升幂求第一类斯特林数

题目在这里

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值