Skip to content

14 So Hard To Avoid. Subsequence Conditions on Permutations

Pattern Avoidance

个高低各不相同的孩子,占成一列,每个人面向前一个人的背部。要求每个人必须能够看到所有比自己矮的人在自己的前面。有多少种不同的列队方式呢?
表示依序各个孩子,最矮最高。
例子符合要求吗?不。因为2和3看不到1,被4挡住了。例子是符合要求的。
什么时候是符合要求的呢?如果没有三个元素是一列中的三个(无需连续)且,就是符合要求的。如果存在的话,那么看不到

Definition 14.1.是某个排列从左到右按序的三项(不要求连续)。如果,那么称为132模式(132-pattern)。
为什么称为132模式呢?因为它们三项相对的高度和1、3、2一致。最左边的最小,中间最高,最右的居中。类似的,如果,那么称为123模式,如果,那么是231模式。

Definition 14.2.是一个排列。如果中没有三项能够形成132模式,那么被称为132-avoiding
我们的目标是求得长度为的是132-avoiding的排列数.
假设某个132-avoiding排列的位于位置,那么左边的元素都比右边的元素大。反证。如果左右有小于右边的某个元素,那么是132模式。所以在右边,在左边。左边个元素形成132-avoiding排列数是,类似的,右边个元素形成132-avoiding排列数是。对于在位置的情况,共有种排列。为了递归正确,令
求和 其中
第八章的习题16用生成函数求解了这个递归式,其解是卡特兰数。

Corollary 14.3. 长度为的排列中没有132模式的个数是卡特兰数/(n+1)。

我们知道了132-avoiding的数量。那其他模式呢?在讨论前,先给出一般模式的定义。
Definition 14.4.排列,排列,其中。从中选择项,保持它们的相对顺序不变,各项分别是。如果对于下标其中,有,那么我们称形成了模式。
Definition 14.5.排列,排列,其中。如果中没有个元素形成模式,那么称 -avoiding排列。

-avoiding排列数量记作,或
我们继续回到长度为3的问题上。
231和132刚好相反,如果一个排列没有132,那么反过来的排列没有231模式,反之亦然。那么在这两者之间建立了双射。所以
定义排列的补集(complement)是,它的第一项是,第二项是,第项是。比如的补集。
132的补集是312,如果没有312模式,那么没有132模式,反之亦然。那么
同理213和312恰好相反。综上
还剩余两个模式没有讨论:123和321。它们互补,同时刚好相反,所以。那么成立吗?如果成立,那么排列的长度为3的avoiding排列数都是相同的。答案是肯定的,不过证明没有上面这些那么明显。

Lemma 14.6. 对于所有正整数成立。
证明之前,我们先回顾一个概念。排列中的某项如果是从左往右最小的项,那么称为左到右最小值(left-to-right minimum)。一个排列所有的左到右最小值是降序。比如排列4531762,左到右最小值是4、3、1。1总是左到右最小值。
Proof. 保持左到右最小值位置不变,可以容易构造一个从123avoiding排列到132avoiding排列的双射。
取任意一个123avoiding排列,固定所有的左到右最小值,移除其他项保留空位置。然后从左往右,把移除的值填回空位置,要求是选择大于左边的左到右最小值的且是剩余数中最小的一个。这样保持原有的左到右最小值还是最小值。举个例子,,保留4和1,然后4后面的空选择5和6中的小的那个,即5,然后一个空只能填入6。后面两个空置同理。得到
是132avoiding排列。每一段从左到右最小值开始到下一个最小值之前,都是升序,每一段是降序,找不到132模式。
的逆也比较容易构造。保持左到右最小值不变,两个最小值之前的元素按照降序重排。就是一个123avoiding排列。

Theorem 14.7.是任意一个长度为3的排列模式。那么对于所有正整数都有 Proof. 前面证明了各个长度为3的排列模式都是132等价,且

讨论完了长度为3的各种模式。更长的模式呢?事实上只有很少的有明确的公式。以长度为4为例,有24种模式,使用反转、补集和一些小技巧,可以去掉一些重复的模式,最后有三种不同的模式:1234,1342,1324。使用计算机得到前几项如下: 与长度为3的模式不同,不依赖于不成立了。对于 上面的不等式是成立的。其中不容易理解的是顺序模式1234居中。似乎这种特殊的应该是最容易避免或者是最不容易的,也就是在不等式两头更符合直觉。
下面证明不等式的第二部分。第一部分的证明在习题7给出的论文里面证明的。
Theorem 14.8. 对于所有,不等式成立。
Proof. 我们对于所有排列按照左到右最小值和右到左最大值的值和位置进行分类。
Definition 14.9. 两个排列满足以下条件的话是同一类的: * 左到右最小值相同 * 且位置相同 * 右到左最大值也成立

比如是同一类,而就不在一类,因为的第三位是左到右最小值而的第三位不是。
我们证明的思路是每一个非空类里包含且只包含一个1234avoiding排列并且至少包含一个1324avoiding排列,然后证明有一些类中包含不止一个1324avoiding排列。
Lemma 14.10. 每一个非空类包含且只包含一个1234avoiding排列。
Proof. 选择一个类,固定所有左到右最小值和右到左最大值,然后将剩余的元素降序放入其余位置,得到一个1234avoiding排列。
因为这样组成的排列包含三个降序序列,分别是最后放入的剩余元素、左到右最小值序列和右到左最大值序列。如果这是一个包含1234模式的排列,根据鸽巢原理,至少有一个序列包含两个元素,而这两个要是升序,矛盾。另一方面,如果有两个元素是升序,那么它们和左边的左到右最小值、右边的右到左最大值组成一个1234模式。也就是说,除了降序放其余序列之外,没有其他的排列是1234avoiding排列了。

回一下倒置(inversion)的概念,对于一个排列的一个对,但是,这对数就是倒置。
Lemma 14.11. 每一个非空类包含至少一个1324avoiding排列。
Proof. 如果一个排列存在1324模式,那么如果最左边的数不是左到右最小值,那么可以用左到右最小值替换,同理最右边可以用右到左最大值替换。那么如果一个排列是1324avoiding的,那么不能有一个1324模式,其第一个元素是左到右最小值,最后一个元素是右到左最大值。(下面称包含这样的模式称为好模式(good pattern)。)需要注意的是左到右最小值只能是第一个元素,右到左最大值也只能是最后一个元素。
任取一个包含1324模式的排列。一定有好模式(没有可以通过替换得到),然后交换32对应的元素,不破坏约束条件。没有比某个左到右最小值还小的换到的左侧,右到左最大值同理。每一步都会减少一个倒置,最多 之后会停止,这一系列排列都同属一个类。最后停止的排列明显没有好模式了,是1324avoiding排列。
Notation (by example) 下面我们使用表示长度为6的排列类,左到右最小值是,分别在第一个和第三个位置,右到左最大值是,在最后一个位置。
最后我们要证明至少有一个不意味着只有一个。如果,类包含两个1324avoiding排列,分别是。这就证明了。对于更大的,扩展这个类成即可。

我们说过只有很少的模式有明确的公式。如果有很好的近似或者上界也是值得研究的。Stanley–Wilf猜想是任意模式,存在一个常数使得对于所有都有。最终2003年Adam MarcusGabor Tardos证明了这个猜想,不过并没有指出的值。

对于一些特殊的情况,可以找到一个很小的使得对于所有都有。最容易的情况是是单调的。
Theorem 14.12. 对于所有正整数,不等式 成立。
Proof. 没完全理解。TODO
这个结果和我们更早的结论是一致的:

Definition 14.13.,那么的直和(direct sum)是模式 Example 14.14. ,那么
Theorem 14.15.对所有都满足的模式,那么 Example 14.16.,习题32和Theorem 14.12可以得到,因此 Proof.,是没有模式的排列。将模式的最后一项染成红色,其余点是蓝色。
假设所有红色的项有模式,那么红色的1是某个的最后一项,那么就组成了模式,与假设矛盾。
假设蓝色的点有模式,也和前面的定义矛盾,因为模式的最后一个点是红色。
如果有个蓝色的项,个红色的项,那么最多有^2c_1^kc_2^{n-k}个长度为的排列没有^2,这里是平方的意思是说选择个元素,然后选择个位置。对求和

Stack Sortable Permutations

假设我们有一个排列,想要排序后得到恒等排列(identity permutation)。唯一可以用的工具是栈(stack)。
放入栈,然后去下一项,如果,那么可以把放到上。如果,那么把取出放到输出区后再把放入栈。以此类推。在第步,取出和当前栈顶的元素相比,如果,直接入栈,取出放到输出区,然后将和新的栈顶比较。对项进行类似操作,得到输出的排列
Example 14.17.,整个过程如下图所示。

如果经过这些操作得到是恒等排列,那么是栈可排序的(stack sortable)。前面的例子说明2413不是栈可排序的。
那么什么样的排列是可栈排序的呢?回答这个问题之前,先来看看栈排序操作对排列中的对的影响。
Proposition 14.18.是一个排列,是其中两项,那么
(1) 如果的前面,那么也在的前面;
(2) 如果的前面,并且之间没有使得,那么的前面;
(3) 如果的前面,并且间有使得,那么的前面,此时组成了231模式。
Proof. (1) 的前面,那么先入栈。因为,那么不出栈的话是不可能入栈的,所有中在的前面;
(2) 这种情况下,之间是递减序列。入栈后,后续元素可以依次入栈,直到也入栈。那么当出栈时,显然在的前面;
(3) 这种情况下,必须在进入前出栈;而又必须比早入栈,所以出栈时还没有入栈呢,所以中,的前面。

Theorem 14.19. 一个排列是栈可排序的,当且仅当没有231模式。
Proof. 如果有231模式,那么就是上面的情况(3),结果的前面,不可能是恒等排列。如果没有231模式,那么对于,不过是前面描述的情况(1)或者是(2),都在的前面,因此是排序的。

大部分排列是不可栈排序的。为了增加能够使用栈排序的排列数量,取,然后在放入栈。如果结果排列是是恒等排列,那么是两步栈可排序(two-stack sortable)的排列。
这类排列更难给出特征。一个很重要的原因是两步栈可排序不是单调的。存在是两步栈可排序的,但是的子序列不是。
Example 14.20.。那么,所以是可以两步栈排序的。令,那么,所以不是两步栈可排序的。

我们不能仅仅用模式avoidance来描述可两步栈排序的特征。如果我们扩展下模式avoidance的定义,那么我们可以用类似的概念。
Theorem 14.21. 一个排列是可两步栈排序的,当且仅当它不包含2341模式,也不包含3241模式,除了作为35241的一部分。
Proof. 首先用反证法证明“仅当”这一部分。假设中有组成了2341模式,根据Proposition 14.18中组成了231模式,那么是不可栈排序的。
假设组成了3241模式,但不是35241模式的一部分。Proposition 14.18告诉我们的前面。如果中没有比都大的项,那么的前面,那么中组成了231模式,证毕。如果存在,令其为,但是又不能是35241模式,所以是34251模式。但是是2341模式,上一段证明了这种模式使得不能是两步可栈排序的。
现在证明“当”的部分。如果证明不是可栈排序的,那么自然不是两步可栈排序的。如果不是栈可排序的,那么其中包含231模式,令其为。在中,还是在最右边,且有相隔。如果在的前面,那么是2341模式。如果反之的前面,但是在的前面,那么中有元素大于且在二者之间。那么是3241模式,但又不是35241模式的一部分。

排列中两步可排序的排列数目是 至少有四种证明方法,但是都挺复杂的。
一般化定义。如果经过步之后,得到了恒等排列,那么步可栈排列。如果步可栈排列,如果,显然也是步可栈排列的。

Lemma 14.22.是一个排列,表示左侧的一串元素,表示右边的。那么 Proof. 栈排序,的元素进栈,在进入前必须都出栈,这时输出是进栈,的元素进栈出栈,得到了。最后出栈。
属性定义了栈排序操作,因为对任意排列都成立。

Corollary 14.23. 所有的排列都是步栈可排列的。
Proof. 递归法。时显然成立。假设对于是成立的,考虑。令排列,Lemma 14.22是说总是最大值在最后,如果空的,那么。那么是长度的恒等排列,且是步栈可排列。

Corollary 14.24. 对所有排列步栈排列
Proof. 基于递归即可。

属性使得我们可以将栈排序操作转化成二叉树。如果排列,根据下述规则得到
的根是的最大元素。如果分别是左、右最大的项,那么的左右子节点。如果的第一个项或者最后一项,那么只有右孩子或者左孩子,由剩余个元素组成。也就是树是递归地由左右字串组成的树,分别是其的左右子树。
Example 14.25. 如果,那么如下图所示:

的递减二叉树(decreasing binary tree)。给定,按照中序遍历(in-order)即可恢复(先访问左子树,再访问根,最后访问右子树)。
后序遍历(postorder)是先访问左子树,再访问右子树,最后访问根。
Example 14.26. 回到上面的例子,,后序遍历是234615789。
后序遍历得到的排列恰好是的栈排序结果。
Proposition 14.27.是任意排列,后序遍历将得到栈排序排列
Proof. 递归法。是显然成立。假设对于小于的排列都成立。令,后序遍历。首先后序遍历左子树,根据递归假设是;然后后序遍历右子树,根据递归假设是;最后访问根,得到排列,再结合Lemma 14.22,说明结果是栈排序排列

我们称排列是降序如果,反之如果是升序。令表示中降序的个数,那么升序的数量是。如果中是降序,那么在的补集中是升序。
回到递减二叉树,个降序,当且仅当条连接右子树的边。
表示步可栈排列的排列中降序的个数。下表是一些很小的值对应的

上图可以看出对于所有正整数都有步可栈排序的补集、取反都不是步可栈排序,也就是没有“对称性”。但是这个命题如果成立的话,是难得的对称性的表现。
这章的后续会证明这个命题。不过,先定义一些重要的事情。
Definition 14.28.是如下定义在所有有限排列上的映射: * f(1)=1 * 排列都不为空,那么 * 排列,那么 * 排列,那么

如果不在的两端,那么的位置固定,然后对左右两边递归的应用。如果在两端的话,那么被放到相反的端点上,然后递归地调用。当递归地应用上时,上的最大值就扮演了的角色。
Example 14.29.,那么。所以如果,那么
Example 14.30. 如果,那么
Example 14.31. 应用上面例子的结果,如果,那么
下面的命题展示了对排列降序个数的影响,对后续证明非常有用。
Proposition 14.32. 对任意排列,等式成立。
Proof. 递归法。初始情况显然成立。假设成立,考虑的情况。
第一种情况是不在两端,。假定在第个位置。我们有,那么 第二种情况是在最后,,所以,那么,根据递归假设,成立。
第三种情况是在最前面,,那么。根据递归,命题成立。

可以将个下降的排列转化成个下降的排列,那么可以用于证明是对称的,前提是保持了步栈可排序性。
Lemma 14.33. 对任意排列,等式成立。
Proof. 时显然成立。假设对小于的整数都成立。
(1) 在中间,,那么 (2) 在开头,,那么 (3) 在结尾,,那么 上述证明时使用了递归假设

Corollary 14.34. 步栈可排序的等价于步栈可排序的。
Proof. 因为两者都真等价于步栈可排列的(,两者相等,要么同时是步栈可排列的,要么同时不是)。

现在证明偶对的定理。
Theorem 14.35. 对所有正整数,都有 Proof. Corollary 14.34Proposition 14.32证明了建立了步可栈排列的有个下降的排列和步可栈排列的有个下降的排列的双射。

右边(right edge)(左边(left edge))是一条连接根和右子节点(左子节点)的边。下面要证明有条右边的步可栈排列的排列所对应的个点递减二叉树的数量和有条左边的对应数量一样。
应用于树,如果根有左右子树的话,那么左边和右边都不会变。如果只有左子树,那么变成了右子树;反之亦然。自上而下递归进行这个过程。
如果一个顶点在中有两个子节点,那么在中也有两个子节点。只有左子树或者右子树,会变成只有右子树或者左子树。中左子节点和中右子节点一样多,再一次证明了(第二项是的右子节点的个数,等于左子节点的个数,第一项是的右子节点的个数,而左右子树节点个数显然是)。
为了证明T(p)T(f(p))xyyyxffnp=356124f(p)=536421351246$。对任意子树的项也成立。

Exercises

(14) 求
Solution. 1必须在最后两个位置,否则的话,不管最后两项的大小关系,必然违背132和123其中的一个。如果在最后一个,那么前面项对应的是;如果在倒数第二个,那么最后一项必须是,否则违反312模式,那么前面项对应的是,所以,初始值,是斐波那契数列。

(22) 是正偶数。找到所有的排列,使得不存在且有表示栈排序。
Solution. 不存在这样的排列。Lemma14.33告诉我们,另一方面,Proposition 14.32告诉我们。由于是偶数,那么的下降个数必定是一奇一偶,所以