偏序(斯特林,组合数)
此贴留坑,日后再填。
集合
集合的元素可以是一个集合。
空集是任何集合的子集,所以空集独有一个特性:
ϕ∈{ϕ},ϕ⊂{ϕ}
偏序
(∀:对于所有的)
现在有集合U,令R⊂U×U。
令U中的元素为{u1,u2,...,uk}
则R⊂{{ui,uj}}(1≤i,j≤k)
把xRy看成是一种返回bool值的运算符。
- 若∀x∈U,(x,x)∈R,则R具有自反性。
- xRx 反自反
- xRy,yRz⇒xRz 传递性
- x=y,xRy⇒yRx 对称性
- x=y,xRy⇒yRx 反对称
- 偏序:自反,传递,反对称(≤,x∥y,x⊂y)
- 严格偏序:反自反,传递,反对称(<,)
- 等价:自反,传递,对称(=,≡,≅,∼)
全序:对于∀x,y,必有xRy或yRx(可比)
链的定义:在集合中选出一些数组成链,使得对于ai和ai+1,必有aiRai+1(等价于链中任意两元素可比)。
反链定义:对于反链中的∀a,b,a,b都不可比。
反dilworth定理:一个构成最少的反链个数等于其能够组成的最长链的长度。
把偏序看成一张图。
每次取入度为0的点出来构成一条反链。
删掉点,重复操作。
次数为原图中的最长链。
偏序函数
一个函数f(x,y)若属于偏序函数,则有:
仅当满足xRy时,f(x,y)值才可能不为零。
(比如x≤y,所以C(),A(),斯特林数都是偏序函数了)
偏序函数卷积定义:若a⊗b=c
则c(x,y)=∑za(x,z)×b(z,y)
既然有卷积,那就一定有单位根和逆元
可以想一下构造一个函数e,使得任何一个函数a⊗e=a
那也就是说(x,y)上的值只能从(x,y)那里转移过来
那这样e就是e(x,y)=[x==y]了
卷积不满足交换律,但满足结合律,具体证明展开(a⊗(b⊗c))搞事情。
设函数f的左逆元为a,右逆元为b
有a⊗f=e,f⊗b=e
a=a⊗e=a⊗(f⊗b)=(a⊗f)⊗b=b
现在要求f的逆元。
在单位根上只有e(x,x)的值为一,而对于a⊗b后的(x,x)的值,根据卷积的定义只能由a(x,x)×b(x,x)得来。
所以$ f^{-1}(x,x)=\frac{1}{f(x,x)}$
现在对求偏序卷积的式子进行一些操作
∑x≤z≤yf(x,z)×f−1(z,y)=[x==y]
然后把z最小的那一项提出来
[x==y]+f(x,z)×f−1(x,y)=∑x<z≤yf−1(x,z)×f(z,y)
最后对于每一个y,从大到小枚举x,求f−1(x,y)
一些偏序函数的Interesing应用
是否还记得狄利克雷卷积中的id0?
这里他复出了,或者说,这才是他本应有的样子。
由于偏序是一个广泛(抽象?)的概念,所以这里id0也会随着R的定义改变而不同。
若xRy表示x≤y
则id0(x,y)=[x≤y]
id0−1=−1(y=x+1),1(y=x),0(otherwise)
新建一个函数a(1,y)=py
令a+=a⊗id0
于是a+(1,n)=∑ka(1,k)id0(k,n)
前缀和?
仔细想想id0−1在干的事情,会发现-1,1这个规律的数字组是在用差分从前缀和还原出原数组。
若xRy表示x∣y则反演
一维?
f(n)=∑d∣ng(d)μ(dn)
若xRy表示x⊂y则容斥
这又与斯特林和组合数何干?
一些定义
nk=n×(n−1)×(n−2)×...×(n−k+1),代表n的k次下降幂。
nk=n×(n+1)×(n+2)×...×(n+k−1),代表n的k次上升幂。
(ba)=b!(a−b)!a!,a取b
[ba]:第一类斯特林数,代表a轮b,即a个点放入b个相同的环。
{ba}: 第二类斯特林数,代表a个点放入b个相同的集合。
需要注意的是,斯特林数是可以逆推回负数的,而且值关于(0,0)对称。
二项式反演
(ba)⊗(−1)a−b(ba)=e
∑c(ca)(−1)c−b(bc)
=∑c(−1)c−b(ca)(bc)
(其中(ca)(bc)的组合意义可以理解为在一个大范围内确定大圈,然后再里面找一个小圈。
这样等价于找一个小圈,再枚举可以贡献到多少个大圈上。)
=∑c(−1)c−b(ba)(c−ba−b)
=(ba)∑c(−1)c−b(c−ba−b)
=(ba)(1−1)a−b
=(ba)[a=b]=e
斯特林
nm=∑k[kn]nk
nm=∑k{km}nk
(这个式子可以用来求第二类斯特林,下面讲推导)
[ba]⊗(−1)a−b{ba}=e
{ba}⊗(−1)a−b[ba]=e
这里用归纳证明:
∑c{ca}(−1)c−b[bc]
代入第二类斯特林数的递推式
=∑c({ca−1}×c+{c−1a−1})(−1)c−b[bc]
=∑c{c−1a−1}(−1)c−b[bc]+∑cc{ca−1}(−1)c−b[bc]
代入第一类斯特林数的递推式
=∑c{c−1a−1}(−1)c−b([bc−1]×(c−1)+[b−1c−1])+∑cc{ca−1}(−1)c−b[bc]
由于c没有限制,所以可以把c−1看成c
=∑c{ca−1}(−1)c+1−b([bc]×c+[b−1c])+∑cc{ca−1}(−1)c−b[bc]
=∑c{ca−1}(−1)c−(b−1)([bc]×c+[b−1c]−c×[bc])
=∑c{ca−1}(−1)c−(b−1)[b−1c]
当a=b时原式为1,否则可以通过不停减少使得某项为0。
O(nlogn)求二类斯特林数推导
nm=∑k{km}nk=∑k{km}(kn)k!
左边的组合意义:m个不同的球放入n个不同的抽屉。
右边:枚举k,让m个不同的球组成k个集合,并将集合放入n个不同的抽屉。
然后开始乱搞。
两边同时乘上(kn)的逆元
∑kkm(−1)n−k(kn)={nm}n!
{nm}=n!∑kkm(−1)n−k(kn)
把(kn)写成阶乘形式并化简
{nm}=k!(n−k)!∑kkm(−1)n−k=∑kkkm×(n−k)(−1)n−k
这样就可以FFT了。