通过分析三柱汉诺塔的递归求解过程,我们能够线性递推出移动nnn个盘子的最小移动次数

设三柱汉诺塔,移动nnn个盘子的最小移动次数为T(3,n)T(3, n)T(3,n)
T(3,n)={1n=12f(3,n−1)+1n>1T(3,n)=\left\{ \begin{aligned} & 1 & n=1 \\ & 2f(3,n-1) +1 & n > 1 \\ \end{aligned} \right. T(3,n)={​12f(3,n−1)+1​n=1n>1​
由此可得T(3,n)=2n−1T(3,n) = 2^n - 1T(3,n)=2n−1


然而对于多柱汉诺塔问题,我们并没有一个非常直观的策略来移动圆盘。

首先考虑四柱汉诺塔的情况(又称Reve’s Puzzle),对四柱汉诺塔上移动nnn个盘子,可以通过分成如下333个步骤

  1. 将rrr个圆盘从AAA柱,通过CCC、DDD柱移动到BBB柱
  2. 将n−rn-rn−r个圆盘从AAA柱,通过CCC柱移动到DDD柱
  3. 将rrr个圆盘从BBB柱,通过AAA、CCC柱移动到DDD柱

那么我们的疑问是能够将111、333两个步骤作为子问题。通过一些简单的运算,我们发现对于较小的nnn,使用该方法的结果是正确的。

不加证明该递归算法的正确性,我们可以归纳递推式为
T(4,n)=min⁡1≤r&lt;n2T(4,n−r)+T(3,r)T(4, n) = \min_{1 \leq r &lt; n }{2T(4, n-r) + T(3, r)} T(4,n)=1≤r<nmin​2T(4,n−r)+T(3,r)

T(4,n)=min⁡1≤r&lt;n2T(4,n−r)+2r−1T(4, n) = \min_{1 \leq r &lt; n }{2T(4, n-r) + 2^r - 1} T(4,n)=1≤r<nmin​2T(4,n−r)+2r−1
产生的数列
T(4,i)=A007664=0,1,3,5,9,13,17,25,…T(4, i) = A007664 = 0, 1,3,5,9,13,17,25,\dots T(4,i)=A007664=0,1,3,5,9,13,17,25,…
对该数列进行差分,能够发现产生的数列为
A137688=1,2,2,4,4,4,8,8,8,8,⋯=20,21,21,22,22,22,…A137688 = 1,2,2,4,4,4,8,8,8,8,\dots = 2^0, 2^1, 2^1, 2^2,2^2,2^2,\dots A137688=1,2,2,4,4,4,8,8,8,8,⋯=20,21,21,22,22,22,…
因此我们可以在O(n)O(n)O(n)的时间内计算出T(4,n)T(4, n)T(4,n)的结果


对于圆柱的数量 m≥5m\geq5m≥5 的情况,我们是否可以继续使用递归的思路?

我们尝试继续使用333个步骤描述对mmm柱汉诺塔的移动方式:

  1. 将rrr个圆盘从AAA柱,通过m−2m-2m−2根圆柱移动到BBB柱
  2. 将n−rn-rn−r个圆盘从AAA柱,通过其他m−3m-3m−3根圆柱移动到mmm柱
  3. 将rrr个圆盘从BBB柱,通过m−2m-2m−2根圆柱移动到mmm柱

在这种移动过程中,我们会产生一些疑问,如:我们是否可以进行如下操作

  1. 将r’r’r’个圆盘从AAA柱,通过m−3m-3m−3根圆柱移动到BBB柱、CCC柱
  2. 将n−r’n-r’n−r’个圆盘从AAA柱,通过其他m−4m-4m−4根圆柱移动到mmm柱
  3. 将r′r'r′个圆盘从BBB柱、CCC柱,通过m−3m-3m−3根圆柱移动到m​m​m​柱

这样的话,111、333两个步骤就难以通过递归方式描述,因为这把r’r’r’个圆盘放到了两根(甚至更多根)圆柱上

但是我们稍加考虑,假设我们移到BBB柱上的数量为rBr_BrB​,本质上与我们在之前方案上先移动rBr_BrB​个圆盘,再移动n−rBn-r_Bn−rB​个圆盘到mmm柱上的方案是等价的。

这333个步骤已经是Frame-Stewart算法的主要思想,我们在利用公式简要地描述:
T(m,n)=min⁡1≤r&lt;n2T(m,n−r)+T(m−1,r)T(m,n) = \min_{1 \le r &lt; n}2T(m,n-r)+T(m-1,r) T(m,n)=1≤r<nmin​2T(m,n−r)+T(m−1,r)
对此,除m=3,4m=3,4m=3,4的情况外,我们需要O(mn2)O(mn^2)O(mn2)的时间复杂度计算mmm柱汉诺塔问题,含有nnn个圆盘时的最少移动次数。

多柱汉诺塔的Frame-Stewart算法相关推荐

  1. 多柱汉诺塔最优算法设计探究

    多柱汉诺塔最优算法设计探究   引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因此多柱汉诺塔的柱子个数M ...

  2. Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...

  3. 三柱汉诺塔四柱汉诺塔

    汉诺塔问题_哔哩哔哩_bilibili 三柱汉诺塔,从整体来看,分为三部 1.先让n-1个盘先由a柱放在b柱 2.把第n个盘由a柱放在c柱 3.将这n-1个盘由b柱移动到c柱 而其中的递归过程就是直到 ...

  4. 多柱汉诺塔问题浅析——算法及公式推导

    汉诺塔问题 汉诺塔(Tower of Hanoi)是一个数学游戏:有三根柱子,其中一根柱子自底向上串着尺寸渐小的多个圆盘,遵循以下规则: 1.一次只能移动一个圆盘: 2.大圆盘不能放在小圆盘上面. 请 ...

  5. 四柱汉诺塔 -- 动态规划求解最优移动次数

    自己用Java写了一个前台进行四柱汉诺塔的移动演示,是按照最优次序进行移动的,链接里有详细的代码实现:https://download.csdn.net/download/qq_40285036/10 ...

  6. hdu 1207 汉诺塔II (四柱汉诺塔)

    思路是借鉴网上一大牛的,写的很完美了,所以一句没改,代码是自己敲的,C语言版 变体汉诺塔 问题描述:在经典汉诺塔的基础上加一个条件,即,如果再加一根柱子(即现在有四根柱子a,b,c,d),计算将n个盘 ...

  7. 时间恒久远,汉诺塔永流传(C实现经典三柱汉诺塔)

    还记得猩球崛起上威尔给凯撒的那个益智汉诺塔吗?我今天就百度了一下: 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主 ...

  8. 多柱汉诺塔问题Hanoi 动态规划求解方案数

    大家都很强,可与之共勉. 问题描述: n个盘子,m个柱子,从1号柱子移到m号柱子.满足汉诺塔的游戏规则,问最少的移动步数. 问题分析: 懒得分析了. 自己推一下,很简单的,我只想了一个小时23333 ...

  9. [HDU 1207] 汉诺塔II (四柱汉诺塔)

    描述 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆 ...

最新文章

  1. npm安装less报错 rollbackFailedOptional: verb npm-session
  2. 科普丨人工智能发展的S曲线
  3. IOS开发--深拷贝与浅拷贝(mutableCopy与Copy)详解
  4. spring autowired idea都匹配上了_你清楚这几个Spring常用注解吗?
  5. 2 0 2 0 年 第 十 一 届 蓝 桥 杯 - 省赛 - Python大学组 - A. 门牌制作
  6. adb无法连接安卓手机
  7. antd 能自适应吗_一种能自适应识别母线运行方式的备自投装置应用探讨
  8. delphi 简单的发送字符串消息
  9. Python学习足迹
  10. 【直播回顾】Hello HarmonyOS系列应用篇完美收官!
  11. 用bmfont工具生成.fnt文件,但合成图片会分开问题
  12. git 上传出现“ ! [rejected] master -> master (non-fast-forward)”
  13. 栅格地图中自由区域之Bresenham算法及个人搜索算法对比
  14. Qt QPixmap旋转任意角度
  15. 用ue4怎么制作一个物体故障闪烁的特效
  16. Henway —— 小鸡过路游戏
  17. 六顶思考帽与单一职责
  18. 第二周总结(系统挂载重要目录、文件优化硬件软件安装)
  19. 域名欺诈之辩:美国最高法院最近的规定会否改变网站运营的方式?
  20. 博弈论进阶之Anti-SG游戏与SJ定理(转载)

热门文章

  1. Essential Lightwave 3D 8
  2. 【论文阅读】An Image Patch is a Wave: Quantum Inspired Vision MLP
  3. 检测到 #include 错误。请更新 includePath。无法打开 源 文件xxx
  4. 关于什么是逐行扫描的解释
  5. win10系统在电源选项中限制cpu最大频率(更新后丢失“处理器电源管理“项)
  6. 【达内课程】设计模式
  7. IOS6 自动布局 入门(1)
  8. 数字精准计算问题总结
  9. 张飞老师硬件第二十四部--马达驱动--原理图设计①----5三项直流无刷永磁电机相关
  10. opera32linux,Opera浏览器