搬运 2019 袁方舟论文
我们先来简单认识一下杨表:
一个标准杨表是说,每一行严格上升,每一列严格上升
设杨表 表示有
行,
每行有 个数,并且
杨表的边角说的是 ,使得
都是空的
表示的是往形状为
- 杨表的插入:设插入
,从第一行开始,找到
的最小的,设为
,若不存在,就把
放到最后,否则令
- 杨表的删除:删除一个边角位,若在第一行,则直接删除,否则在上一行找到一个小于它的最大的,然后重复这个过程,杨表删除后任然是杨表
- 杨表,排列,双射:
将一个排列插入杨表,并且整一个记录表
,设第
次将
插入时多出来的位置为
,那么我们在
上写一个
,这样
的形状相同且
也为一个杨表
- 现在一个排列可以对应一对形状相同的杨表
接着我们考虑操作,找到的最大值
的位置
,在
中删除这个位置,删除的数为
也就是说,一对杨表可以对应唯一一个排列,于是我们知道: - 钩子公式
我们希望对一个,求出它的填数方式
有公式:
其中表示在杨表中
或
的点的个数
我们尝试归纳证明,首先是成立的,我们只需要证明:(枚举当前表上一步的表是啥)
我们考虑需要重新计算的点,首先是只有插入点那行那列的点
接着注意到一些点是可以约去的: - 比如说这个图中,绿色的
等于蓝色的
(红色的是需要重新计算的点)
- 即算上
,红色的为边角位
我们定义,
为
一直往下的点,
为
一直往右的点
那么
我们设边角位的坐标为,然后将需要用到的点画出来,对一些特殊的点进行编号
- 其中
那么只需计算(设插入的点是
),这个等于
以及,这个等于
后面的还有,这个等于
,以及
所以 (不枚举,枚举插入的是哪一行的)
接着()
- 这个算的就是杨表的大小
- 可以用来做
计数,枚举
的划分就可以做到
- 钩子公式的另一个形式:
考虑一行的可以去到
,将不合法的去掉即可