M皇后问题 - 构造法原理

*[原] E.J.Hoffman; J.C.Loessi; R.C.Moore* *The Johns Hopkins University Applied Physics Laboratory* *[译] EXP 2017-12-29 *


本文完整版 (转载请注明出处,仅供分享学习,严禁用于商业用途)



[写在前面]

这是现在网上流传的一套关于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】的转换式




5.3. 小结:通解转换式归整

N皇后问题 - 构造法原理与证明: 时间复杂度O(1)相关推荐

  1. 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA)

    编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 文章目录 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 简 ...

  2. 【编译原理】FIRST集和FOLLOW集构造法速学

    编译原理速成大法 FIRST集和FOLLOW集构造法速成 FIRST FOLLOW FIRST集和FOLLOW集构造法速成 例:对于文法G(E) 首先像E,T,E',F这样的就是非终结符 +,*, ε ...

  3. [编译原理随记]正则表达式转为NFA状态图(Thompsion构造法)

    上级文章 [编译原理随记]正则表达式记号和状态图:https://blog.csdn.net/qq_28033719/article/details/107067798 [编译原理随记]NFA转DFA ...

  4. 【编译原理】:NFA转变为DFA的子集构造法

    整体的步骤是三步:  一,先把正规式转换为NFA(非确定有穷自动机),  二,在把NFA通过"子集构造法"转化为DFA,  三,在把DFA通过"分割法"进行最小 ...

  5. 【编译原理】 NFA转变为DFA的子集构造法

    整体的步骤是三步:  一,先把正规式转换为NFA(非确定有穷自动机),  二,在把NFA通过"子集构造法"转化为DFA,  三,在把DFA通过"分割法"进行最小 ...

  6. Fredman构造法构造完备哈希

    在刘璟的<计算机算法引论--设计与分析>一书中介绍了几种完备哈希(PHF)构造技术,里面提到了Fredman构造法.这本书是零几年写的比较早,光看书中介绍不太容易理解这一构造法的具体流程, ...

  7. LL1分析构造法_16条数学得分法,想提分快来看!

    距离高考不足百日,在注重数学基础的同时,也要注重技巧,好迅速拿分,今天送同学们一份数学得分法,帮助同学们最大限度得分,在高考中取得最高分! 1.圆锥曲线中最后题往往联立起来很复杂导致k算不出,这时你可 ...

  8. 子集生成算法 之 位向量法和增量构造法

    什么是子集生成? 算法竞赛经典入门中的解释:给定一个集合,枚举所有的可能的子集. 位向量法 1.什么是位向量法? 通过构造一个标记向量pd[i],而不直接构造存放题目数据的子集A. 当pd[i]==t ...

  9. n皇后问题-回溯法求解

    n皇后问题-回溯法求解 1.算法描述 在n×n格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. n皇后是由八皇后问题演变而来的.该问题 ...

最新文章

  1. 什么?他居然想在DLL中放毒!
  2. c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法
  3. 广西 启动计算机教案,广西版六年级下册信息技术教案.docx
  4. javaweb实训第四天下午——员工管理系统-JSPServletJDBC综合练习-CRUD
  5. PCI Geomatica 操作视频专辑
  6. HDU 1402(FFT,NNT)
  7. 一个前端报表设计器的设计分析
  8. androidx86编译踩坑
  9. 【总结】大学四年来,用过的一些网站整理
  10. 计算机管理无用怎么办,win7系统如何将资源管理器窗口中无用的图标删除掉?...
  11. vvv在线文档导出工具_墙裂推荐一个好用的在线文档编辑工具
  12. python 加速度_「加速度公式」加速度公式1 - seo实验室
  13. iOS--上传AppStore时遇到的10个大坑
  14. excel oracle 可为空,类似excel定位功能用不为空值填充为空列,用sql怎么实现
  15. HBase的高表和宽表
  16. 趣味计算机冷知识,19个科学趣味冷知识,你知道多少个
  17. 同创伟业王维:行业泡沫期易诞生伟大公司
  18. 基于FPGA的除法器设计
  19. 企业级旅行App源码、高仿爱鲜蜂源码、iOS Arkit测距源码等
  20. HDMI CEC协议

热门文章

  1. Druid连接池简介和配置
  2. 优秀笔记课件——Access数据库
  3. VLAN技术防黑+ vtp域VLAN数据同步
  4. 4、GET和POST的区别
  5. python 中的 urlencode 编码与 urldecode 解码
  6. 通过css和js实现流星雨效果
  7. 【Translate插件】报错:更新TTK失败,请检查网络连接问题
  8. 站在智慧医院的制高点 阜外华中心血管病医院探索数字化融合实践
  9. adb关闭系统自动更新
  10. Linux keypad 设备树,GitHub - bilibilifmk/rpi_mt: 树莓派移动终端 全键盘及2.4寸tft材质屏幕...