Skip to content

方法Method

RSK 词插入与逆恢复

Robinson-Schensted word correspondence · RSK word insertion · Schensted row insertion · 行插入与记录表

固定严格大于的行插入与严格小于的逆撞规则,证明有限词和同形表对双射、内容保持及第一行最长弱递增长度,再计算指定形状的词纤维。

形式陈述 ​

输入有限词,输出两张同形表 ​

给定全序符号集合A及有限词w=w1⋯wN,重复符号允许。本页使用字条目中“任意符号集合上的有限字”版本,因此A可以无限,也允许A=∅时只有空词。输入符号之间的比较是精确的全序比较。

算法输出一对同形Young表(P,Q):P的行弱增、列严格增,填入的符号属于A;Q是用1,…,N各一次的标准表。P称插入表,Q称记录表。有限全序符号可以保序改写成整数秩,沿用半标准表定义;具体计数时取A=[m]。

结论是双射

(1)AN⟷∐λ⊢N(SSYTA(λ)×SYT(λ)).

右侧不交并保留形状,不能把不同形状的表对混为一项。P中的符号重数等于原词重数,Q记录各个新角格何时产生。空词对应两张空表。

这是Robinson–Schensted–Knuth对应的词版本,即双行输入的上行固定为1,…,N。一般非负整数矩阵的RSK允许上行重复,记录表也成为半标准表;本页不把词版本的逆算法不加说明地用于那种输入。

一次行插入的规则 ​

从P=Q=∅开始,依次处理k=1,…,N。将x=wk送入P的第一行:

  1. 找该行第一个严格大于x的元素。若找到,就以x替换它,把被替换的旧值送入下一行,按同一规则继续。
  2. 若这一行没有元素严格大于x,在行末添上x,本次插入结束。需要时新建最下一行。
  3. 本次只增加一个格子。在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=1123233,Q=1247356.

形状为(4,2,1),内容为(2,2,3)。第一行长4;原词的第1,3,5,7个位置给出弱递增子序列1,2,2,3,确实达到这个长度。

图保留本例第六步前后的实际状态。红框标出将被替换的旧值,绿框标出更新位置;Q中的6单独确定逆过程应从哪里开始。

只有P或只有形状都不足以恢复 ​

词132和312都得到

P=123,

但记录表分别是第一行(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:

  1. 在Q中找到标签k,删去它所在格;标准性保证它是可删角格。
  2. 从P同一格取出值x并删格。若它在第一行,直接把x作为wk。
  3. 否则走到上一行,找其中最右一个严格小于x的值y,把该处换成x,再以y作为新的x继续向上一行。越出第一行时输出wk=x。

删格后保留空形边界;最下行若为空,就从行长表中去掉。按照倒序得到的wN,…,w1最后反向排列,就是原词。

“最右严格小于”的位置总存在。第一步时,所删格的上方存在且值严格更小;之后,刚被取出的旧值在更上一行原本也有一个严格更小的上邻。逆撞位置逐层弱向右,因为这个上邻已经提供一个候选列。

替换同样保持行弱增:所选位置左侧值不大于旧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。

第一行为何给最长弱递增长度 ​

处理词的某个前缀后,设第一行为a1≤⋯≤aL。更强的不变量是:aj等于该前缀中所有长度j弱递增子序列的最小末值;超过L的长度没有这种子序列。空前缀时成立。

读入x,第一行选择c=1+#{j:aj≤x}。若c>1,原有长度c−1的子序列末值ac−1≤x,接上当前位置即得到长度c、末值x;c=1时直接取新单字。若c≤L,原ac>x,所以x改进长度c的最小末值;若c=L+1,它创造一个新长度。

对j<c,旧aj≤x,新字不能给更小末值。对j>c,若要用新x结束长度j的子序列,就需此前存在长度j−1且末值不超过x的子序列;其最小末值至少为ac>x,不可能。因此只有第c项需要更新,恰是首行插入规则。归纳完成证明。

这里讨论弱递增,等号允许;它与严格递增子序列的长度可能不同。正文并未由首行证明推导所有行的Greene不变量,也未借此无证明地承诺最长递减长度接口。

双射把表权和变成词计数 ​

取A=[m]。指定形状λ后,P与Q可以独立选,逆算法始终恢复唯一词,所以

(3)#{w∈[m]N:shape(w)=λ}=gλ(m)fλ.

实际调用钩长与钩内容公式,λ=(4,2,1)、m=3给35⋅15=525。进一步用表权系数,若Kλ,a为指定内容a的P表数,则

(4)#{w:shape(w)=λ, content(w)=a}=fλKλ,a.

主形状的内容(3,2,2)有两张P,因此有70份词;所有这个内容的词共有7!/(3!2!2!)=210份,其余词属于其他形状。对全部形状相加,又得到mN=∑λ⊢Ngλ(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(Nlog⁡(N+1))次比较和O(N+1)槽,但这不会输出完整P、Q或保证能逆恢复原词。缩减输出责任之后,才能删去其余状态。

参考资料
  • Donald E. Knuth,Permutations, Matrices, and Generalized Young Tableaux,Pacific Journal of Mathematics34(3),1970,pp.709–727,§2 pp.711–714的INSERT/DELETE及互逆,§3 pp.714–716的ConstructionsA/B与Theorem2。本文将上行限定为互异时刻,因此记录表为标准表。
  • Darij Grinberg、Victor Reiner,Hopf Algebras in Combinatorics,2026-09-06修订,§2.5 pp.58–61:行插入、弱向左撞击路径及逆撞。本文的首行最小末值不变量另在正文完整证明。
关系图谱9 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系