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

    第一类斯特林数

    • s(n, m)表示将n个元素分成m个圆排列的方案数
    • 也可以记作(egin{bmatrix}n\mend{bmatrix})

    递推式

    • (egin{bmatrix}n\mend{bmatrix}= egin{bmatrix}n - 1\m - 1end{bmatrix} + (n - 1)egin{bmatrix}n - 1\mend{bmatrix})
    • 表示可以自己单独拿出来成为一个环, 也可以放在任意一个元素的前面

    性质1

    [displaystyle sum_{i=0}^n egin{bmatrix}n\iend{bmatrix} = n! ]

    • 证明:每个排列实际上对应着一个置换
    • 考虑s(n,i)分成的i个环, 实际上就是对应着循环节个数为i的一种置换, 一一对应过去就是所有置换方案就是全排列了

    性质2

    [N(sqrt{N} + sqrt{M}) displaystyle x^{underline{n}}=sum_{i=0}^negin{bmatrix}n\iend{bmatrix}(-1)^{n-i}x^i ]

    • 证明:使用数学归纳法
    • 对于(n == 1)的情况, 显然成立
    • 对于(n > 1)的情况

    [egin{align*} x^{underline{n+1}}&=(x-n)x^{underline n} \ &=(x-n)*sum_{i=0}^negin{bmatrix}n\iend{bmatrix}(-1)^{n-i}x^i\ &=sum_{i=0}^{n+1}egin{bmatrix}n\i-1end{bmatrix}(-1)^{n-i-1}x^i+nsum_{i=0}^{n+1}egin{bmatrix}n\iend{bmatrix}(-1)^{n-i+1}x^i\ &=sum_{i=0}^{n+1}(egin{bmatrix}n\i-1end{bmatrix}+n*egin{bmatrix}n\iend{bmatrix})(-1)^{n+1-i}x^i\ &=sum_{i=0}^{n+1}egin{bmatrix}n+1\iend{bmatrix}(-1)^{n+1-i}x^i end{align*} ]

    • 同理

    [displaystyle x^{overline n}=sum_{i=0}^n egin{bmatrix}n\iend{bmatrix}x^i ]

    • 证明

    [egin{align*} x^{overline {n + 1}}&=(x + n) sum_{i = 0}^negin{bmatrix}n\iend{bmatrix} x ^ i\ &= sum_{i = 0}^{n + 1}egin{bmatrix}n\i - 1end{bmatrix} x ^ i + nsum_{i = 0}^{n + 1}egin{bmatrix}n\iend{bmatrix} x ^ i\ &=sum_{i = 0}^{n + 1}(egin{bmatrix}n\i - 1end{bmatrix} + negin{bmatrix}n\iend{bmatrix})x ^ i\ &= sum_{i = 0} ^ {n + 1}egin{bmatrix}n + 1\iend{bmatrix} x ^ i end{align*} ]

    自然幂数和问题

    • 记录(displaystyle S_k(n) = sum_{i = 1} ^ n i ^ k)
    • 那么考虑

    [egin{aligned} x^{underline{n}}&=sum_{i=0}^negin{bmatrix}n\iend{bmatrix}(-1)^{n-i}x^i\ x ^n&=x^{underline{n}} - sum_{i = 0}^{n - 1}egin{bmatrix}n\iend{bmatrix}(-1) ^ {(n - i)} x^i\ end{aligned} ]

    • 把这个带进式子求得

    [egin{aligned}S_k(n) &= sum_{i = 1}^n i ^ k\ &= sum_{i = 1} ^ n (i^{underline{k}} - sum_{j = 0}^{k - 1} egin{bmatrix}k\jend{bmatrix} (-1) ^ {k - j}i^j)\ &=sum_{i = 1} ^ n i ^{underline{k}} - sum_{j = 0} ^ {k - 1} egin{bmatrix}k\jend{bmatrix} (-1) ^ {k - j}(sum_{l = 1} ^ {n} l ^ j)\ &= frac{(n + 1) ^ {underline{k + 1}}}{k + 1}- sum_{j = 0} ^ {k - 1} egin{bmatrix}k\jend{bmatrix} (-1) ^ {k - j}s_{l}(n) end{aligned} ]

    • 递推即可

    预处理方法

    • 分治fft
    • 构造第一类斯特林数生成函数
      (displaystyle sum_{i=0}^negin{bmatrix}n\iend{bmatrix} x^i=prod_{i=0}^{n-1}(x+i))
    • 显然可行
    • 倍增法
    • (displaystyle F_n(x)=prod_{i=0}^{n-1}(x+i))
    • 那么存在(F_{2n}(x)=F_n(x)F_{n}(x+n))
    • 递归求解(F_n(x)), 然后考虑快速求解(F_n(x + n))
    • 考虑设

    [displaystyle F_n(x) = sum_{i = 0} ^ {n - 1} a_i x ^ i ]

    [egin{aligned} F_n(x+n)&=sum_{i=0}^{n-1}a_i (x+n)^i\ &=sum_{i=0}^{n-1}a_isum_{j=0}^i{ichoose j}n^{i-j}x^j\ &=sum_{i=0}^{n-1}(sum_{j=i}^n {jchoose i}n^{j-i}a_j)x^i end{aligned} ]

    • 后面显然可以卷积

    第二类斯特林数

    • S(n,m)表示把n个元素划分成m个子集的方案数
    • 记作(egin{Bmatrix}n\mend{Bmatrix})

    递推式

    (egin{Bmatrix}n\mend{Bmatrix}=egin{Bmatrix}n-1\m-1end{Bmatrix}+m*egin{Bmatrix}n-1\mend{Bmatrix})

    • 组合意义是放到任意一个集合中或者新建一个集合

    性质1

    [egin{aligned} egin{Bmatrix}n\mend{Bmatrix} &= frac{1}{m!} sum_{i = 0} ^ m (-1) ^ i inom{m}{i}(m - i) ^ n\ &= sum_{i = 0}^m frac{(-1) ^ i}{i!} frac{(m - i) ^ n}{(m - i) !} end{aligned} ]

    • 可以看做进行容斥, 枚举多少个集合不放置, 其余的集合随便放置, 最后每一种情况会统计m!次
    • 显然可以卷积求解

    性质2

    (displaystyle m ^ n = sum_{i = 0}^m egin{Bmatrix}n\iend{Bmatrix} m^{underline{i}})

    • 证明:可以看作将n个求放到m个带标号的盒子内, 那么我们枚举哪些盒子不为空, 则

    [egin{aligned} m ^ n &= sum_{i = 0}^m egin{Bmatrix}n\iend{Bmatrix} inom{m}{i} i!\ &=sum_{i = 0}^m egin{Bmatrix}n\iend{Bmatrix} m^{underline{i}} end{aligned} ]

    容斥

    经典容斥系数的解
    • 证明每个地方只要被覆盖了就会被统计1次答案, 假如这个地方被覆盖了n次, 那么

    [egin{aligned} ans&=sum_{i = 1} ^ n (-1) ^{ (i - 1)} inom{n}{i}\ &= sum_{i = 1} ^ n (inom{n - 1}{i} + inom{n - 1}{i - 1}) (-1)^{i - 1}\ &= sum_{i = 1} ^ {n - 1} inom{n - 1}{i} (-1) ^{i - 1} + sum_{i = 1} ^ n inom{n - 1}{i - 1} (-1) ^{i - 1}\ &= sum_{i = 1} ^ {n - 1} inom{n - 1}{i} (-1) ^{i - 1} + sum_{i = 1} ^ {n - 1} inom{n - 1}{i} (-1) ^{i} + inom{n}{0}\ &=1 end{aligned} ]

    错排问题

    • 考虑枚举那些地方强制相同, 然后其余地方随便放置,

    [egin{aligned} f[n] &= sum_{i = 0} ^ n inom{n}{i} (-1)^i(n - i)!\ &=sum_{i = 0} ^ n (-1) ^i frac{n!}{i!}\ &= (-1) ^ n + nsum_{i = 0} ^ {n - 1}(-1) ^ i frac{(n - 1)!}{i!}\ &= (-1) ^ n + nf[n - 1] end{aligned} ]

    min-max容斥

    • 设S是一个可重集合,max(S)和min(S)分别表示集合中的最大值和最小值,则有如下式子成立:

    [egin{aligned} max(S) &= sum_{Tsubseteq S} (-1) ^ {|T| + 1} min(T)\ min(S) &= sum_{Tsubseteq S} (-1) ^ {|T| + 1} max(T) end{aligned} ]

    • 证明
    • 以第一个式子为例,设max(S)=x,那么只有T={x} 时的min(T) 为x(可能有多个相同的最大值,这时候随便钦点一个就可以了;
    • 对于除此之外的所有T,肯定至少存在一个集合A∩T = ∅, 使得min(T和A每个子集的并)等于min(T),
    • 然后由于从A中选择奇数偶数个元素的方案数相同, 所以正负抵消, 最后只剩下了x

    推广1

    • 在期望下该式子也是成立的, 即

    [egin{aligned} E[max(S)] &= sum_{Tsubseteq S} (-1) ^ {|T| + 1} E[min(T)]\ E[min(S)] &= sum_{Tsubseteq S} (-1) ^ {|T| + 1} E[max(T)] end{aligned} ]

    反演

    反演本质

    • 给定数列({f_i})({g_i})存在

    (displaystyle g_n = sum_{i = 0} ^ n a[n][i] f_i)

    • 这里使用f推出了g, 那么我们反演的过程就是使用g推出f
    • 也就是找到系数数组b,使得
      (displaystyle f_n = sum_{i = 0} ^ n b[n][i] g_i)
    • 引入克罗内克函数(为了好写)
      (delta(i,j)=egin{cases}1&i=j\0&i eq jend{cases})
    • 整合两个式子得到

    [egin{aligned}f_n&=sum_{i=0}^n b[n][i]g_i\&=sum_{i=0}^n b[n][i]sum_{j=0}^ia[i][j]f_j\&=sum_{i=0}^n f_isum_{j=i}^nb[n][j]*a[j][i]end{aligned} ]

    • 同理
      (displaystyle g[n] = sum_{i = 0} ^ n g_i sum_{j = i} ^ n a[n][j] * b[j][i])

    • 显然, 这里能够反演的前提条件是

    [egin{cases} displaystyle sum_{j = i} ^ n b[n][j] * a[j][i] &= delta(n, i)\ displaystylesum_{j = i} ^ n a[n][j] * b[j][i] &= delta(n,i) end{cases} ]

    二项式反演

    (displaystyle f_n=sum_{i=0}^n {n choose i}g_iiff g_n=sum_{i=0}^n (-1)^{n-i}{n choose i}f_i)

    • 证明, 即要证明

    [egin{cases} displaystyle sum_{j = i} ^ n inom{n}{j}(-1) ^ {j - i}inom{j}{i} &= delta(n, i)\ displaystyle sum_{j = i} ^ n (-1) ^ {n - j} inom{n}{j} inom{j}{i} &= delta(n,i) end{cases} ]

    • 仅证第一个, 第二个类似

    [egin{aligned} sum_{j=i}^n{n choose j}(-1)^{j-i}{j choose i}&=delta(n, i)\ sum_{j=i}^n(-1)^{j-i}{n choose i}{n-i choose j-i}&=delta(n,i)\ {n choose i}sum_{d=0}^{n-i}(-1)^{d}{n-i choose d}&=delta(n, i)\ end{aligned} ]

    • 后面这堆式子仅当n等于i的时候取值为1, 否则取值为0, 故得证
    • 另一种形式是

    [egin{aligned}f_n&=sum_{i=0}^n(-1)^i{n choose i}g_i\g_n&=sum_{i=0}^n(-1)^i{nchoose i}f_iend{aligned} ]

    • 证明

    [egin{aligned} sum_{j = i} ^ n (-1) ^ j inom{n} {j} (-1) ^ i inom{j}{i}&= delta(n, i)\ sum_{j = i} ^ n (-1) ^{i + j} inom{n}{i} inom{n - i}{j - i}&=delta(n,i)\ inom{n}{i} sum_{j = i} ^ {n}(-1) ^{j - i}inom{n - i}{j - i} &= delta(n,i) end{aligned} ]

    • 得证

    斯特林反演

    • 式子是

    [egin{aligned} f(n)=sum_{i=1}^n egin{Bmatrix}n\iend{Bmatrix}g(i)iff g(n)=sum_{i=0}^n(-1)^{n-i}egin{bmatrix}n\iend{bmatrix}f(i)end{aligned} ]

    • 需要证明

    [egin{cases} displaystyle sum_{j=i}^n(-1)^{n-j}egin{bmatrix}n\jend{bmatrix}egin{Bmatrix}j\iend{Bmatrix}=delta(n,i) \ displaystyle sum_{j=i}^n(-1)^{j-i}egin{bmatrix}j\iend{bmatrix}egin{Bmatrix}n\jend{Bmatrix}=delta(n,i)end{cases} ]

    • 首先容易得到

    [egin{aligned} x^{underline{n}}=(-1)^n(-x)^{overline{n}}\ x^{overline{n}}=(-1)^n(-x)^{underline{n}} end{aligned} ]

    • 那么

    [egin{aligned} displaystyle m^n&=sum_{i=0}^{n}egin{Bmatrix}n\iend{Bmatrix}(-1)^i(-m)^{overline{i}}\ &=sum_{i=0}^{n}egin{Bmatrix}n\iend{Bmatrix}(-1)^isum_{j=0}^iegin{bmatrix}i\jend{bmatrix}(-m)^j\ &=sum_{i=0}^n m^isum_{j=i}^{n}egin{Bmatrix}n\jend{Bmatrix}egin{bmatrix}j\iend{bmatrix}(-1)^{j-i} end{aligned} ]

    莫比乌斯反演

    • 式子是
      (displaystyle f_n=sum_{d|n}g_diff g_n=sum_{d|n}mu_{frac{n}{d}}f_d)

    • 需要证明

    [egin{cases} displaystyle sum_{j = i} ^ n [j | n] mu(frac{n}{j})[i | j] = delta(i, n)\ displaystyle sum_{j = i} ^ n [j | n] [i | j] mu(frac{j}{i}) = delta(i, n) end{cases} ]

    • 我们来证明
      (displaystyle sum_{j = i} ^ n [j | n] [i | j] mu(frac{j}{i}) = delta(i, n))

    • 首先n不是i倍数的时候答案一定是0

    • 假设n是i的倍数, 那么

    [egin{aligned} &sum_{j = i} ^ n [j | n] [i | j] mu(frac{j}{i})\ &=sum_{d = 1} ^ {frac{n}{i}}[d | frac{n}{i}] mu(d)\ &=delta(n,i) end{aligned} ]

    • 同理可证另一个

    整理自fastle dalao 的笔记。

  • 相关阅读:
    基础总结深入:数据类型的分类和判断(数据、内存、变量) 对象 函数 回调函数 IIFE 函数中的this 分号
    BOM 定时器 通过修改元素的类来改变css JSON
    事件 事件的冒泡 事件的委派 事件的绑定 事件的传播
    DOM修改 使用DOM操作CSS
    包装类 Date Math 字符串的相关的方法 正则表达式 DOM DOM查询
    数组 call()、apply()、bind()的使用 this arguments
    autocad 二次开发 最小包围圆算法
    win10 objectarx向导在 vs2015中不起作用的解决办法
    AutoCad 二次开发 jig操作之标注跟随线移动
    AutoCad 二次开发 文字镜像
  • 原文地址:https://www.cnblogs.com/zzz-hhh/p/13619840.html
Copyright © 2011-2022 走看看