杨表:每列递增,每行递增(每个数均在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
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