斯特林数(数论)

斯特林数:stirling

概念:

1、第一类斯特林数:把1~n排列成k个非空循环的方案数,用小写s(n,k)或[n k]表示

2、第二类斯特林数:将1~n排成k个非空集合的方案数,用大写S(n,k)或{n,k}表示

第一类斯特林数:

递推:

S(n,k)=s(n-1,k-1)+(n-1)\times s(n-1,k)

边界s(0,0)=1,s(n,k)=0 (n

组合意义:考虑加入n时,可以自己构成环,后者插入一个之前已有的数的后面,复杂度O(nk)

- 与上升幂、下降幂的关系:

上升幂定义:

$$
\ x^ \bar n=x \times (x+1) \times.....\times(x+n-1)
$$

是一个多项式,有

$$
x^ \bar n=\sum_{k=1}^{n}s(n,k)\times x^k
$$

组合意义:考虑把1~n排成k个非空循环序列,然后将每个环染成[1,x]中的某种颜色,等式右边就是枚举环的数量,然后每个环任意染色,等式左边相当与考虑每次加入一个新点n,若构成一个新环,则有x种染色方法,否则插入1个之前已有的数的后面继承其颜色,那么n个点的总方案数就是上升幂

下降幂定义:

$$
x^\bar n=x(x-1)....(x-n+1)
$$

是一个多项式,有:

$$
\ x^\bar n=\sum_{k=1}^{n} \left(-1\right)^ \left(n-k\right)\times s(n,k)\times x^k
$$

  • 性质:

    $$
    s(n,1)=(n-1)!
    $$

     

    $$
    s(n,2)=(n-1)!\times\sum_{i=1}^{n-1}\frac{1}{i}
    $$

     

    $$
    n!=\sum_{k=0}^{n}s(n,k)
    $$

     

    最后一条的组合意义:任意1个排列可以看成一个置换,那么枚举置换中环的数量然后求和就是全排列

s(n,k) k=0 k=1 k=2 k=3 k=4 k=5 k=6
n=0 1
n=1 0 1
n=2 0 1 1
n=3 0 2 3 1
n=4 0 6 11 6 1
n=5 0 24 50 35 10 1
n=6 0 120 274 225 85 15 1

第二类斯特林数:S(n,k)

递推:

$$
S(n,k)=S(n-1,k-1)+k\times S(n-1,k)
$$

边界S(0,0)=1,S(n,k) = 0(n

组合意义:考虑加入n时,可以自己构成一个集合,或者插入一个1之前已有的集合,复杂度O(nk)。第二类斯特林数也可以用小球模型来描述,其对应:n个不同的球,放进k个相同的盒子,不能有空盒子的方案数

  • 与下降幂之间的关系:

    $$
    x^n=\sum_{k=0}^{n}\times x^\underline k
    $$

     

    组合意义:给1~n每个数染[1,x]中的某种颜色,方案数为左边x^n右边枚举一共有k种不同的颜色,把1~n分成k个集合(S(n,k))然后每个集合一次染色

  • 通项公式(容斥):

    $$
    S(n.k)=\frac{1}{k!}\sum_{i=0}^{k}\times s(n,i)\times\left(n-k\right)^n
    $$

     

    组合意义:考虑“n个不同的球,放进k个不同的盒子,可以有空盒子的方案数”,其显然等于k^n。若不能有空盒子,则枚举空盒子的数量i然后容斥,即“n个不同的球,放进k个不同盒子,有至少i个空盒子”的方案数=s(n,i)*(k-i)^n,容斥系数为(-1)^i,最后再除以k!时把盒子不同转化为盒子相同,利用这个容斥可以实现O(nlogn)计算一个S(n,k)

    • 与自然数幂和的关系

      定义:

      $$
      F(n)=\sum_{i=1}^{n}i^k
      $$

       

      暴力计算时间复杂度O(nlogk)

    • 使用第二类stiring数转化为下降幂:

      $$
      F(n)=\sum_{i=1}^{n}\sum_{j=0}^{k}S\{k,j\}=\sum_{i=1}^{n}\sum_{j=0}^{k}S\{k,j\}j!s(i,j)
      $$

       

      $$
      F(n)=\sum_{j=0}^{k}j!\sum_{i=j}^{n}s(i,j)
      $$

       

      这个式子和n相关的杨辉三角上一列求和,等于右下角

      $$
      F(n)=\sum_{j=0}^{k}S\{k,j\}j!s(n+1,j+1)
      $$

       

      这个式子仅枚举k如果O(k^2)预处理S(k,j)那么可以在O(klogk)时间求解上F(n)

S(n,k) k=0 k=1 k=2 k=3 k=4 k=5 k=6
n=0 1
n=1 0 1
n=2 0 1 1
n=3 0 1 3 1
n=4 0 1 7 6 1
n=5 0 1 15 25 10 1
n=6 0 1 31 90 65 15 1

你可能感兴趣的:(数论,算法)