特殊的数

一些数具有特殊的意义,或是特殊的性质。

错排数

记作dn

如何求?

容斥做法

dn=n!1kn(1)k1(nk)(nk)!=n!0kn(1)k1k!

递推做法

考虑置换环中:

  • n所在环的大小=2,那么剩下n2个数要是错拍,于是贡献(n1)dn2

  • n所在环的大小3,那么n插入之前就应该是错排,一共n1个位置可以插入,于是贡献(n1)dn1

综上,dn=(n1)(dn1+dn2)

卡特兰数(Catalan Number

以下记作hn

这个数字是很多计数问题的答案,如:

  • 网格图上从(0,0)走到(n,n),不得经过y=x的方案数。

  • 在圆上任取2n个点,连出n条线段且两两不交的方案数。

  • 进栈序列为1,2,,n的栈的出栈序列的方案数。

  • n对括号所能组成的合法括号序列数。

  • n个节点构成二叉树的方案数。

递推式:

hn={0k<nhkhnk1n21n=0,1=(2nn)(2nn1)

顺带把通项写了。

hn=(2nn)(2nn1)=(2nn)n+1

另一个递推式:

hn=4n2n+1hn1

证明一下通项:

考虑hn的OGF为H,由第一种递推式可以整理出H=1+xH2

解得H=1±14x2x=2114x。由H(0)=h0=1可知要取H=114x2x

然后拿二项式定理展开14x即可。

斐波那契数(Fibonacci Number

斯特林数(Stirling Number

第二类斯特林数

这里先介绍第二类斯特林数(因为它更常用)。

第二类斯特林数:{nm},表示将n个不同物品划分入m个相同(无标号)非空集合中构成簇(元素为集合的集合)的方案数。

考虑第n个元素,我们得到了它的递推式和通项公式。

{nm}={n1m1}+m{n1m}

(考虑组合意义,要么第n个元素单独构成一个集合,要么第n个元素选择前m个集合中的一个插入。)

边界为{n0}=[n=0]

以及,

{nm}=i=0m(1)miin(mi)!i!

观察通项公式的特点,令fi=ini!,gmi=(1)mi(mi)!,则有:

{nm}=i=0mfigmi

后面是卷积的形式,可以用NTT优化到O(mlogm)求出一整行(一行指:{ni}中,n相同,i=0m)。

特殊值

  • {n0}=[n=0]

  • {n1}={nn}=1(n>0)

  • {n2}=2n11(n>0)

  • {nn1}=(n2)

生成函数

和高阶差分的关系

第一类斯特林数

[nk]表示将n个元素分成k个轮换的方案数,也即n!个排列中,有k个置换环的方案数。

特殊值

  • [n0]=[n=0]

  • [nn]=1(n>0)

  • [n1]=(n1)!(n>0)

  • [nn1]=(n2)

不等式

由定义易知[nk]{nk},当且仅当每个轮换至多有2个元素时等号成立,即k=n1,n

递推式

[nk]=(n1)[n1k]+[n1k1]

即考虑第n个元素的决策,放在以有的k个轮换中的一个,有n1个位置可以放,或者自己成为一个轮换。

生成函数

一行之和

0kn[nk]=n!

由定义可知。

普通幂转下降幂

xn=0kn{nk}xk=0kn{nk}(xk)k!

证明一:

考虑组合意义。左边相当于将k个元素放入x个有标号集合中(集合可以为空)。

右边i相当于枚举非空集合个数,(xi)表示从x个集合中选出i个集合使之非空,{ki}表示将k个元素划分到i个无标号非空集合中的方案数。由于(xi){ki}的集合都无标号,最后乘上i!让集合有标号。

那么左右两边的组合意义相同,所以相等。

证明二:

一个重要的观察是:xk+1=xk(xk)xxk=xk+1+kxk

于是用数学归纳法和第二类斯特林数的加法公式可以证。

上升幂转普通幂

xn=0kn[nk]xk

观察:xk+1=(x+k)xk,且(x+n1)xk=xk+1+(n1)xk

下降幂转普通幂

xn=0kn(1)nk[nk]xk

注意到上升幂和下降幂有相反的符号即可得到。

普通幂转上升幂

xn=0kn(1)nk{nk}xk

注意到(x)n=(1)nxn,将x代入普通幂转下降幂,然后用注意到的式子即可得到。

posted @   RandomShuffle  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示