平面分拆的 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“。我保证里面的故事和 《爱丽丝漫游奇境记》 一样奇妙 . . .

时间: 2024-10-01 06:52:26

平面分拆的 Macmahon 公式的相关文章

组合数学漫游奇境记:Schur 多项式,Hook 长度公式,Macmahon 平面分拆公式

Young 表上的组合学是代数组合学中最奇妙的部分,与表示论,统计力学,概率论有着丰富而深刻的联系.这篇文章将从几个有趣的问题开始,带领大家走进这个美丽的领域.所需要的预备知识很少,学过线性代数即可,但是要真正领略其中风光,数学上的成熟是必不可少的. 需要事先剧透的是,本文要证明的几个定理绝非泛泛,它们都是代数组合学中的著名结论. 先来看几个问题: 有 $m$ 位总统候选人参加大选,他们每个人分别有 $\lambda_1,\ldots,\lambda_m$ 位支持者(假定选民只投票给他支持的候选

分拆数组技巧应用

给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i].你不能使用除法运算. 思路1:题目中说明,不能用除法,那一定是在相乘的时候,省略那一项,然后时间复杂度要0(n),就不能两层循环,而是要利用前面的相乘信息来降低复杂度. 算法:相似的分拆技术在数组题中.线性时间构造两个新数组,从开始遍历相乘 T1[0] =1,T1[i]=T[i-1]*A[i-1]  ;而 T2从后往前遍历相乘 T2[len-1] =1,

分拆素数和 埃氏筛法

分拆素数和 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2098 Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行. Sample Input 30

整数分拆的非递归程序

#include<stdio.h> void print_partition(int n) { int i=1; int m=1; int h=1; int t,r; int a[n+1]; for(;i<n+1;++i)a[i]=1; a[1]=n; printf("%d\n",a[1]); while(a[1]!=1) { if(a[h]==2) {a[h--]--;m++;} else { r=--a[h]; t=m-h+1; while(t>=r){a[

Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持 - 伍华聪

在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适应性和强壮型.还有一种情况,由于业务数据库的不断膨胀或者方便数据库的切割隔离,有时候也会把不同的业务数据库进行分拆,如权限提供数据库,客户关系管理数据库,工作流程数据库,企业营运数据库等等,因此在一个系统里面,同时使用2个或者以上的数据库的情况也是有的.针对这两种情况,本文介绍在我的Winform开

研究理财业务改革 目前无分拆上市计划

研究理财业务改革 目前无分拆上市计划 中国证券网讯(记者 陈天弋)光大银行(601818,股吧)3月17日晚间公告,近日,有媒体报道引述有关公司的研究报告,称光大银行等上市银行将分拆理财等业务(成立独立子公司),并谋求分拆资产上市.公司特澄清如下: 公司按照监管机构的政策导向,正在研究推进理财业务改革试点,包括设立独立子公司.该事项尚需履行公司内部审议决策程序,以及报请监管机构审批,存在不确定性.该事项不会对公司未来的经营业绩产生重大影响,公司目前亦无分拆资产上市的相关工作计划. 各位代表: 受

[办公应用]如何将excel合并单元格分拆后每个单元格上仍保留数据?

合并单元格虽然美观,但是无法进行排序.筛选等操作. 只有合并单元格拆分后才可以按常规进行统计.但是普通拆分后,excel仅保留合并单元格数据到区域左上角的单元格. 解决方案:选定多个合并单元格,应用本宏即可每个单元格均保留数据:Sub 拆分() Dim c As Range For Each c In ActiveSheet.UsedRange.Cells If c.MergeCells Then c.Select c.UnMerge Selection.Value = c.Value End

hdu2098分拆素数和(读题很重要!!!)

分拆素数和 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2098 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 39300    Accepted Submission(s): 17193 Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input

HDU 2098 分拆素数和 数论

分拆素数和 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Output 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行. Sample Input 30 26 0 Sample Output 3 2 关键是做一下预处