搬运 2019 袁方舟论文
我们先来简单认识一下杨表:
一个标准杨表是说,每一行严格上升,每一列严格上升
设杨表
λ
=
(
λ
1
,
λ
2
,
…
,
λ
m
)
\lambda=(\lambda_1,\lambda_2,\dots,\lambda_m)
λ=(λ1,λ2,…,λm) 表示有
m
m
m 行,
每行有
λ
i
\lambda_i
λi 个数,并且
λ
1
≥
λ
2
≥
⋯
≥
λ
m
\lambda_1\ge \lambda_2\ge\dots\ge \lambda_m
λ1≥λ2≥⋯≥λm
杨表的边角说的是
{
(
i
,
j
)
}
\{(i,j)\}
{(i,j)},使得
(
i
+
1
,
j
)
,
(
i
,
j
+
1
)
(i+1,j),(i,j+1)
(i+1,j),(i,j+1) 都是空的
f
λ
f_{\lambda}
fλ 表示的是往形状为
λ
\lambda
λ 的杨表中填数的方案数
- 杨表的插入:设插入 x x x,从第一行开始,找到 > x >x >x 的最小的,设为 y y y,若不存在,就把 x x x 放到最后,否则令 x = y x=y x=y 然后继续插入,容易证明插入后还是杨表
- 杨表的删除:删除一个边角位,若在第一行,则直接删除,否则在上一行找到一个小于它的最大的,然后重复这个过程,杨表删除后任然是杨表
- 杨表,排列,双射:
将一个排列插入杨表 P P P,并且整一个记录表 Q Q Q,设第 i i i 次将 p i p_i pi 插入时多出来的位置为 ( x , y ) (x,y) (x,y),那么我们在 Q x , y Q_{x,y} Qx,y 上写一个 i i i,这样 P , Q P,Q P,Q 的形状相同且 Q Q Q 也为一个杨表
现在一个排列可以对应一对形状相同的杨表
接着我们考虑操作,找到 Q Q Q 的最大值 m m m 的位置 ( x , y ) (x,y) (x,y),在 P P P 中删除这个位置,删除的数为 p m p_m pm
也就是说,一对杨表可以对应唯一一个排列,于是我们知道:
∑ λ f λ 2 = n ! \sum_{\lambda} f_{\lambda}^2=n! λ∑fλ2=n! - 钩子公式
我们希望对一个 λ \lambda λ,求出它的填数方式 f λ f_{\lambda} fλ
有公式: f λ = n ! ∏ h λ ( i , j ) f_{\lambda}=\frac{n!}{\prod h_{\lambda}(i,j)} fλ=∏hλ(i,j)n!
其中 h ( i , j ) h(i,j) h(i,j) 表示在杨表中 ( i , b ≥ j ) (i,b\ge j) (i,b≥j) 或 ( a ≥ i , j ) (a\ge i,j) (a≥i,j) 的点的个数
我们尝试归纳证明,首先 n = 1 n=1 n=1 是成立的,我们只需要证明:(枚举当前表上一步的表是啥)
n ! ∏ h λ ( i , j ) = ∑ μ → λ ( n − 1 ) ! ∏ h μ ( i , j ) , ∑ μ → λ ∏ h λ ( i , j ) ∏ h μ ( i , j ) = n \frac{n!}{\prod h_{\lambda}(i,j)}=\sum_{\mu\rightarrow \lambda}\frac{(n-1)!}{\prod h_{\mu}(i,j)},\sum_{\mu\rightarrow \lambda}\frac{\prod h_{\lambda}(i,j)}{\prod h_{\mu}(i,j)}=n ∏hλ(i,j)n!=μ→λ∑∏hμ(i,j)(n−1)!,μ→λ∑∏hμ(i,j)∏hλ(i,j)=n
我们考虑需要重新计算的点,首先是只有插入点那行那列的点
接着注意到一些点是可以约去的:
比如说这个图中,绿色的 ∏ h λ ( i , j ) \prod h_{\lambda}(i,j) ∏hλ(i,j) 等于蓝色的 ∏ h μ ( i , j ) \prod h_{\mu}(i,j) ∏hμ(i,j)(红色的是需要重新计算的点)
即算上 ∏ ( i , j ) ∈ B l u e h λ ( i , j ) ∏ ( i , j ) ∈ G r e e n h μ ( i , j ) \frac{\prod_{(i,j)\in Blue}h_{\lambda}(i,j)}{\prod_{(i,j)\in Green}h_{\mu}(i,j)} ∏(i,j)∈Greenhμ(i,j)∏(i,j)∈Bluehλ(i,j),红色的为边角位
我们定义 c t ( i , j ) = i − j ct(i,j)=i-j ct(i,j)=i−j, A ( i , j ) A(i,j) A(i,j) 为 ( i , j ) (i,j) (i,j) 一直往下的点, B ( i , j ) B(i,j) B(i,j) 为 ( i , j ) (i,j) (i,j) 一直往右的点
那么 h ( i , j ) = c t ( A ( i , j ) ) − c t ( B ( i , j ) ) + 1 h(i,j)=ct(A(i,j))-ct(B(i,j))+1 h(i,j)=ct(A(i,j))−ct(B(i,j))+1
我们设边角位的坐标为 ( a i , b i ) (a_i,b_i) (ai,bi),然后将需要用到的点画出来,对一些特殊的点进行编号
其中 x i = ( a i , b i ) , y i = ( a i , b i + 1 ) x_i=(a_i,b_i),y_i=(a_i,b_{i+1}) xi=(ai,bi),yi=(ai,bi+1)
那么只需计算 h λ ( a j + 1 , b i ) , 0 ≤ j < i h_{\lambda}(a_j+1,b_i),0\le j<i hλ(aj+1,bi),0≤j<i(设插入的点是 x i x_i xi),这个等于 ( x i − y j ) (x_i-y_j) (xi−yj)
以及 h μ ( a j , b i ) , 1 ≤ j < i h_{\mu}(a_j,b_i),1\le j<i hμ(aj,bi),1≤j<i,这个等于 ( x i − x j ) (x_i-x_j) (xi−xj)
后面的还有 h λ ( a i , b j + 1 ) h_{\lambda}(a_i,b_j+1) hλ(ai,bj+1),这个等于 ( y j − x i ) (y_j-x_i) (yj−xi),以及 h μ ( a i , b j ) = ( x j − x i ) h_{\mu}(a_i,b_j)=(x_j-x_i) hμ(ai,bj)=(xj−xi)
所以 (不枚举 μ \mu μ,枚举插入的是哪一行的)
∑ μ → λ ∏ h λ ( i , j ) ∏ h μ ( i , j ) = − ∑ i = 1 m ∏ j = 0 m ( x i − y j ) ∏ j = 1 , j ≠ i m ( x i − x j ) \sum_{\mu\rightarrow \lambda}\frac{\prod h_{\lambda}(i,j)}{\prod h_{\mu}(i,j)}=-\sum_{i=1}^m\frac{\prod_{j=0}^m(x_i-y_j)}{\prod_{j=1,j\neq i}^m(x_i-x_j)} μ→λ∑∏hμ(i,j)∏hλ(i,j)=−i=1∑m∏j=1,j=im(xi−xj)∏j=0m(xi−yj)
接着( ∑ x i = ∑ i = 1 m a i − b i = ∑ i = 0 m a i − ∑ i = 1 m + 1 b i = ∑ y i \sum x_i=\sum_{i=1}^m a_i-b_i=\sum_{i=0}^ma_i-\sum_{i=1}^{m+1}b_i=\sum y_i ∑xi=∑i=1mai−bi=∑i=0mai−∑i=1m+1bi=∑yi)
这个算的就是杨表的大小 - 可以用来做 L I S LIS LIS 计数,枚举 λ \lambda λ 的划分就可以做到 n 2 p ( n ) n^2p(n) n2p(n)
- 钩子公式的另一个形式:
f λ = n ! ∏ h λ ( i , j ) = n ! ∏ i < j ( λ i − λ j + j − i ) ( λ i + m − i ) ! f_{\lambda}=\frac{n!}{\prod h_{\lambda}(i,j)}=n!\frac{\prod_{i<j}(\lambda_i-\lambda_j+j-i)}{(\lambda_i+m-i)!} fλ=∏hλ(i,j)n!=n!(λi+m−i)!∏i<j(λi−λj+j−i)
考虑一行的 h ( i , j ) h(i,j) h(i,j) 可以去到 [ 1 , ( λ i + m − i ) ] [1,(\lambda_i+m-i)] [1,(λi+m−i)],将不合法的去掉即可