杨表学习笔记
参考资料:论文集2019《浅谈杨氏矩阵在信息学竞赛中的应用》袁方舟,《对称群笔记》Wenchao Zhang。
引入
杨图,杨表,勾长公式
杨图(记为
每行的列数称为
你要往里面填
设
\text{hook}(p) 是杨图中格子p 的勾长,等于其下方格子个数+右方格子个数+1。标准杨表总数为
f_{\lambda}=\dfrac{|\lambda|!}{\prod_{p\in \lambda}\text{hook}(p)}
半标准杨表,勾长公式
即行不严格递增,列严格递增的杨表。
设值域为
\prod_{p\in\lambda}\dfrac{r+p_y-p_x}{\text{hook}(p)}
斜杨图
即从一个杨图
一个兴奋图(写出这个东西的英文名可能导致寿命减少)是指,
如图是
|\lambda/\mu|!\sum_{D\in\mathcal E{(\lambda/\mu)}}\prod_{p\in \lambda/D}\dfrac{1}{\text{hook}_{\lambda}(p)}
RSK 算法,杨表与 LIS 问题
下面我们将揭示杨图和排列的深刻联系。先引入
RSK 算法
行插入
定义
P\leftarrow x 是把x 从第一行行插入进近似标准杨表(即填入的元素不必是1...|\lambda| )P 中。流程如下:
- 找到本行最小的比
x 大的数y 。如果找不到这样的y ,则把x 放在本行末尾并结束算法。- 交换
x,y 。将y 行插入下一行。
如下演示了一个行插入过程。
显然最后新增的格子一定在边角,即其下方和右方都没有格子。
对于对
删除
下面定义从
P 中删除格子p 。尽管看起来不必要,我们还是规定p 必须是边角。记p 中填的数是x 。流程如下:
如果这是第一行,结束算法。
找到上一行最大的比
x 小的数y (显然一定存在)交换
x,y ,移到上一行继续算法。结束算法后删掉已经没有数的格子
p 。
如下演示了一个删除过程。
很明显删除就是行插入的逆操作。
考虑一个
于是也就得到了以下的Robinson–Schensted correspondence:
上述算法构成了
(P,Q) 到S_n 的一一映射。也就是说,\sum_{\lambda\vdash n}f_{\lambda}^2=n!
不禁让人联想到 prüfer 序列。
同时对于置换(当然也是排列)
\sum_{\lambda\vdash n}f_{\lambda}=\sum_{k=0}^{\lfloor n/2\rfloor}{n\choose 2k}(2k-1)!! 其中双阶乘
(2k-1)!! 定义为(2k-1)(2k-3)...3\cdot 1 。
RSK 算法和半标准杨表
一个广义置换大概可以理解为可重集上的置换,比如
它对应一个广义置换矩阵,这个矩阵的第
我们有
一个广义置换和一个半标准杨表对一一对应。具体来讲就是运行 RSK 算法,把第二行的元素插入
P ,Q 中记录第一行的元素。
而如果有广义置换矩阵
杨表和 LIS 问题
LIS 即最长上升子序列,LDS 即最长下降子序列。
显然有如下结论:
-
杨表第一行的长度即
s 的 LIS 的长度。但是第一行并非s 的 LIS。 -
若有
s\rightarrow(P,Q) ,则s 的翻转\text{rev}(s)\rightarrow(P^T,Q') 。其中P^T 是P 的转置,Q' 和Q 没什么关系。 -
于是我们得到杨表第一列的长度即
s 的 LDS 的长度。
「CTSC2017」最长上升子序列
根据 Dilworth 定理,一个序列的 LIS 的长度等于将其分为若干个不上升子序列所需数量的最小值。那么最长的
不幸的是直接暴力实现杨表插入是
明明和杨表没有深入关系,但是不会杨表就做不了的屑题
[BJWC2018]最长上升子序列
爆枚杨表形态即可。整数拆分
顺瑇一提这个公式是拉马努金发现的(