形式陈述
输入有限词,输出两张同形表
给定全序符号集合A 及有限词 理路 字 Word · String 从某个有限位置集到字母表的函数,即有限符号序列。 w = w 1 ⋯ w N ,重复符号允许。本页使用字条目中“任意符号集合上的有限字”版本,因此A 可以无限,也允许A = ∅ 时只有空词。输入符号之间的比较是精确的全序比较。
算法输出一对同形Young表 理路 Young 表与水平条链 Young tableau · Young tableaux · Standard Young tableau · Semistandard Young tableau · 标准杨表 · 半标准杨表 从分拆形状定义标准与半标准Young表,以水平条链和角格链提供可逆证书,并独立枚举七格形状的两种计数。 ( P , Q ) :P 的行弱增、列严格增,填入的符号属于A ;Q 是用1 , … , N 各一次的标准表。P 称插入表,Q 称记录表。有限全序符号可以保序改写成整数秩,沿用半标准表定义;具体计数时取A = [ m ] 。
结论是双射
(1) A N ⟷ ∐ λ ⊢ N ( SSYT A ( λ ) × SYT ( λ ) ) . 右侧不交并保留形状,不能把不同形状的表对混为一项。P 中的符号重数等于原词重数,Q 记录各个新角格何时产生。空词对应两张空表。
这是Robinson–Schensted–Knuth对应的词版本 ,即双行输入的上行固定为1 , … , N 。一般非负整数矩阵的RSK允许上行重复,记录表也成为半标准表;本页不把词版本的逆算法不加说明地用于那种输入。
一次行插入的规则
从P = Q = ∅ 开始,依次处理k = 1 , … , N 。将x = w k 送入P 的第一行:
找该行第一个严格大于 x 的元素。若找到,就以x 替换它,把被替换的旧值送入下一行,按同一规则继续。
若这一行没有元素严格大于x ,在行末添上x ,本次插入结束。需要时新建最下一行。
本次只增加一个格子。在Q 的同一新格中填入时刻k 。
被替换的元素常称被“撞出”。等于x 的元素不会被撞走,因此重复字母可以并排留在一行。后文证明新格一定是形状的合法外角,也证明每一步都保持所需行列条件。
例子与边界
七个字母的完整轨迹
输入w = 1323213 。按每次插入后的行列出P ,并记录新增格:
时刻k
读入值
插入后的各行,从上到下
新增格
1
1
( 1 )
( 1 , 1 )
2
3
( 1 , 3 )
( 1 , 2 )
3
2
( 1 , 2 ) ; ( 3 )
( 2 , 1 )
4
3
( 1 , 2 , 3 ) ; ( 3 )
( 1 , 3 )
5
2
( 1 , 2 , 2 ) ; ( 3 , 3 )
( 2 , 2 )
6
1
( 1 , 1 , 2 ) ; ( 2 , 3 ) ; ( 3 )
( 3 , 1 )
7
3
( 1 , 1 , 2 , 3 ) ; ( 2 , 3 ) ; ( 3 )
( 1 , 4 )
第六步最能看出严格比较:新1越过第一行已有的1,替换第二列的2;这个2替换第二行第一列的3;最后3进入第三行。最终
(2) P = 1 1 2 3 2 3 3 , Q = 1 2 4 7 3 5 6 . 形状为( 4 , 2 , 1 ) ,内容为( 2 , 2 , 3 ) 。第一行长4;原词的第1 , 3 , 5 , 7 个位置给出弱递增子序列1 , 2 , 2 , 3 ,确实达到这个长度。
图片加载失败 图保留本例第六步前后的实际状态。红框标出将被替换的旧值,绿框标出更新位置;Q中的6单独确定逆过程应从哪里开始。
只有P或只有形状都不足以恢复
词132 和312 都得到
P = 1 2 3 , 但记录表分别是第一行( 1 , 2 ) 、第二行( 3 ) ,以及第一行( 1 , 3 ) 、第二行( 2 ) 。所以P 独自没有编码整个词,形状更没有。式(1)的逆输入必须包含完整的两张表。
若把“第一个严格大于”改成“第一个大于等于”,词11 会被放成竖列1 , 1 ,直接违反本页列严格条件;它的最长弱递增长度明明是2,错误变体的第一行却只有1。其他插入约定可以研究不同对象,但不能沿用式(1)的输出合同。
第一行的值也不一定按原词顺序组成一份子序列。主例最终第一行为1 , 1 , 2 , 3 ,原词中的第二个1已在第6位,后面没有2,因此这个四元组本身不是原词子序列。它保存的是不同长度子序列各自的最小结尾值,不是一条共同的最优路径。若需要实际下标见证,应另外记录前驱。
推论与应用
插入为何保持半标准形状
在某行把x 放进第一个旧值y > x 的位置,左边所有值都不大于x ,右边所有值都不小于旧y ,故行弱增保留。若没有这种y ,追加同样保留行弱增。
再看相邻两行。设上一行在第c 列撞出y ,将它送入下一行。若下一行原来有第c 格,列严格保证该旧值大于y ,所以它的首个大于y 的位置不会在c 右侧;若下一行较短,追加位置也不超过c 。因此撞击位置向下走时弱向左 ,被撞出的值则严格增加。
假设下一行将y 放在第d ≤ c 列。若d = c ,上方已经换成一个严格小于y 的值;若d < c ,上方第d 格还位于上一步替换位置左边,其值不大于上一步的新值,也严格小于y 。所以新值与上方仍严格有序。它与下方原值的关系也安全,因为新值小于被替换的旧值;若随后下方同列被更新,送下去的又是严格更大的旧值。
最终追加位置不超过上一行撞击列,所以上一行足够长;下一行原来不会比当前行更长,因此新格也没有下邻。这恰是一个合法外角。每次处理只向下一行推进,有限表不可能无限撞击,故必然结束。
于是P 一直半标准,且形状每次合法增加一格。Q 给新格填一个比已有标签都大的时刻;新格没有右邻或下邻,故行列严格条件保留,Q 一直标准。
从最大时刻开始逆插
给定任意合法同形表对( P , Q ) ,令k = N , N − 1 , … , 1 :
在Q 中找到标签k ,删去它所在格;标准性保证它是可删角格。
从P 同一格取出值x 并删格。若它在第一行,直接把x 作为w k 。
否则走到上一行,找其中最右一个严格小于 x 的值y ,把该处换成x ,再以y 作为新的x 继续向上一行。越出第一行时输出w k = x 。
删格后保留空形边界;最下行若为空,就从行长表中去掉。按照倒序得到的w N , … , w 1 最后反向排列,就是原词。
“最右严格小于”的位置总存在。第一步时,所删格的上方存在且值严格更小;之后,刚被取出的旧值在更上一行原本也有一个严格更小的上邻。逆撞位置逐层弱向右,因为这个上邻已经提供一个候选列。
替换同样保持行弱增:所选位置左侧值不大于旧y ,右侧值都不小于新x 。与更上方比较,旧上邻小于y < x 。与下方比较,若那里有格,下方刚在一个不更靠右的列放入了比当前x 更大的值,行弱增使下方该列的值也严格更大;初次删外角时,这些右侧下邻本就不存在。因此每一步逆撞都留下合法的半标准表。
两个严格比较怎样保证互逆
一次正插在第c 列以x 替换y > x 后,右侧元素仍都不小于y ,第c 列却已经严格小于y 。因此逆插携带y 返回这一行时,“最右小于y ”恰好选回c ,取回x 并放回y 。
反过来,逆插在某行选择最右y < x 的位置c ,放入x 。该位置左边都不大于y ,新位置值x 严格大于y ,所以再正插y 时,“第一个大于y ”恰选c 并撞出x 。每一行局部互逆,整条撞击路径就互逆。Q 又准确选定最后的新角格,逐时刻归纳便证明双射式(1)。
正插每次只是移动旧值并加一个新字母,故P 内容等于输入词内容。这也保证逆插不会凭空产生新符号。输入若形状不同、Q缺标签或行列约定不符,应先拒绝,不能把逆过程中“找不到位置”当成一份合法编码。
对式(2),先删除Q中的7,取出3;再删除6,从第三行取出3,在第二行最右小于3的位置取出2,再在第一行最右小于2的位置取出1。因此最后两字依次恢复为3、1。继续得到逆序输出3 , 1 , 2 , 3 , 2 , 3 , 1 ,反转即1323213 。
第一行为何给最长弱递增长度
处理词的某个前缀后,设第一行为a 1 ≤ ⋯ ≤ a L 。更强的不变量是:a j 等于该前缀中所有长度j 弱递增子序列的最小末值 ;超过L 的长度没有这种子序列。空前缀时成立。
读入x ,第一行选择c = 1 + # { j : a j ≤ x } 。若c > 1 ,原有长度c − 1 的子序列末值a c − 1 ≤ x ,接上当前位置即得到长度c 、末值x ;c = 1 时直接取新单字。若c ≤ L ,原a c > x ,所以x 改进长度c 的最小末值;若c = L + 1 ,它创造一个新长度。
对j < c ,旧a j ≤ x ,新字不能给更小末值。对j > c ,若要用新x 结束长度j 的子序列,就需此前存在长度j − 1 且末值不超过x 的子序列;其最小末值至少为a c > x ,不可能。因此只有第c 项需要更新,恰是首行插入规则。归纳完成证明。
这里讨论弱递增,等号允许;它与严格递增子序列的长度可能不同。正文并未由首行证明推导所有行的Greene不变量,也未借此无证明地承诺最长递减长度接口。
双射把表权和变成词计数
取A = [ m ] 。指定形状λ 后,P与Q可以独立选,逆算法始终恢复唯一词,所以
(3) # { w ∈ [ m ] N : shape ( w ) = λ } = g λ ( m ) f λ . 实际调用钩长与钩内容公式 理路 钩长与有限字母计数 Hook-length formula · Hook-content formula · Young tableau hook formulas · 钩长公式 · 钩内容公式 从表权行列式推出标准表钩长积与有限字母半标准表钩内容积,证明行钩缺项恒等式并处理重合变量、空形和斜形边界。 ,λ = ( 4 , 2 , 1 ) 、m = 3 给35 ⋅ 15 = 525 。进一步用表权系数 理路 Jacobi–Trudi 与表格权计数 Jacobi-Trudi identity · Jacobi–Trudi formula · Tableau expansion of Schur polynomials 将既有Schur交错商连接完全齐次行列式和半标准表权和,完整证明系数分解、首次相交换尾及列严格对应。 ,若K λ , a 为指定内容a 的P表数,则
(4) # { w : shape ( w ) = λ , content ( w ) = a } = f λ K λ , a . 主形状的内容( 3 , 2 , 2 ) 有两张P,因此有70份词;所有这个内容的词共有7 ! / ( 3 ! 2 ! 2 ! ) = 210 份,其余词属于其他形状。对全部形状相加,又得到m N = ∑ λ ⊢ N g λ ( m ) f λ 。当输入是[ N ] 的排列,P也标准,便得N ! = ∑ λ ⊢ N ( f λ ) 2 。空词的两条总和都按唯一空对象取1。
直接实现的成本
朴素实现逐行线性寻找替换位置。一次插入或删除至多扫描当时表中的全部格子,再做常数次行操作;N 次总比较成本为O ( ( N + 1 ) 2 ) ,两张表及恢复词占O ( N + 1 ) 个槽。这里把一次符号比较计为一步;大整数、长字符串的比较成本另计。
附件的insert默认不保存历史,符合上述核心空间界;若打开record_trace,另外保留每步完整P快照和撞击记录,累计需要O ( ( N + 1 ) 2 ) 个槽。终点为了展示七步证书显式打开这一选项,批量纤维核验则关闭。输出完整轨迹比只输出最终表对承担更多存储责任。
若只需最长弱递增长度,可仅保存第一行并用二分寻找首个大于x 的位置,得到O ( N log ( N + 1 ) ) 次比较和O ( N + 1 ) 槽,但这不会输出完整P、Q或保证能逆恢复原词。缩减输出责任之后,才能删去其余状态。