偏序(斯特林,组合数)

此贴留坑,日后再填。

集合


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

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

偏序


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

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

  • xU,(x,x)R,\forall x \in U ,(x,x) \in R,RR具有自反性。
  • xxx \not R x 反自反
  • xRy,yRzxRzxRy, yRz \Rightarrow xRz 传递性
  • xy,xRyyRxx \neq y , xRy \Rightarrow yRx 对称性
  • xy,xRyyxx \neq y , xRy \Rightarrow y \not R x 反对称

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

全序:对于x,y\forall x,y,必有xRyxRyyRxyRx(可比)

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

偏序函数


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

偏序函数卷积定义:若ab=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,使得任何一个函数ae=aa \otimes e = a
那也就是说(x,y)(x,y)上的值只能从(x,y)(x,y)那里转移过来
那这样ee就是e(x,y)=[x==y]e(x,y)=[x==y]

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

现在要求ff的逆元。
在单位根上只有e(x,x)e(x,x)的值为一,而对于aba \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)}$
现在对求偏序卷积的式子进行一些操作
xzyf(x,z)×f1(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)×f1(x,y)=x<zyf1(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,求f1(x,y)f^{-1}(x,y)

一些偏序函数的Interesing应用


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

xRyxRy表示xyx \leq y
id0(x,y)=[xy]id_ 0(x,y)=[x \leq y]
id01=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+=aid0a^+=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)
前缀和?
仔细想想id01id_ 0^{-1}在干的事情,会发现-1,1这个规律的数字组是在用差分从前缀和还原出原数组。

xRyxRy表示xyx|y则反演
一维?
f(n)=dng(d)μ(nd)f(n)=\sum_ {d|n} g(d)\mu(\frac{n}{d})

xRyxRy表示xyx \subset y则容斥

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


一些定义

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

二项式反演

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

c(ca)(1)cb(bc)\sum_ c (^a_c)(-1)^{c-b}(^c_ b)
=c(1)cb(ca)(bc)=\sum_ c(-1)^{c-b}(^a_ c)(^c_ b)
(其中(ca)(bc)(^a_ c)(^c_ b)的组合意义可以理解为在一个大范围内确定大圈,然后再里面找一个小圈。
这样等价于找一个小圈,再枚举可以贡献到多少个大圈上。)
=c(1)cb(ba)(cbab)=\sum_ c(-1)^{c-b}(^a_ b)(^{a-b}_ {c-b})
=(ba)c(1)cb(cbab)=(^a_ b)\sum_ c(-1)^{c-b}(^{a-b}_ {c-b})
=(ba)(11)ab=(^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}nkn^m= \sum _ k \lbrace ^m_ k \rbrace n^{\underline{k}}
(这个式子可以用来求第二类斯特林,下面讲推导)
[ba](1)ab{ba}=e[^a_ b] \otimes (-1)^{a-b} \lbrace ^a_ b \rbrace =e

{ba}(1)ab[ba]=e\lbrace ^a _ b \rbrace \otimes (-1)^{a-b} [^a_ b] =e
这里用归纳证明:
c{ca}(1)cb[bc]\sum_ c \lbrace ^a_ c \rbrace (-1)^{c-b} [^c_ b]
代入第二类斯特林数的递推式
=c({ca1}×c+{c1a1})(1)cb[bc]=\sum_ c ( \lbrace ^{a-1}_ c \rbrace \times c + \lbrace ^{a-1}_ {c-1} \rbrace)(-1)^{c-b}[^c_ b]
=c{c1a1}(1)cb[bc]+cc{ca1}(1)cb[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{c1a1}(1)cb([bc1]×(c1)+[b1c1])+cc{ca1}(1)cb[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没有限制,所以可以把c1c-1看成cc
=c{ca1}(1)c+1b([bc]×c+[b1c])+cc{ca1}(1)cb[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{ca1}(1)c(b1)([bc]×c+[b1c]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{ca1}(1)c(b1)[b1c]=\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)nk(kn)={nm}n!\sum _k k^m(-1)^{n-k}(^n _ k)=\lbrace ^m _ n \rbrace n!
{nm}=kkm(1)nk(kn)n!\lbrace ^m _ n \rbrace=\frac{\sum _k k^m(-1)^{n-k}(^n _ k)}{n!}
(kn)(^n _ k)写成阶乘形式并化简

{nm}=kkm(1)nkk!(nk)!=kkmk ⁣×(1)nk(nk) ⁣\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了。