首页 > 代码库 > 平面分拆的 Macmahon 公式
平面分拆的 Macmahon 公式
首先看一个计数问题:一个边长为 $a\times b\times c$ 的平行六边形,每个内角都是 120 度。用边长为 1 的菱形去覆盖,有多少种不同的方法?
比如下图就是一种:
我们从上方俯视这张图(虽然这是一个平面图形,但是我们想象在空间中鸟瞰它),发现它很像是在墙角堆箱子:在一个边长为 $a\times b\times c$ 的长方体空间中堆放若干形状为单位正方体的 "箱子"。不仅如此,箱子堆放的规则是有限制的:紧贴墙角处的那一摞箱子最高,从墙角向外,箱子的高度是递减的。这个规则可以准确表述如下:
定义:【平面分拆】所有满足要求的覆盖与满足下面条件的 $a\times b$ 矩阵 $A=(a_{ij})$ 一一对应:
1. 矩阵 $A$ 的元素都是非负整数(它们代表对应位置箱子的高度),且 $A$ 的每一行从左到右,每一列从上到下都是递减的;
2. $a_{11}\leq c$(即最高的一摞箱子其高度不超过天花板的高度 $c$)。
设 $\sum_{i,j}a_{ij}=n$ 为矩阵所有元素之和,我们把矩阵 $A$ 称为整数 $n$ 的一个受限制的平面分拆。
举个例子,下图的平面分拆
对应的矩阵就是
\[\begin{matrix}5&3&2&2\\4&2&2&1\\2&1&&\\1&&&\end{matrix}\]
于是我们就把前面的平行六边形的菱形覆盖的计数问题转化为关于矩阵的计数问题:
在所有元素都是非负整数的 $a\times b$ 矩阵中,满足定义中的 1,2 两个条件的有多少个?
接下来你会看到,有一个巧妙的办法可以把这个计数问题转化为一个行列式的求值。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
不相交的格点路径组
我们从高中就知道,在平面上从原点出发,每次向右或者向上移动一个单位的距离,到达点 $(a,c)$ 的路径总数为\[\begin{pmatrix}a+c\\a\end{pmatrix}.\]任何一条这样的路径叫做高斯路径。
关键的一步是注意到矩阵 $A$ 的每一行都对应于一条从 $(0,0,)$ 到 $(a,c)$ 的高斯路径。
观察路径高度的变化规律,在上图中,高度值为 $(1,1,1,3,3,4)$。这条路径描述了一个长度为 $a$,逐渐递增,而且最大的元素不超过 $c$ 的数组。反过来,每一个这样的数组都对应于一条从 $(0,0,)$ 到 $(a,c)$ 的高斯路径。
直观上解释,就是我们从 $a-c$ 这面墙壁的角度去看箱子的高度变化图,则这个高度变化图反映在这面墙上就是一条高斯路径。
但是矩阵 $A$ 一共有 $b$ 行,而且 $A$ 的每一列从上到下都是递减的,这个递减关系反映在路径上就是第二行对应的路径总是位于第一行对应的路径的下方:(可以有交点,但是不能越过第一行对应的路径的上方)
这个不难理解,因为矩阵 $A$ 的第一行对应的箱子是紧贴 $a-c$ 墙壁的,这一行的高度最高,第二行的高度低于第一行,这两行的高度图反映在 $a-c$ 这面墙壁上就是第二行对应的路径位于第一行对应的路径的下方。
同理,第三行对应的路径总是位于第二行对应的路径的下方,. . . ,以此类推,第 $b$ 行对应的路径总是位于第 $b-1$ 行对应的路径的下方。
现在我们把第二行的高度图沿着向量 $(1,-1)$ 平移一个单位,变成一条从点 $(1,-1)$ 出发,到达 $(a+1,c-1)$ 的高斯路径:
很显然,这是两条不相交的路径,它们没有任何的公共点。
如法炮制,我们把第三行对应的路径向右下方平移两个单位, . . .,第 $b$ 行对应的路径向右下方平移 $b-1$ 个单位,则我们得到了 $b$ 条互不相交的路径。我们把这样的 $b$ 条路径叫做一个不相交的路径组。这样我们就把一个平面分拆对应到了一个不相交的路径组。反过来,对每一个这样的不相交的路径组,我们都可以还原出对应的平面分拆来。
因此我们的问题可以一般性地概括为
设 $\{A_1,\ldots,A_n\}$ 和 $\{E_1,\ldots,E_n\}$ 是平面上两组顶点集,求出所有互不相交的路径组 $\mathcal{P}=\{P_1,\cdots,P_n\}$ 的数目,其中 $P_i$ 是从 $A_i$ 出发到 $E_i$ 的高斯路径。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Gessel - Viennot 的巧妙方法
现在我们来叙述并证明一个一般性的结论。设 $G$ 是一个有向无环图, $G$ 中任何两个顶点 $u,v$ 之间至多只有有限多条路径相连。设 $\mathcal{A}=\{A_1,\cdots,A_n\}$ 和 $\mathcal{B}=\{B_1,\cdots,B_n\}$ 是 $G$ 的两组顶点集,$\sigma$ 是集合 $\{1,2,\cdots,n\}$ 的一个置换,称 $n$ 元组 $\mathcal{P}_\sigma=(P_1,\cdots,P_n)$ 为 $\mathcal{A}$ 到 $\mathcal{B}$ 的一个路径组,其中 $P_i$ 为从 $A_i$ 出发到 $B_{\sigma(i)}$ 的路径。如果 $\mathcal{P}_\sigma$ 中的路径两两没有公共点,则称 $\mathcal{P}_\sigma$ 是一个不相交的路径组。
设 $m_{ij}$ 为从 $A_i$ 到 $B_j$ 的所有路径的数目,矩阵 $M=(m_{ij})$,则有下面的结论成立:
Gessel - Viennot 引理:\[\det M=\sum_{\text{non-intersecting $\mathcal{P}_\sigma$}}\text{sign}(\sigma).\]
特别地,如果不相交的路径组只发生在 $\sigma=1$ 为恒等置换的情形(这也是这个引理可以应用的情形),则我们有非常干脆了当的结论:从 $\{A_i\}$ 到 $\{B_i\}$ 的不相交的路径组的总数就是 $\det M$。
也许 Gessel - Viennot 引理的叙述有点麻烦,但是实际上从结论到证明它都是很简单的, 这就是为什么虽然它很有用,但人们只把它叫做 "引理" 而不是定理。
\[\begin{align*}\det M&=\sum_{\sigma}\text{sign}(\sigma)m_{ij}\\&=\sum_{\sigma}\text{sign}(\sigma)(\sum_{P_1:A_1\to B_{\sigma(1)}}1)\cdots(\sum_{P_n:A_n\to B_{\sigma(n)}}1)\\&=\sum_{\sigma}\text{sign}(\sigma)\sum_{\mathcal{P}_\sigma}1\\&=\sum_{\sigma,\mathcal{P}_{\sigma}}\text{sign}(\sigma).\end{align*}\]
我们要证明在上面的求和中所有相交的路径组对应的和项是可以两两配对抵消的,这样剩下的只有不相交的路径组。而这一点的证明只需要一张图:
对任意一个相交的路径组 $\mathcal{P}_\sigma$,我们找到其最右上角处的交点(在平面图上,这样的交点总是可以唯一确定的,但是对一般的抽象图,这需要事先给图的顶点规定一个全序),图中圈出的顶点就是要找的交点。设 $i<j$ 是最小的两个下标使得路径 $P_{\sigma(i)},P_{\sigma(j)}$ 经过这两个点。我们构造另一个相交的路径组 $\mathcal{P}_{\sigma‘}$ 如下:很简单,交换 $P_i$ 和 $P_j$ 在这个交点之后的部分。这样得到的新的不相交的路径组 $\mathcal{P}_{\sigma‘}$ 对应的置换 $\sigma‘$ 与 $\sigma$ 相差一个对换,因此符号相反,从而它们对应的求和项配成一对抵消掉了,于是剩下的只有不相交的路径组对应的和项,这就证明了 Gessel- Viennot 引理。
现在回到我们前面的问题:
这里 $A_i=(i-1,1-i)$,$E_j=(a+j-1,c+1-j)$,$1\leq i,j\leq b$。这个图不相交的路径组只能发生在恒等置换的情形(从图上看显然的事情,你可以自己尝试说明下),因此所求的受限制的平面分拆的数目为
\[\det_{1\leq i,j\leq b}\left(\left(\begin{array}{c}a+c\\a+i-j\end{array}\right)\right).\]
这是一个看起来很头疼的组合行列式,该怎么求它的值呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dodgson‘s Condensation Method
为了求出行列式的值,我们介绍一个古老的方法:Dodgson Condensation。本质上这是一个递归求解行列式的方法:设 $A$ 是一个 $n\times n$ 矩阵,用 $A_i^j$ 表示删去 $A$ 的第 $i$ 行第 $j$ 列后剩下的 $n-1$ 阶矩阵,用 $A_{1,n}^{1,n}$ 表示删去 $A$ 的第 1 行第 1 列和第 $n$ 行第 $n$ 列后剩下的 $n-2$ 阶矩阵,则我们有恒等式
\[ \det A\cdot \det A_{1,n}^{1,n}=\det A_1^1\det A_n^n-\det A_1^n\det A_n^1.\]
Dodgson Condensation 的证明不难,可以见维基百科,这里就不再照抄一遍了。
我们对 $b$ 归纳来证明
Macmahon 公式:\[\det_{1\leq i,j\leq b}\left(\left(\begin{array}{c}a+c\\a+i-j\end{array}\right)\right)=\prod_{i=1}^a\prod_{j=1}^b\prod_{k=1}^c\frac{i+j+k-1}{i+j+k-2}.\]
首先你需要对 $b=1$ 和 $b=2$ 的情形手算验证(略繁琐),设 $M_b(a,c)$ 为所求的行列式,注意
\[\left\{\begin{array}{l}(M_b(a,c))_1^1=M_{b-1}(a,c),\\(M_b(a,c))_n^n=M_{b-1}(a,c),\\(M_b(a,c))_1^n=M_{b-1}(a-1,c+1),\\(M_b(a,c))_n^1=M_{b-1}(a+1,c-1).\end{array}\right.\]
然后应用归纳假设即可。
这个行列式的解法不是唯一的,不过 Dodgson 的方法是最好的。你可能怀疑这么笨拙的方法居然还能称得上是好方法。实际上在组合行列式的领域,复杂的行列式比比皆是,有的行列式甚至光把答案写出来都要占半页纸。想靠人的大脑凭借奇思妙想几下解出来几乎没可能。相比之下 Dodgson Condensation 方法在算法上直接了当,只要找到递推关系即可。在计算机代数软件发达的今天,求解个把递推关系这都不是事儿。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
说点八卦的东西。Dodgson 是 19 世纪英国牛津大学的数学教授,Dodgson Condensation 这个土的掉渣的求行列式的方法是他对数学的唯一贡献。这位老兄的名字实在让人不敢恭维:Dodgson,dog ... son?大概他也知道自己的名字难登大雅之堂,所以他给自己取了一个很好听的笔名:Lewis Carroll。
什么?你对这个名字没有反应?那好,我们继续说说他的轶事。这位老兄虽然名字土,受过的教育可不含糊(能当上牛津大学教授显然说明了这一点),也算上层社会体面人物。但是,按照今天的话说,是个不折不扣的怪蜀黍,对萝莉有着特别的喜爱,尤其喜爱 ... 给她们拍摄裸照。对,你没听错,就是拍裸照,这一点和冠希哥趣味相投。所以后人基本认定他是一个恋童癖大叔。他对邻居家的女儿的喜爱到了沉溺的地步,以至于专门给她写了一部童话来哄她开心,这就是大名鼎鼎的《艾丽斯漫游奇境记》。虽然创作动机不纯,但是这部童话非常精彩,以至于当时的英国女王都变成了他的粉丝。女王命令手下的大臣把 Dodgson 的全部著作都搜集呈上来,于是大臣献上了一本厚厚的 《符号逻辑》。当然,结果你猜得到的 . . .
时光一转到了 30 年前,三位数学家 William Mills,David Robbins 还有 Howard Rumsey 在研究计算行列式的快速数值算法时,受 Dodgson 算法的启发,发现了交错符号矩阵猜想。而这个猜想的解决也是非常的漂亮。我向你推荐 Bressoud 的书 “Proofs and Confirmations: the story of the alternating sign matrix conjecture“。我保证里面的故事和 《爱丽丝漫游奇境记》 一样奇妙 . . .
平面分拆的 Macmahon 公式