M皇后问题 - 构造法原理
本文完整版 (转载请注明出处,仅供分享学习,严禁用于商业用途)
[写在前面]
这是现在网上流传的一套关于M皇后问题的构造法公式,但是这套公式是怎么得来的,却鲜有人知。而文本会详细阐述这套公式的推导过程:
1. 前言
文本核心内容主要译自E. J. Hoffman、J. C. Loessi 和R. C. Moore发表于Mathematics Magazine《数学杂志》上的学术论文《Constructions for the Solution of the m Queens Problem》(已被美国数学协会Mathematical Association of America公开),具体期数为Vol. 42, No. 2 (Mar., 1969), pp. 66-72。
该文献可从以下途径购买:
http://www.jstor.org/stable/2689192
http://links.jstor.org/sici?sici=0025-570X%28196903%2942%3A2%3C66%3ACFTSOT%3E2.0.CO%3B2-9
该文献的英文原文链接:http://penguin.ewu.edu/~trolfe/QueenLasVegas/Hoffman.pdf
该文献的CSDN下载地址:http://download.csdn.net/download/lyy289065406/10184847
2. 问题背景
M皇后问题: 在M×M格的国际象棋上摆放M个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
根据场景,又有三种衍生问题:
① 共有多少种摆法(即有多少种可行解)
② 求出所有可行解
③ 求任意一个可行解
问题① 属于 禁位排列 问题,目前是存在通项公式直接求解的。
问题② 属于 搜索 问题,在网上也有多种解法,主流是 回溯法(另有衍生的位运算变种算法),但不管如何优化,回溯法都有一个致命的问题:M值不能过大(一般M=30已是极限)。
问题③ 属于 问题② 的子集,因此很多人的切入点依然是回溯法,也有启发式算法的解法:如遗传算法、还有刘汝佳在《算法艺术与信息学竞赛》提出的启发式修补算法。启发式算法在M<10000左右都是可解的,但是因为启发式算法均存在随机性,收敛速度视不同的收敛因子而变化(我看过某篇论文称启发式算法在M=10000时的耗时等价于回溯法M=30的耗时)。
但早在1969年, 问题③ 的解就被E. J. Hoffman、J. C. Loessi 和R. C. Moore找到了潜在的数学规律,通过推导出数学公式,利用 构造法 使得该问题可在O(1) 的时间复杂度得到解。
3. 译者的话
① 由于原文使用了“m皇后”进行描述,所以本文也使用“m皇后”进行描述。我这里就不调整为大多数人习惯的“n皇后”了,避免某些数学公式参数混淆。
② 原文写得有点艰涩,有些中间步骤是跳过了。我就加上自己的理解做了意译,并补上了跳过的步骤和图示,但是核心的推导思路和步骤不会修改。
③ 原文首先给出了3个构造式(其实就是m皇后问题的通解式),然后以此为结论展开了一系列的推导证明这3个构造式是正确的。但是这3个构造式真正是怎么得来,原作者并没有说,估计是原作者做了大量的演绎、从m皇后的特解找到了潜在规则所总结出来的通解。
4. 译文:m皇后问题的构造解法
4.1. 数学模型定义
m皇后问题最初是由Gauss(高斯)提出的,该问题描述如下:
是否有可能在一个m×m的国际棋盘上放置m个皇后使得她们无法互相攻击?(注:皇后是国际象棋中的一种棋子,她可以对横、竖、斜三个方向的棋子发起攻击)
至此,m皇后问题的解模型可以定义为如下:
放置m个皇后到一个m×m的方格矩阵,使得皇后们的所在的方格同时满足下面所有条件:
① 行编号唯一
② 列编号唯一
③ 主对角编号唯一
④ 次对角编号唯一
这个模型足以解决所有m皇后问题(但仅适用于m>=4的情况,因为m=2、3时无解,m=1的解就不需要讨论了)—— 译者注:这个大前提条件会在最后进行论证
4.2. m皇后通解:三个构造式
由于通解公式相对复杂,为了便于说明,此处不从过程推导出结论,而是反其道而行之:先给出结论的通解公式(且不考虑公式是怎么推演出来的),再证明之。
m皇后问题的解的共由3个构造式组成。
4.2.1. 【构造式A】
4.2.2. 【构造式B】
4.2.3. 【构造式C】
4.3. 三个构造式的正确性证明
要证明构造式是成立的,只需要证明每个构造式导出的皇后位置均满足:① 行编号唯一;② 列编号唯一;③ 主对角编号唯一;④ 次对角编号唯一
4.3.1. 【构造式A】的证明
4.3.1.1. 【构造式A】
4.3.1.2. 【定理A】
4.3.1.3. 【定理A】的证明
4.3.2. 【构造式B】的证明
4.3.2.1. 【构造式B】
4.3.2.2. 【定理B】
4.3.2.3. 【定理B】的证明
4.3.3. 【构造式C】的证明
4.3.3.1. 两条【引理】
4.3.3.2. 【定理C】
4.3.3.3. 【定理C】的证明
4.2. 大前提条件m≥4的证明
上述所有的证明,都是基于一开始给出的大前提条件:
对于构造式A或B:令m = 2n,其中 n = 2, 3, 4,…(即m≥4且m是偶数)
对于构造式C:在构造式A或B可解的基础上令m+1(即m≥5且m是奇数)
亦即m皇后问题(m≥4且m是偶数)可通过【构造式A】或【构造式B】求解,而m+1皇后问题(m+1≥5且m是奇数)则可通过【构造式C】求解。
至于为什么m=1、m=2或m=3时并不适用于构造式A、B、C就是这里要讨论的。
首先当m=1时,虽然是有明确的唯一解,但并不存在m=2n的形式。而n作为三个构造式的重要变量,既然一开始就不存在n值,构造式A、B、C也就无从谈起了。
那么需要证明的,就是为什么m=2与m=3也不可取?
5. 译者后记:通解转换式(编程用)
在原作者提出的三个构造式A、B、C中,均使用(i,j)的二维坐标形式标记每个皇后的位置,从数学角度上更易于表达作者的思想,但是不便于编程使用。
为此译者在这里补充针对构造式A、B、C的转换公式,使用一维坐标形式标记每个皇后位置,以配合编程使用(其实这就是目前网上普遍流传的m皇后问题构造式)。
一维坐标的标记方式为:从第1行开始,依次写出m个数字,分别代表每行的皇后列坐标。亦即行坐标为数序(索引/下标),列坐标为数值。
如序列 [5, 3, 1, 6, 8, 2, 4, 7] 等价于 (1,5), (2,3), (3,1), (4,6), (5,8), (6,2), (7,4), (8,7)
5.1.【构造式A】的转换式
5.2.【构造式B】的转换式