N皇后问题 - 构造法原理与证明: 时间复杂度O(1)
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)相关推荐
- 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA)
编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 文章目录 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 简 ...
- 【编译原理】FIRST集和FOLLOW集构造法速学
编译原理速成大法 FIRST集和FOLLOW集构造法速成 FIRST FOLLOW FIRST集和FOLLOW集构造法速成 例:对于文法G(E) 首先像E,T,E',F这样的就是非终结符 +,*, ε ...
- [编译原理随记]正则表达式转为NFA状态图(Thompsion构造法)
上级文章 [编译原理随记]正则表达式记号和状态图:https://blog.csdn.net/qq_28033719/article/details/107067798 [编译原理随记]NFA转DFA ...
- 【编译原理】:NFA转变为DFA的子集构造法
整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过"子集构造法"转化为DFA, 三,在把DFA通过"分割法"进行最小 ...
- 【编译原理】 NFA转变为DFA的子集构造法
整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过"子集构造法"转化为DFA, 三,在把DFA通过"分割法"进行最小 ...
- Fredman构造法构造完备哈希
在刘璟的<计算机算法引论--设计与分析>一书中介绍了几种完备哈希(PHF)构造技术,里面提到了Fredman构造法.这本书是零几年写的比较早,光看书中介绍不太容易理解这一构造法的具体流程, ...
- LL1分析构造法_16条数学得分法,想提分快来看!
距离高考不足百日,在注重数学基础的同时,也要注重技巧,好迅速拿分,今天送同学们一份数学得分法,帮助同学们最大限度得分,在高考中取得最高分! 1.圆锥曲线中最后题往往联立起来很复杂导致k算不出,这时你可 ...
- 子集生成算法 之 位向量法和增量构造法
什么是子集生成? 算法竞赛经典入门中的解释:给定一个集合,枚举所有的可能的子集. 位向量法 1.什么是位向量法? 通过构造一个标记向量pd[i],而不直接构造存放题目数据的子集A. 当pd[i]==t ...
- n皇后问题-回溯法求解
n皇后问题-回溯法求解 1.算法描述 在n×n格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. n皇后是由八皇后问题演变而来的.该问题 ...
最新文章
- 什么?他居然想在DLL中放毒!
- c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法
- 广西 启动计算机教案,广西版六年级下册信息技术教案.docx
- javaweb实训第四天下午——员工管理系统-JSPServletJDBC综合练习-CRUD
- PCI Geomatica 操作视频专辑
- HDU 1402(FFT,NNT)
- 一个前端报表设计器的设计分析
- androidx86编译踩坑
- 【总结】大学四年来,用过的一些网站整理
- 计算机管理无用怎么办,win7系统如何将资源管理器窗口中无用的图标删除掉?...
- vvv在线文档导出工具_墙裂推荐一个好用的在线文档编辑工具
- python 加速度_「加速度公式」加速度公式1 - seo实验室
- iOS--上传AppStore时遇到的10个大坑
- excel oracle 可为空,类似excel定位功能用不为空值填充为空列,用sql怎么实现
- HBase的高表和宽表
- 趣味计算机冷知识,19个科学趣味冷知识,你知道多少个
- 同创伟业王维:行业泡沫期易诞生伟大公司
- 基于FPGA的除法器设计
- 企业级旅行App源码、高仿爱鲜蜂源码、iOS Arkit测距源码等
- HDMI CEC协议
热门文章
- Druid连接池简介和配置
- 优秀笔记课件——Access数据库
- VLAN技术防黑+ vtp域VLAN数据同步
- 4、GET和POST的区别
- python 中的 urlencode 编码与 urldecode 解码
- 通过css和js实现流星雨效果
- 【Translate插件】报错:更新TTK失败,请检查网络连接问题
- 站在智慧医院的制高点 阜外华中心血管病医院探索数字化融合实践
- adb关闭系统自动更新
- Linux keypad 设备树,GitHub - bilibilifmk/rpi_mt: 树莓派移动终端 全键盘及2.4寸tft材质屏幕...