首页 > 代码库 > 棋盘的多米诺覆盖:Dimer Lattice Model,Pfaff 多项式,Kasteleyn 定理
棋盘的多米诺覆盖:Dimer Lattice Model,Pfaff 多项式,Kasteleyn 定理
这次来介绍计数组合学里面一个经典的问题:Dimer Lattice Model。问题是这样的:一个有 64 个方格的国际象棋棋盘,有多少种不同的多米诺骨牌覆盖?这里的覆盖是指不重复不遗漏地盖住整个棋盘。
下图是一种可能的覆盖方式(图片来自 Wiki 百科):
这个问题的答案是 12988816,非常大的一个数字,绝对不是一个一个数出来的。1961 年德国物理学家 Kasteleyn 借助于线性代数中的一个结论首先解决了这个问题,我们接下来就介绍他的方法。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第一步:多米诺覆盖的计数 = 完美匹配的计数
把整个棋盘看做一个图 $G$,64 个方格看做 $G$ 的顶点,$G$ 中两个顶点相邻当且仅当它们对应的方格相邻。这样得到一个简单无向平面图 $G$,计算棋盘的多米诺覆盖的个数转化为计算 $G$ 的完美匹配的个数。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二步:用 Pfaff 多项式把一个图的所有完美匹配糅合在一个表达式中
这一步比较长,涉及的细节也比较复杂。
我们先看一个 4 阶反对称矩阵的例子:
\[\det\begin{pmatrix}0&a_{12}&a_{13}&a_{14}\\-a_{12}&0&a_{23}&a_{24}\\-a_{13}&-a_{23}&0&a_{34}\\-a_{14}&-a_{24}&-a_{34}&0\end{pmatrix}=(a_{12}a_{34}-a_{13}a_{24}+a_{14}a_{23})^2.\]你发现了什么?这个反对称矩阵的行列式可以表示为某个多项式的平方!不仅如此,观察右边每个单项式的下标你发现,它们分别是 $\{(12),(34)\}$,$\{(14),(23)\}$,$\{(13),(24)\}$,恰好跑遍把集合 $\{1,2,3,4\}$ 两两配对的所有方式!
这个结论不是偶然的,实际上任何偶数阶反对称矩阵的行列式都可以表示为一个多项式的平方,这个多项式叫做 Pfaff 多项式。
那么奇数阶反对称矩阵呢?它们的行列式都是 0,所以不考虑它们。
下面来定义 Pfaff 多项式。
考虑一种把集合 $S=\{1,2,\ldots,2n\}$ 两两配对(从而分成 $n$ 对)的方式 $\pi$,记作\[\pi=(i_1,j_1)(i_2,j_2)\cdots(i_n,j_n),\quad i_k<j_k,\quad k=1,\ldots,n.\]$\pi$ 叫做集合 $S$ 的一个匹配。
对给定的 $2n$ 阶反对称矩阵 $A=(a_{ij})$,定义 \[ a_\pi=a_{i_1j_1}a_{i_2j_2}\cdots a_{i_nj_n}.\]
$a_\pi$ 总是矩阵 $A$ 的上三角中的元素的乘积。
我们还要定义匹配 $\pi$ 的符号 $\text{sign}(\pi)$。把 $1,2,\ldots,2n$ 标在数轴上,然后用数轴上方的弧线依次连接 $(i_1,j_1)$, $\cdots$, $(i_n,j_n)$,弧线之间的全部交点个数记作 $k$,定义 $\text{sign}(\pi)=(-1)^{k}$。
定理:设 $A$ 是 $2n$ 阶反对称矩阵,则\[\det A=(\sum_{\pi}\text{sign}(\pi) a_\pi)^2=[\text{pf(A)}]^2.\]
这里 $\pi$ 跑遍 $\{1,2,\ldots,2n\}$ 的所有匹配。
证明:根据行列式的定义,
\[\det A=\sum_{\sigma}\text{sign}(\sigma) a_{\sigma}=\sum_{\sigma}\text{sign}(\sigma) a_{1\sigma(1)}a_{2\sigma(2)}\cdots a_{n\sigma(n)}.\]
这里 $\sigma$ 跑遍置换群 $S_{2n}$。
在 $\sigma$ 的轮换分解中,如果某个轮换的长度是奇数,比如设 $\sigma=\sigma_1\sigma_2\cdots\sigma_l$,其中且 $\sigma_1$ 长度是奇数且它的最小元小于其它所有长度为奇数的轮换包含的元素,那么定义 $\sigma‘=\sigma_1^{-1}\sigma_2\cdots\sigma_l$,则 $\text{sign}(\sigma)=\text{sign}(\sigma‘)$,但是 \[a_{\sigma_1}=\prod a_{i\sigma_1(i)}=-\prod a_{\sigma_1(i)i}=-\prod a_{i\sigma_1^{-1}(i)}=-a_{\sigma_1^{-1}}.\]
所以 $\sigma$ 和 $\sigma‘$ 对应的求和项抵消,(注意 $\sigma‘$ 对应的正好也是 $\sigma$)因此在 $\det A$ 的求和式中只要考虑轮换分解长度都是偶数的那些置换。
在 $[\text{pf}(A)]^2$ 展开式中,每一项形如 \[\text{sign}(\pi) a_{\pi}\cdot\text{sign}(\mu)a_{\mu},\]我们要证明这样的每一项都和剩下的轮换分解长度都是偶数的 $\sigma$ 对应的 $\text{sign}(\sigma)a_{\sigma}$ 一一对应。
首先我们要建立一对匹配 $(\pi,\mu)$ 和分解式都是偶轮换的置换 $\sigma$ 之间的一一对应,然后证明这个对应保持权的相等。
对任何一对匹配 $(\pi,\mu)$,它们把 $S=\{1,2,\ldots,2n\}$ 变成一个顶点度数都是 2 的正则图,从而这个图可以表示为若干回路的并,在一个回路中,$\pi$ 的边和 $\mu$ 的边是交错出现的,因此每个回路的长度都是偶数。我们把每一个回路对应到一个偶轮换:找到该回路中最小的元素,然后从这个元素出发,沿着匹配 $\pi$ 的方向绕一圈,这样得到一个偶轮换;对每个回路都如此做,就得到一个轮换分解长度都是偶数的置换。反过来,给定这样的一个置换,逆着上述步骤也很容易得到对应的两个匹配 $(\pi,\mu)$。
然而最困难的部分是证明这个对应保持权的相等。
一切的一切要依赖于下面这个引理:
引理:如果在匹配 $\pi$ 中,$i$ 和 $i+1$ 不是一对,那么交换 $i$ 和 $i+1$ 得到的匹配 $\pi‘$ 与 $\pi$ 的符号相反。
引理的证明:把 $i$ 和 $i+1$ 以及它们的“配偶”一共四个点组成的集合记作 $M$,剩下的 $2n-4$ 点组成的集合为 $S\backslash M$。
两条属于 $S\backslash M$ 的弧相交与否,不受交换 $i$ 和 $i+1$ 这个事情的影响,所以 $S\backslash M$ 自身的交点个数在交换前后不发生改变。
一条 $S\backslash M$ 中的弧和一条 $M$ 中的弧是否相交,可能会受到交换的影响,但是 $S\backslash M$ 中的弧和 $M$ 中的弧的交点总数的奇偶性却不受交换影响。设 $xy$ 是一条 $S\backslash M$ 中的弧,若 $M$ 中有奇数个点落在 $x$ 和 $y$ 中间,则弧 $xy$ 和 $M$ 中的弧有奇数个交点,同理若 $M$ 中有偶数个点落在 $x$ 和 $y$ 中间,则弧 $xy$ 就和 $M$ 中的弧有偶数个交点。这个事实比较直观,但是非要仔细说起来又比较啰嗦,所以留给大家自己验证。
最后就剩下考察 $M$ 中的弧的交点在交换前后的变化情况了。然而 $M$ 一共只有四个点,四个点只有三种可能的匹配,只要逐一验证即可,详细过程仍然留给大家。
总结一下,在这三种情形中,第一种情形交点数目不受交换的影响,第二种情形交点数目的奇偶性不受交换的影响,第三种情形交点数目会改变 1。这样我们就证明了交换以后置换的符号会变号。
现在我们回到定理的证明。我们要证的是前面给出的对应保持权的相等。即
\[\text{sign}(\pi)a_{\pi}\cdot\text{sign}(\mu)a_{\mu}=\text{sign}(\sigma)a_{\sigma}.\]
显然我们有
\[a_{\pi}a_{\mu}=(-1)^{e(\sigma)}a_{\sigma}.\quad e(\sigma)=\#\{i:\sigma(i)<i\}.\]
所以只要证
\[\text{sign}(\pi)\text{sign}(\mu)=(-1)^{e(\sigma)} \text{sign}(\sigma).\quad (\ast)\]
这个等式我们还不知道它是否成立,但是我们可以说明,只要它对某一个特殊的置换 $\sigma$ 成立,那么它就对所有与 $\sigma$ 共轭的置换成立。
假设这个等式对某个 $\sigma$ 成立,考虑在 $\sigma$ 中交换 $i$ 和 $i+1$,这个相当于用对换 $(i,i+1)$ 在 $\sigma$ 两边做共轭,因此 $\text{sign}(\sigma)$ 这一项保持不变。
1. 如果 $i$ 和 $i+1$ 在 $\sigma$ 的轮换分解中不相邻,也就是说 $\sigma$ 不把 $i$ 变成 $i+1$ 也不把 $i+1$ 变成 $i$,那么它们在 $\pi$ 和 $\mu$ 中都不是一对,交换后 $\text{sign}(\pi)$ 和 $\text{sign}(\mu)$ 都变,从而乘积不变;$e(\sigma)$ 显然也不变,因此等式保持成立。
2. 如果 $i$ 和 $i+1$ 在 $\sigma$ 的轮换分解中相邻,这又有两种可能:第一种是 $(i,i+1)$ 这一对属于 $\pi$ 和 $\mu$ 中的某一个而不属于另一个,则 $\text{sign}(\pi)$ 和 $\text{sign}(\mu)$ 一个变号另一个不变,$e(\sigma)$ 改变 1,等式仍然保持成立。第二种可能是 $(i,i+1)$ 同时属于 $\pi$ 和 $\mu$,这种情况就是说 $(i,i+1)$ 构成一个单独的轮换,那么 $\text{sign}(\pi)$ 和 $\text{sign}(\mu)$ 都不变,$e(\sigma)$ 不变,因此等式还是保持成立的。
所以我们只要在每一个共轭类中挑选一个置换,验证 $(\ast)$ 成立。最简单的选择就是 \[\sigma=(12\cdots k)(k+1\cdots )\cdots(\cdots n).\]
对这样的置换直接验证即可。
至此我们就证明了定理。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第三步:平面图的 Pfaff 定向,把 Pfaff 多项式中的所有匹配变成同号
Pfaff 多项式的结论启发我们可以用它来计算一个图 $G$ 的所有完美匹配的个数。
首先给 $G$ 的边任意定向,得到一个简单有向图 $\overrightarrow{G}$。写出 $\overrightarrow{G}$ 的邻接矩阵 $A=(a_{ij}):$\[a_{ij}=\left\{\begin{array}{ll}1& v_i\rightarrow v_j\\-1& v_j\rightarrow v_i\\ 0&\text{else}.\end{array}\right.\]
则 $A$ 是一个反对称矩阵且\[\det A=[\sum_{\pi}\text{sign}(\pi)a_{\pi}]^2.\]
注意到每一项 $\text{sign}(\pi)a_{\pi}$ 值为 1,-1 或者 0;$a_{\pi}$ 不为 0 当且仅当 $\pi$ 给出图 $\overrightarrow{G}$ 的一个完美匹配。所以图 $G$ 的每一个完美匹配都和 Pfaff 多项式中的每个非零项一一对应。不幸的是,这些非零项有 +1 有 -1,你把它们直接加起来得到的可不是所有匹配的数目。但是我们可以这样想: 能否通过适当的定向 $G$,即适当给 $a_{ij}$ 赋以 +1 或者 -1,使得每一项 $\text{sign}(\pi)a_{\pi}$ 都是同号的?如果可以,那么对应的邻接矩阵 $A$ 的行列式开方 $\sqrt{\det A}$ 就是要求的完美匹配的个数。
在证明 Pfaff 多项式时,我们使用了这样的对应:\[\text{sign}(\pi)a_{\pi}\cdot\text{sign}(\mu)a_{\mu}=\text{sign}(\sigma)a_{\sigma}.\]
所以只要让每一个 $\text{sign}(\sigma)a_{\sigma}=1$ 即可。设 $\sigma=\sigma_1\cdots\sigma_l$,则 $\text{sign}(\sigma)=(-1)^l$,所以只要让每一个 $a_{\sigma_i}=-1$ 即可。
注意每个 $\sigma_i$ 都是长度为偶数的回路,$a_{\sigma_i}$ 是这个回路沿某个方向的边的权的乘积,因此只要有奇数条边是正向的(当然也就有奇数条边是反向的)即可。
定义:在一个有向图 $G$ 中,如果一条回路的 $C$ 的长度是偶数,且删除 $C$ 后剩下的部分仍然存在完美匹配,就称 $C$ 是一个好的回路。如果 $G$ 的一个定向使得 $G$ 的所有好的回路都是奇定向的(即沿着回路的任一方向行走都有奇数条边的定向与行走方向一致),就称这个定向是 $G$ 的一个 Pfaff 定向。
对一般的图,找到其 Pfaff 定向是困难的事,但是对平面图却很简单。这就是下面的定理:
定理【Kasteleyn】:设 $G$ 是一个简单平面图,则可以给 $G$ 的边适当定向,使得当逆时针沿着 $G$ 的每个面行走时(外部的无穷区域不算),都有奇数条边与行走方向一致,这种定向就是 $G$ 的 Pfaff 定向。
证明:首先说明存在这样的定向,使得 $G$ 的每个面都是奇定向的。对面的个数归纳:$f=0$,则 $G$ 是一个树,任何定向都是 Pfaff 定向。设结论对有 $f-1$ 个面的简单有向图成立,对 $f$ 个面的图 $G$,找到一条内部面与外部区域相邻的边 $e$,删去 $e$ 得到的是一个有 $f-1$ 个面的有向图,因此由归纳假设,可以让每个面都是奇定向,然后把 $e$ 补回去,适当给 $e$ 定向使得最后这个面也是奇定向的即可。
接下来说明这样的定向是 Pfaff 定向。对 $G$ 中任意好的回路 $C$,沿着 $C$ 内部的每个面都逆时针走一遍,然后数数一共有多少条边和我们的行走方向一致。
假设 $C$ 长度为 $l$,$C$ 内部有 $p$ 个顶点,$q$ 条边,$r$ 个面。
假设沿着每个面行走时有 $c_i$ 条边是逆时针定向的($i=1,\ldots,r$),$C$ 上逆时针定向的边的个数为 $c$,则遇到的逆时针定向的边的总数为\[\sum_{i=1}^rc_i=c+q.\]这是因为 $C$ 内部的每条边都被走了两次,一次逆时针,一次顺时针,因此都被计算了一次;而 $C$ 上的边只有逆时针定向的那些被计算了一次。
由于每个 $c_i$ 都是奇数,因此\[ r\equiv c+q\ (\text{mod}\ 2).\]
另一方面对 $C$ 包含的区域用 Euler 定理,得到
\[ (p+l)-(q+l)+r=1.\]
从而 $p$ 与 $c$ 奇偶性相反,但是 $p$ 是偶数,因此 $c$ 是奇数,这就证明了定理。
回到文章开始的问题:计算国际象棋棋盘的多米诺覆盖的个数。我们计算一般的 $n\times n$ 的棋盘的完美匹配的个数。首先要作出 Pfaff 定向来,下面这个图给出了对一般的长方形棋盘的 Pfaff 定向的方法:
下一步就是写出这个有向图的邻接矩阵来。(顶点标号的顺序就是从左到右先第一行,再第二行,以此类推)。设
\[B=\begin{pmatrix}0&1&0&&\\-1&0&1&&\\&-1&0&1&\\&&&\ddots&1\\&&&-1&0\end{pmatrix}_{n\times n}.\]
则邻接矩阵为 $$A=\begin{pmatrix}B&I&&&\\-I&-B&I&&\\&-I&B&&\\&&&\ddots&I\\&&&-I&(-1)^{n-1}B\end{pmatrix}.$$
这里的 $A$ 是一个 $n^2$ 阶的分块矩阵。
适当给 $A$ 的行列变号,可以得到
\[\det A=\det\begin{pmatrix}B&-I&&&\\-I&B&-I&&\\&-I&B&-I&\\&&&\ddots&-I\\&&&-I&B\end{pmatrix}.\]
从而 \[\det A=\det(B\otimes I-I\otimes C).\]
其中
\[C=\begin{pmatrix}0&1&0&&\\1&0&1&&\\&1&0&1&\\&&&\ddots&1\\&&&1&0\end{pmatrix}.\]
剩下的就是线性代数中求特征值的部分,这里就不写了,最终的答案是
\[\sqrt{\det A} =2^{n^2/2}\prod_{k=1}^n\prod_{l=1}^n(\cos^2\frac{k\pi}{n+1}+\cos^2\frac{l\pi}{n+1})^{1/4}.\]
这就是要求的完美匹配的个数。
棋盘的多米诺覆盖:Dimer Lattice Model,Pfaff 多项式,Kasteleyn 定理