zoukankan      html  css  js  c++  java
  • 斯特林数相关

    斯特林数 往往用于普通幂与下降幂的互相转换,也可以用来做一些计数问题。

    第一类斯特林数第二类斯特林数。我们用 ({nrace m}) 表示 第二类斯特林数,用 ({nrack m}) 表示 第一类斯特林数。

    本文尽量采用比较“组合”的证明方式。当然,其中大部分式子都可以用数学归纳法证明。

    第二类斯特林数

    63GYWDLWTF_0AV58ZU__N_G.png

    第二类斯特林数 ({nrace m}) 表示把 (n) 个不同小球放入 (m) 个相同盒子,盒子不能空的方案数。

    例如把 (4) 个不同小球 ({1,2,3,4}) 放入 (2) 个相同盒子有 (7) 种方案,为:

    ({1}{2,3,4},{2}{1,3,4},{3}{1,2,4},{4}{1,2,3},)

    ({1,2}{3,4},{1,3}{2,4},{1,4}{2,3})

    所以 ({4race 2}=7)

    规定:(0le n<m) 时,({nrace m}=0)

    ({nrace m}) 如何计算呢?

    一、递推

    考察 (n) 号小球所在的盒子。

    • 如果为 (n) 号小球单独开一个盒子,此时的方案数即为 ({n-1race m-1})

    • 如果把 (n) 号小球放入先前开的盒子里,你要从先前已经有的 (m) 个盒子里选出一个来放它,方案数为 (m{n-1race m})

    于是得到:

    [{nrace m}={n-1race m-1}+m{n-1race m} ]

    二、容斥

    众所周知,把 (n) 个不同小球放入 (m) 个不同盒子,盒子可以空的方案数为 (m^n)

    先考虑把 (n) 个不同小球放入 (m) 个不同盒子,盒子不能空的方案数。根据容斥原理,必然是 总方案数 减去 钦定一个盒子空了的方案数,加上 钦定两个盒子空了的方案数……等于 (sum_{i=0}^m (-1)^iinom mi(m-i)^n)

    相比第二类斯特林数,刚刚那个东西只是多了盒子的顺序,于是有 (m!{nrace m}=sum_{i=0}^m (-1)^iinom mi(m-i)^n),也就是

    [{nrace m}=frac 1{m!}sum_{i=0}^m (-1)^iinom mi(m-i)^n ]

    ,这就是通项公式了。

    贝尔数 (b_n)表示把 (n) 个不同小球放入若干个相同盒子,盒子不能空的方案数。第二类斯特林数每行的和为贝尔数,即 (b_n=sum_{j=0}^n{nrace j})。但这不是本文的重点。

    第一类斯特林数

    BA2_FMLPS9K_F1.png

    第一类斯特林数 ({nrack m}) 表示将 (n) 个不同元素划分为 (m) 个轮换的方案数。

    例如把 (4) 个不同元素 ({1,2,3,4}) 划入 (2) 个轮换有 (11) 种方案,为:

    ((1)(2,3,4),(1)(2,4,3),(2)(1,3,4),(2)(1,4,3),)

    ((3)(1,2,4),(3)(1,4,2),(4)(1,2,3),(4)(1,3,2),)

    ((1,2)(3,4),(1,3)(2,4),(1,4)(2,3))

    所以 ({4rack 2}=11)

    规定:(0le n<m) 时,({nrack m}=0)

    ({nrack m}) 如何计算呢?

    递推

    考察 (n) 号元素所在的轮换。

    • 如果为 (n) 号元素单独开一个轮换,此时的方案数即为 ({n-1rack m-1})

    • 如果把 (n) 号元素放入先前的轮换里,那么你要从先前有的 ((n-1)) 个间隙里选出一个来插入它,方案数为 ((n-1){n-1rack m})

    于是得到:

    [{nrack m}={n-1rack m-1}+(n-1){n-1rack m} ]

    一些性质: (sum_{j=0}^n{nrack j}=n!,{nrack 1}=(n-1)!)

    考虑大小为 (n) 的一个置换,必然可以分解为若干不相交轮换的复合。

    例如置换(egin{pmatrix}1 & 2 & 3 & 4\4 & 3 & 2 &1\ end{pmatrix}=(1 4)(2 3))

    则恰能分解为 (m) 个不相交轮换的 大小为 (n) 的置换 恰有 ({nrack m}) 个。

    普通幂与下降幂的转换

    下降幂:(a^underline b=prod_{i=0}^{b-1}(a-i)),也即 (A_a^b)

    斯特林数可以用于普通幂与下降幂的互相转换。什么意思呢?

    有如下式子:

    [x^n=sum_{k=0}^n {nrace k}x^underline k\x^underline n=sum_{k=0}^n (-1)^{n-k}{nrack k}x^k ]

    对于第一个式子,考虑用两种方法计算把 (n) 个不同小球放入 (x) 个不同盒子,盒子可以空的方案数:

    • (n) 个球,每个球有 (x) 个盒子可以选,故为 (x^n)
    • 盒子不可以空的方案数为 (x!{nrace x}) ;有球的盒子数为 (k) 时,方案数即 (inom xk k!{nrace k}=x^{underline k}{nrace k}),故答案为 (sum_{k=0}^n {nrace k}x^underline k\)

    用两个式子算同一个东西,必然是相等的。

    对于第二个式子,也能用类似的方法证明,可以自行思考。

    借此,可以用第二类斯特林数加速求自然数 (k) 次幂和,如下:
    ( S_m(n)=sum_{i=0}^n i^m\=sum_{i=0}^nsum_{j=0}^m{mrace j}i^{underline j}\=sum_{j=0}^m{mrace j}sum_{i=0}^ni^{underline j}\=sum_{j=0}^m{mrace j}j!sum_{i=0}^ninom ij\=sum_{j=0}^m{mrace j}j!inom{n+1}{j+1}\=sum_{j=0}^m{mrace j}frac 1{j+1}(n+1)^{underline {j+1}} )
    其中 (m) 为正整数,(n) 为非负整数。

    上升幂:(a^overline b=prod_{i=0}^{b-1}(a+i))

    普通幂和上升幂也有类似的转换。

    [x^n=sum_{k=0}^n {nrace k}(-1)^{n-k}x^overline k\x^overline n=sum_{k=0}^n {nrack k}x^k ]

    斯特林反演

    你发现式子 (x^n=sum_{k=0}^n {nrace k}x^underline k) 的右边有个下降幂。

    你闲得蛋疼想把下降幂转回普通幂。

    你得到 (x^n=sum_{k=0}^n {nrace k}x^underline k)

    (=sum_{k=0}^n {nrace k}sum_{m=0}^k (-1)^{k-m}{krack m}x^m)

    (=sum_{m=0}^nsum_{k=m}^n (-1)^{k-m}{nrace k} {krack m}x^m)

    不论 (x) 取多少,左右两边都要相等。所以右边只有 (x^n) 的系数是 (1),其它系数都是 (0)

    (sum_{k=m}^n (-1)^{k-m}{nrace k} {krack m}=[m=n])

    我们知道有一个二项式反演 (f_n=sumlimits_{j=0}^n(-1)^j{nchoose j}g_jLeftrightarrow g_n=sumlimits_{j=0}^n(-1)^j{nchoose j}f_j)

    现在我们还有一个斯特林反演

    [f_n=sumlimits_{j=0}^n(-1)^j{nrace j}g_jLeftrightarrow g_n=sumlimits_{j=0}^n(-1)^j{nrack j}f_j ]

    这里只证从右推到左(从左推到右是类似的)。

    (f_n=sum_{j=0}^n [j=n]f_j)

    (=sum_{j=0}^nsum_{k=j}^n (-1)^{k-j}{nrace k} {krack j}f_j)

    (=sum_{k=0}^n(-1)^k{nrace k} sum_{j=0}^k (-1)^{j}{krack j}f_j)

    (=sum_{k=0}^n(-1)^k{nrace k} g_k)

    小练习

    1.当 (n)(k) 变成负整数的时候,怎样定义 ({nrace k})(nrack k) 才能满足递推式?

    2.讨论 (sum_{k=0}^n(-1)^k{nrack k}) 的值。

    更快速的计算

    以下不一定是最快的做法,但都只有一只 (log)

    第二类斯特林数·行

    由通项公式:({nrace m}=frac 1{m!}sum_{i=0}^m inom mi(-1)^i(m-i)^n)

    明显是一个卷积,于是做到 (O(nlog n))

    第二类斯特林数·列

    ({nrace m}) 是把 (n) 个不同小球放入 (m) 个相同盒子,盒子不能空的方案数。

    (G(x)) 为非空集合的 (mathbf {EGF})(F_m(x)) 为第二类斯特林数第 (m) 列的的 (mathbf{EGF}),则有 (F_m(x)=frac 1{m!}G^m(x))

    就是一个多项式快速幂,(O(nlog n))

    第一类斯特林数·行

    (x^overline n=sum_{k=0}^n {nrack k}x^k),你发现这恰好就是第一类斯特林数第 (n) 行的 (mathbf {OGF})

    (x^{overline n}=prod_{i=0}^{n-1}(x+i)),就可以分治做到 (O(nlog^2n)) 了。

    但是可以更快。由上可得:

    • (x^overline{n+1}=x^{overline n}(x+n+1))

    • (x^overline{2n}=x^{overline n}(x+n)^{overline n})

      (=x^overline nsum_{k=0}^n {nrack k}(x+n)^k)

      (=x^overline nsum_{k=0}^n {nrack k}sum_{j=0}^k{kchoose j} n^{k-j}x^j)

      (=x^overline nsum_{j=0}^nx^jsum_{k=j}^n {nrack k}{kchoose j} n^{k-j})
      可以看出一个卷积。

    每次卷积是 (O(nlog n)) 的,长度每次翻倍,类似 多项式求逆的分析,可得总复杂度 (O(nlog n))

    第一类斯特林数·列

    注意,(nrack m) 表示恰能分解为 (m) 个不相交轮换的 大小为 (n) 的置换的个数。

    (G(x)) 为轮换的 (mathbf{EGF})(F_m(x)) 为第一类斯特林数第 (m) 列的的 (mathbf{EGF}),则有 (F_m(x)=frac 1{m!}G^m(x))

    多项式快速幂,(O(nlog n))

    例题

    Cards(CF1278F,加强版:luogu P6031)

    (m) 张牌,其中有一张是王牌。将这些牌均匀随机打乱 (n) 次,设有 (x) 次第一张为王牌,求 (x^k) 的期望值。

    答案对 (998244353) 取模。

    (1le kle 5000)(1le n,m<998244353)

    加强版:(1le kle 10^7)(1le n,m<998244353)

    方阵(2018 雅礼集训1-16)

    给出一个 (n imes m) 的矩形,每个位置可以填上 ([1,c]) 中的任意一个数,要求填好后 任意两行互不相同 且 任意两列互不相同,两行或两列相同 当且仅当 对应位置都相等,求方案数。

    答案对 (1004535809) 取模。

    (1le n,mle 5000,1le c<1004535809)

    更多题目

    9019 10237 序列计数

    FJOI2016 建筑师(加强版:CF960G)

    CF932E Team Work

    luogu P6620 组合数问题

    luogu P4827 Crash 的文明世界

    9019 10347 矩阵

    BZOJ 4671 异或图

    更更多题目

    luogu P4091 求和

    CF715E Complete the Permutations

    CF961G Partitions

    参考资料《具体数学》

  • 相关阅读:
    感想2
    感想1
    记录4
    记录3
    记录2
    记录1
    库存物资管理系统-测试
    开学测试
    大二下开学测试有感
    大二下周总结一
  • 原文地址:https://www.cnblogs.com/Camp-Nou/p/12994050.html
Copyright © 2011-2022 走看看