zoukankan      html  css  js  c++  java
  • 斯特林数(斯特林反演)学习笔记

    引入

    关于斯特林数的定义可以看看这里:https://www.cnblogs.com/hbyer/p/10576904.html,这是我以前写的。

    当然也可以上百度看看定义。

    这里不加说明的给出递推式:

    [egin{align}s_1(n,k)&=(n-1)cdot s_1(n-1,k)+s_1(n-1,k-1)\ s_2(n,k)&=kcdot s_2(n-1,k)+s_2(n-1,k-1)end{align} ]

    卷积求第二类斯特林数

    首先有一个组合意义很明显的式子:

    [n^k=sum_{i=0}^{k}s_2(k,i)inom{n}{i}i! ]

    就是说(n)个位置填(k)中颜色,我们可以分成若干组,每组颜色不同。

    我们可以把后面的值为(0)的项补全:

    [n^k=sum_{i=0}^{n}s_2(k,i)inom{n}{i}i! ]

    对其进行二项式反演:

    [s_2(k,n)n!=sum_{i=0}^{n}(-1)^{n-i}inom{n}{i}i^k ]

    这个可以写成卷积形式,顺便把变量换下:

    [s_2(n,k)=sum_{i=0}^kfrac{(-1)^{k-i}}{(k-i)!}cdot frac{i^n}{i!} ]

    阶乘幂

    阶乘幂的定义是这样的:

    上升幂:(x^{overline n}=prod_{i=1}^{n}(x+i-1))

    下降幂:(x^{underline n}=prod_{i=1}^{n}(x-i+1))

    显然可以根据组合数的定义得到:

    [x^{underline n}=inom{x}{n}n! ]

    还有两个这样的式子:

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

    把右边拆开就能证明了。

    阶乘幂与斯特林数的转化

    所以上面卷积的第一个式子可以写成这样:

    [n^k=sum_{i=0}^{k}s_2(k,i)inom{n}{i}i!=sum_{i=0}^{k}s_2(k,i)n^{underline i} ]

    还有一个第一类斯特林数和上升幂的关系

    [x^{overline n}=sum_{i=0}^{n}s_1(n,i)x^i ]

    怎么来的我也不是很清楚,但是可以通过数学归纳来证明:

    [egin{align} x^{overline {n}}&=(x+n-1)sum_{i=0}^{n-1}s_1(n-1,i)x^i\ &=sum_{i=0}^{n-1}s_1(n-1,i)x^{i+1}+sum_{i=0}^{n-1}(n-1)cdot s_1(n-1,i)x^i\ &=sum_{i=1}^{n}s_1(n-1,i-1)x^{i}+sum_{i=1}^{n-1}(n-1)cdot s_1(n-1,i)x^i\ &=sum_{i=1}^{n}ig(s_1(n-1,i-1)+(n-1)s_1(n-1,i)ig)x^{i}\ &=sum_{i=0}^{n}s_1(n,i)x^i end{align}a ]

    注意由于(s_1(n,0)=s_1(n,n+1)=0),所以中间边界条件其实不需要在意。

    我们把这个式子变一下可以得到一个第一类斯特林数和下降幂的关系

    [x^{overline n}=sum_{i=0}^{n}s_1(n,i)x^i ]

    [(-1)^n(-x)^{overline n}=(-1)^nsum_{i=0}^{n}s_1(n,i)x^i(-1)^i ]

    [x^{underline n}=sum_{i=0}^{n}(-1)^{n-i}s_1(n,i)x^i ]

    最上面那个普通幂转第二类斯特林数和上升幂的式子也可以类似的变一下:

    [x^n=sum_{i=0}^{n}s_2(n,i)x^{underline i} ]

    [egin{align}(-1)^n(-x)^n&=(-1)^nsum_{i=0}^{n}s_2(n,i)(-x)^{underline i}\ (-1)^n(-x)^n&=(-1)^nsum_{i=0}^{n}s_2(n,i)x^{overline i}(-1)^i\ x^n&=sum_{i=0}^{n}(-1)^{n-i}s_2(n,i)x^{overline i} end{align} ]

    总结一下一共四个转化的式子:

    [egin{align} x^n&=sum_{i=0}^{n}s_2(n,i)x^{underline i}\ x^n&=sum_{i=0}^{n}(-1)^{n-i}s_2(n,i)x^{overline i}\ x^{underline n}&=sum_{i=0}^{n}(-1)^{n-i}s_1(n,i)x^i\ x^{overline n}&=sum_{i=0}^{n}s_1(n,i)x^i end{align} ]

    反转公式

    首先搬出下降幂的公式:

    [x^n=sum_{i=0}^{n}s_2(n,i)x^{underline i} ]

    套上面的公式变成上升幂:

    [x^n=sum_{i=0}^{n}s_2(n,i)(-1)^i(-x)^{overline i} ]

    套上升幂转第一类斯特林数的公式:

    [x^n=sum_{i=0}^{n}s_2(n,i)(-1)^isum_{j=0}^{i}s_1(i,j)(-x)^j ]

    (x)的幂提前,换一下求和符号:

    [x^n=sum_{j=0}^{n}x^jsum_{i=j}^ns_2(n,i)s_1(i,j)(-1)^{i-j} ]

    由于这里我们把(x)看成未知量,其他的都是已知量,所以我们可以把左右当作多项式,那么对比系数可得:

    [sum_{i=m}^{n}s_2(n,i)s_1(i,m)(-1)^{i-m}=[m=n] ]

    这个叫做反转公式。

    同理我们可以类似的得出第二个反转公式:

    [sum_{i=m}^{n}s_1(n,i)s_2(i,m)(-1)^{i-m}=[m=n] ]

    注意:反转公式(-1)的指数也可以写成(n-i),稍加分析可以发现(m=n)时成立,(m e n)时有两种情况,一种不变,另一种会将答案取相反数,但是由于结果为(0)所以不影响。

    斯特林反演

    这里先给出反演的式子在加以证明:

    [f(n)=sum_{i=0}^{n}s_2(n,i)g(i)Longleftrightarrow g(n)=sum_{i=0}^{n}(-1)^{n-i}s_1(n,i)f(i) ]

    考虑一般反演的套路,先写出一个([i=n])的形式:

    [g(n)=sum_{i=0}^{n}[i=n]g(i) ]

    在把和斯特林数以及([m=n])的式子套进去,也就是上面的反转公式(注意(-1)的指数):

    [egin{align} g(n)&=sum_{i=0}^{n}g(i)sum_{j=i}^{n}(-1)^{n-j}s_1(n,j)s_2(j,i)\ &=sum_{j=0}^{n}(-1)^{n-j}s_1(n,j)sum_{i=0}^{j}s_2(j,i)g(i)\ &=sum_{i=0}^{n}(-1)^{n-i}s_1(n,i)f(i) end{align} ]

    证毕。

    当然由于反转公式的对称性,所以互换(s_1,s_2)依然成立。

  • 相关阅读:
    云路五年 未来正来
    免费公测:RDS只读实例
    【Open Search产品评测】-- 淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案
    阿里云启动“云合计划” 培育中国“微软”级企业
    【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎
    水塘抽样算法
    如何调度考生的座位
    如何去除有序数组的重复元素
    二分查找高效判定子序列
    如何k个一组反转链表
  • 原文地址:https://www.cnblogs.com/hbyer/p/10864488.html
Copyright © 2011-2022 走看看