偏序(斯特林,组合数)

此贴留坑,日后再填。

集合


集合的元素可以是一个集合。
空集是任何集合的子集,所以空集独有一个特性:

ϕ∈{ϕ},ϕ⊂{ϕ}\phi \in \lbrace \phi \rbrace,\phi \subset \lbrace \phi \rbrace

偏序


(∀\forall:对于所有的)
现在有集合UU,令R⊂U×UR \subset U \times U。
令U中的元素为{u1,u2,...,uk}\lbrace u_ 1,u_ 2,...,u_ k\rbrace
则R⊂{{ui,uj}}(1≤i,j≤k)R \subset \lbrace \lbrace u_ i,u_ j \rbrace \rbrace(1 \leq i,j \leq k)

把xRyxRy看成是一种返回boolbool值的运算符。

  • 若∀x∈U,(x,x)∈R,\forall x \in U ,(x,x) \in R,则RR具有自反性。
  • xR̸xx \not R x 反自反
  • xRy,yRz⇒xRzxRy, yRz \Rightarrow xRz 传递性
  • x≠y,xRy⇒yRxx \neq y , xRy \Rightarrow yRx 对称性
  • x≠y,xRy⇒yR̸xx \neq y , xRy \Rightarrow y \not R x 反对称

  • 偏序:自反,传递,反对称(≤,x∥y,x⊂y\leq,x \|y,x \subset y)
  • 严格偏序:反自反,传递,反对称(<,<,)
  • 等价:自反,传递,对称(=,≡,≅,∼=,\equiv,\cong,\sim)

全序:对于∀x,y\forall x,y,必有xRyxRy或yRxyRx(可比)

链的定义:在集合中选出一些数组成链,使得对于aia_ i和ai+1a_ {i+1},必有aiRai+1a_ iRa_ {i+1}(等价于链中任意两元素可比)。
反链定义:对于反链中的∀a,b\forall a,b,a,ba,b都不可比。
反dilworth定理:一个构成最少的反链个数等于其能够组成的最长链的长度。
把偏序看成一张图。
每次取入度为0的点出来构成一条反链。
删掉点,重复操作。
次数为原图中的最长链。

偏序函数


一个函数f(x,y)f(x,y)若属于偏序函数,则有:
仅当满足xRyxRy时,f(x,y)f(x,y)值才可能不为零。
(比如x≤yx \leq y,所以C(),A(),斯特林数都是偏序函数了)

偏序函数卷积定义:若a⊗b=ca \otimes b = c
则c(x,y)=∑za(x,z)×b(z,y)c(x,y) = \sum_ z a(x,z) \times b(z,y)

既然有卷积,那就一定有单位根和逆元
可以想一下构造一个函数ee,使得任何一个函数a⊗e=aa \otimes e = a
那也就是说(x,y)(x,y)上的值只能从(x,y)(x,y)那里转移过来
那这样ee就是e(x,y)=[x==y]e(x,y)=[x==y]了

卷积不满足交换律,但满足结合律,具体证明展开(a⊗(b⊗c)a \otimes (b \otimes c))搞事情。
设函数ff的左逆元为aa,右逆元为bb
有a⊗f=e,f⊗b=ea \otimes f = e,f \otimes b = e
a=a⊗e=a⊗(f⊗b)=(a⊗f)⊗b=ba = a \otimes e = a \otimes (f \otimes b) = (a \otimes f) \otimes b=b

现在要求ff的逆元。
在单位根上只有e(x,x)e(x,x)的值为一,而对于a⊗ba \otimes b后的(x,x)(x,x)的值,根据卷积的定义只能由a(x,x)×b(x,x)a(x,x) \times b(x,x)得来。
所以$ f^{-1}(x,x)=\frac{1}{f(x,x)}$
现在对求偏序卷积的式子进行一些操作
∑x≤z≤yf(x,z)×f−1(z,y)=[x==y]\sum_{x \leq z \leq y} f(x,z) \times f^{-1}(z,y) =[x==y]
然后把zz最小的那一项提出来
[x==y]+f(x,z)×f−1(x,y)=∑x<z≤yf−1(x,z)×f(z,y)[x==y]+f(x,z) \times f^{-1}(x,y) = \sum_ {x < z \leq y} f^{-1}(x,z) \times f(z,y)
最后对于每一个yy,从大到小枚举xx,求f−1(x,y)f^{-1}(x,y)

一些偏序函数的Interesing应用


是否还记得狄利克雷卷积中的id0id_ 0?
这里他复出了,或者说,这才是他本应有的样子。
由于偏序是一个广泛(抽象?)的概念,所以这里id0id_ 0也会随着RR的定义改变而不同。

若xRyxRy表示x≤yx \leq y
则id0(x,y)=[x≤y]id_ 0(x,y)=[x \leq y]
id0−1=−1(y=x+1),1(y=x),0(otherwise)id_ 0^{-1}=-1(y=x+1),1(y=x),0(otherwise)
新建一个函数a(1,y)=pya(1,y)=p_ y
令a+=a⊗id0a^+=a \otimes id_ 0
于是a+(1,n)=∑ka(1,k)id0(k,n)a ^ + (1,n)=\sum_ k a(1,k) id_ 0(k,n)
前缀和?
仔细想想id0−1id_ 0^{-1}在干的事情,会发现-1,1这个规律的数字组是在用差分从前缀和还原出原数组。

若xRyxRy表示x∣yx|y则反演
一维?
f(n)=∑d∣ng(d)μ(nd)f(n)=\sum_ {d|n} g(d)\mu(\frac{n}{d})

若xRyxRy表示x⊂yx \subset y则容斥

这又与斯特林和组合数何干?


一些定义

nk‾=n×(n−1)×(n−2)×...×(n−k+1)n^ {\underline{k}} =n \times (n-1) \times (n-2) \times ... \times (n-k+1),代表nn的kk次下降幂。
nk‾=n×(n+1)×(n+2)×...×(n+k−1)n^ {\overline{k}}=n \times (n+1) \times (n+2) \times ... \times (n+k-1),代表nn的kk次上升幂。
(ba)=a!b!(a−b)!(^a_ b)=\frac{a!}{b!(a-b)!},aa取bb
[ba][ ^a_ b]:第一类斯特林数,代表aa轮bb,即a个点放入b个相同的环。
{ba}\lbrace ^a_ b\rbrace: 第二类斯特林数,代表a个点放入b个相同的集合。
需要注意的是,斯特林数是可以逆推回负数的,而且值关于(0,0)对称。

二项式反演

(ba)⊗(−1)a−b(ba)=e(^a_ b) \otimes (-1)^{a-b} (^a_b )=e

∑c(ca)(−1)c−b(bc)\sum_ c (^a_c)(-1)^{c-b}(^c_ b)
=∑c(−1)c−b(ca)(bc)=\sum_ c(-1)^{c-b}(^a_ c)(^c_ b)
(其中(ca)(bc)(^a_ c)(^c_ b)的组合意义可以理解为在一个大范围内确定大圈,然后再里面找一个小圈。
这样等价于找一个小圈,再枚举可以贡献到多少个大圈上。)
=∑c(−1)c−b(ba)(c−ba−b)=\sum_ c(-1)^{c-b}(^a_ b)(^{a-b}_ {c-b})
=(ba)∑c(−1)c−b(c−ba−b)=(^a_ b)\sum_ c(-1)^{c-b}(^{a-b}_ {c-b})
=(ba)(1−1)a−b=(^a_ b)(1-1)^ {a-b}
=(ba)[a=b]=e=(^a_ b)[ a = b ] =e

斯特林

nm‾=∑k[kn]nkn^{\overline{m}}=\sum _ k [ ^n_k ]n^k
nm=∑k{km}nk‾n^m= \sum _ k \lbrace ^m_ k \rbrace n^{\underline{k}}
(这个式子可以用来求第二类斯特林,下面讲推导)
[ba]⊗(−1)a−b{ba}=e[^a_ b] \otimes (-1)^{a-b} \lbrace ^a_ b \rbrace =e

{ba}⊗(−1)a−b[ba]=e\lbrace ^a _ b \rbrace \otimes (-1)^{a-b} [^a_ b] =e
这里用归纳证明:
∑c{ca}(−1)c−b[bc]\sum_ c \lbrace ^a_ c \rbrace (-1)^{c-b} [^c_ b]
代入第二类斯特林数的递推式
=∑c({ca−1}×c+{c−1a−1})(−1)c−b[bc]=\sum_ c ( \lbrace ^{a-1}_ c \rbrace \times c + \lbrace ^{a-1}_ {c-1} \rbrace)(-1)^{c-b}[^c_ b]
=∑c{c−1a−1}(−1)c−b[bc]+∑cc{ca−1}(−1)c−b[bc]=\sum_ c \lbrace ^{a-1}_ {c-1} \rbrace (-1) ^ {c-b} [ ^c _ b ]+\sum _ c c \lbrace ^{a-1}_ c \rbrace (-1) ^ {c-b} [^c _ b]
代入第一类斯特林数的递推式
=∑c{c−1a−1}(−1)c−b([bc−1]×(c−1)+[b−1c−1])+∑cc{ca−1}(−1)c−b[bc]=\sum _ c \lbrace ^ {a-1}_ {c-1} \rbrace (-1) ^ {c-b} ( [ ^{c-1} _ b ] \times (c-1) + [ ^{c-1} _ {b-1} ] ) + \sum _ c c \lbrace ^{a-1}_ c \rbrace (-1) ^ {c-b} [^c _ b]
由于cc没有限制,所以可以把c−1c-1看成cc
=∑c{ca−1}(−1)c+1−b([bc]×c+[b−1c])+∑cc{ca−1}(−1)c−b[bc]=\sum _ c \lbrace ^ {a-1}_ {c} \rbrace (-1) ^ {c+1-b} ( [ ^c _ b ] \times c + [ ^{c} _ {b-1} ] ) + \sum _ c c \lbrace ^{a-1}_ c \rbrace (-1) ^ {c-b} [^c _ b]
=∑c{ca−1}(−1)c−(b−1)([bc]×c+[b−1c]−c×[bc])=\sum_ c \lbrace ^ {a-1} _ c \rbrace (-1)^ {c-(b-1)}([ ^c _ b ] \times c + [ ^{c} _ {b-1} ] - c \times [^ c _ b ])
=∑c{ca−1}(−1)c−(b−1)[b−1c]=\sum_ c \lbrace ^ {a-1} _ c \rbrace (-1)^ {c-(b-1)} [ ^c _ {b-1} ]
当a=ba=b时原式为1,否则可以通过不停减少使得某项为0。

O(nlogn)O(nlogn)求二类斯特林数推导

nm=∑k{km}nk‾=∑k{km}(kn)k!n^m=\sum_ k \lbrace ^m_ k \rbrace n^{\underline{k}}=\sum_ k \lbrace ^m_ k \rbrace (^n_ k)k!
左边的组合意义:mm个不同的球放入nn个不同的抽屉。
右边:枚举kk,让mm个不同的球组成kk个集合,并将集合放入nn个不同的抽屉。
然后开始乱搞。
两边同时乘上(kn)(^n_ k)的逆元
∑kkm(−1)n−k(kn)={nm}n!\sum _k k^m(-1)^{n-k}(^n _ k)=\lbrace ^m _ n \rbrace n!
{nm}=∑kkm(−1)n−k(kn)n!\lbrace ^m _ n \rbrace=\frac{\sum _k k^m(-1)^{n-k}(^n _ k)}{n!}
把(kn)(^n _ k)写成阶乘形式并化简

{nm}=∑kkm(−1)n−kk!(n−k)!=∑kkmk ⁣×(−1)n−k(n−k) ⁣\lbrace ^m _ n \rbrace=\frac{\sum _ k k^m (-1) ^ {n-k} } { k! (n-k)! }= \sum_ k \frac { k ^ m }{ k\! } \times \frac { ( -1 ) ^ { n-k } } { (n-k) \! }
这样就可以FFT了。