杨表:每列递增,每行递增(每个数均在1~n之间)
半杨表(非标准杨表):每列递增,每行非严格增
概念:行插入,列插入
行插入:寻找每行第一个>x的值,替换,用该值往下一行重复该操作;若x>该行最大值,插入行尾
列插入类似。
设杨表(P,Q),P为原杨表,Q为记录表。
可以将任何一排列( π 1 , π 2 , ⋯ , π k \pi_1,\pi_2,\cdots,\pi_k π1,π2,⋯,πk) ↔ \leftrightarrow ↔(P,Q)。(可逆)
有序数列对映射 ↔ \leftrightarrow ↔半杨表:(可逆)
有序数列对((u1,v1) ≤ \le ≤(u2,v2) ≤ \le ≤, ⋯ \cdots ⋯, ≤ \le ≤(un,vn)),比较法同字典序。
此时依次插入v1,v2,…vn进半杨表P,当vi那步新出现格子(x,y),填Q(x,y)=ui,最终可以得到有序数列对对于半杨表的映射,该操作可逆即通过半杨表还原有序数列对形态。
RSK推论: n ! = ∑ λ C λ 2 n!=\sum\limits_{\lambda}C_\lambda^2 n!=λ∑Cλ2
可以将任何一排列( π 1 , π 2 , ⋯ , π k \pi_1,\pi_2,\cdots,\pi_k π1,π2,⋯,πk)与(P,Q)一一映射。(可逆)
有序数列对映射 ↔ \leftrightarrow ↔半杨表:(可逆)
性质0:对于排列 π ( π 1 , ⋯ , π n ) \pi(\pi_1,\cdots,\pi_n) π(π1,⋯,πn), ∣ L I S ( π ) ∣ = P π |LIS(\pi)|=P_\pi ∣LIS(π)∣=Pπ的第一行宽度(仅当 π i \pi_i πi各不相同,若存在相同,将相同数分别加上 k × ϵ k\times\epsilon k×ϵ来去重)。
性质1: π ↔ ( P , Q ) \pi\leftrightarrow(P,Q) π↔(P,Q),则 π − 1 ↔ ( Q , P ) \pi^{-1}\leftrightarrow(Q,P) π−1↔(Q,P)
性质2: π ↔ ( P , Q ) \pi\leftrightarrow(P,Q) π↔(P,Q),则 π R ↔ ( P T , ? ) \pi^{R}\leftrightarrow(P^T,?) πR↔(PT,?),问号指无特殊性质。
其中 P T P^T PT表示P的转置,即翻转对角线所得P。
证明性质2:
需要用到归纳法和引理。
引理: y → ( S ← x ) = ( y → S ) ← x y\rightarrow (S\leftarrow x)=(y\rightarrow S)\leftarrow x y→(S←x)=(y→S)←x,“ ← \leftarrow ←"指行插,” → \rightarrow →"指列插(分情况讨论证明,略)。
定义: P ( x 1 , . . . , x n ) = ( ⋯ ( x 1 ← x 2 ) ← ⋯ ) ← x n ) P(x_1,...,x_n)=(\cdots(x_1\leftarrow x_2)\leftarrow \cdots)\leftarrow x_n) P(x1,...,xn)=(⋯(x1←x2)←⋯)←xn)
P ( x 1 , . . . , x n ) = ( x 1 ⋯ ( ← x 2 ) ← ⋯ ) ← x n ) P(x_1,...,x_n)=(x_1\cdots(\leftarrow x_2)\leftarrow \cdots)\leftarrow x_n) P(x1,...,xn)=(x1⋯(←x2)←⋯)←xn)
证明性质1:
性质0’: ∣ L D S ( π ) = P π |LDS(\pi)=P^\pi ∣LDS(π)=Pπ的第一列高度。
性质3(Extended RSK 定理) :
1.找 k 个LIS(不交), max总长=前 k 行总宽
1.找 k 个LDS(不交), max总长=前 k 列总高
k个LIS/LDS可用网络流求。
性质3难证。
性质:
若 ( b 1 , b 2 , . . . , b n ) → λ (b_1,b_2,..., b_n)\rightarrow\lambda (b1,b2,...,bn)→λ, ( − b 1 , − b 2 , . . . , − b n ) → λ T (-b_1,-b_2,...,-b_n)\rightarrow\lambda^T (−b1,−b2,...,−bn)→λT
则 λ \lambda λ 与 λ T \lambda^T λT 的形态转置,值不转置。
该结论目前仅在[CTST2017] 最长上升子序列一题中用到。
通过RSK计算 π \pi π的映射(P,Q),求Q可以转化为求 π − 1 \pi^{-1} π−1的映射P(性质1)。
对于有序排列对 π \pi π,可知映射到杨表P中只有前 n \sqrt n n 行和前 n \sqrt n n 列中存在数,又由性质2可知我们只需求出前 n \sqrt n n 行即可,时间复杂度 O ( n n log n ) O(n\sqrt n \log n) O(nnlogn)。
杨表计数:
杨表对应involution矩阵,即对称的每行每列1个1的矩阵,求involution矩阵个数即可。
杨表求LIS的期望长度的时间复杂度约为 2 x 2\sqrt x 2x,式子:
∑ λ C λ 2 × λ 1 n ! \frac{\sum\limits_{\lambda}C_{\lambda}^2\times\lambda_1}{n!} n!λ∑Cλ2×λ1