当前位置: 首页 > news >正文

汉诺塔问题详解

《具体数学》第一章习题 12 bonus:

有柱子 A,B,C, 有 \(m_i\) 个半径为 \(i\) 的碟子,规定时刻大碟子不能在小的碟子上方,初始碟子都在柱 A,每次操作将一个柱子最上面碟子挪到另一个柱子最上面,末态柱子按原顺序(相同大小碟子也是)在柱 C。求最小操作次数。

解答:设答案为 \(B(m_1,...,m_n)=B_n\),不强调按原顺序的答案为 \(A(m_1,...,m_n)=A_n\),则有:

  • \(A_n=(m_1\cdots m_n)_2:=m_1\cdot 2^{n-1}+\cdots+m_n\cdot 2^0\).
  • \(n=1\) 时,\(B_n=2m_1-1\).
  • \(m_n=1\) 时,\(B_n=A_n\).
  • 其他情况:\(B_n=2m_n+2A_{n-1}+B_{n-1}\).

证明:类似普通汉诺塔问题得到 \(A\) 的递推式,且发现进行 \(A\) 操作后 \(m_1,...,m_{n-1}\) 组的盘子按原顺序。此部分较容易(\(m_k\) 部分无论在 \(A_{n-1}\) 中正序/反序,\(A_n\) 中重复两次都会正序)。下面只证明最后一种情况。

由归纳法,我们只需证明当 \(n>1, m_n>1\) 时,\(B_n=\min(2m_n+2A_{n-1}+B_{n-1},2m_n-1+4A_{n-1})\) (原递推式代入此式成立,且递推式确定的数列是唯一的)(这对应两种方案:\(A_{n-1}+m_n+A_{n-1}+m_n+B{n-1}\)\(A_{n-1}+(m_n-1)+A_{n-1}+1+A_{n-1}+(m_n-1)+A_{n-1}\)),\(\leq\) 自然成立。下证 \(\geq\)

  • \(m_n\) 移动 \(2m_n-1\) 次(至少如此),则 \(m_1,\cdots,m_{n-1}\) 只能整体移动至少 4 次,所以 \(B_n\) 大于等于第二项。
  • \(m_n\) 移动 \(\geq 2m_n\) 次,则可推知 \(m_1,\cdots,m_{n-1}\) 至少整体移动 3 次,设这部分步数至少为 \(C_{n-1}\)
    只需证明:\(C_n\geq 2A_n+B_n\)(并且 \(\leq\) 也自然成立)(注意 \(n\geq 1\) 与前不同)

\(m_n=1\)\(B_n=A_n\),由 \(A_n\) 定义知成立。
否则:\(m_1,\cdots,m_{n-1}\) 整体至少移动 \(4\) 次(用 \(A\) 的操作可自动按原顺序)要证式右边此部分相同,只看 \(m_n\) 有关部分即可。即只需证明 \(n=1\) 的情况,只需证明 \(C_1\geq 4m_1-1\).

继续分类讨论:
\(M=m_1\) 个盘子编号 \(1,2,...,M\)(从上到下)。设答案为 \(X_M\)\(X_1=3\).
\(m\) 号盘子挪动至少 \(4\) 次,则可知 \(X_M\geq X_{M-1}+4\).
\(m\) 号盘子挪动 \(3\) 次(至少如此),则由局面 \((ALL,O,O)\rightarrow (M,*,*)\rightarrow (O,M*,*)\rightarrow (O,*M*,O)\rightarrow (O,M*,*)\rightarrow (O,*,M*)\rightarrow (O,O,*M*)\rightarrow (O,*,M*)\rightarrow (M,*,*)\rightarrow(ALL,O,O)\) 可以发现除了 \(M\) 以外的至少要挪动 \(4(M-1)\) 次,所以总共至少 \(4(M-1)+3=4M-1\) 次,原式成立。

综上证毕。
过程写的比较粗糙,大佬轻喷(

http://www.zskr.cn/news/54644.html

相关文章:

  • 251119明天就要去适应比赛场地了
  • 在阿里云上部署Redis
  • pip安装第三方包
  • 新来的外包,在大群分享了它的限流算法的实现
  • ThreadLocal 源码解析
  • 黑马程序员SpringCloud微服务开发与实战- Docker项目部署-03
  • C# 和 Tesseract 实现英文数字验证码识别
  • 2025雅思一对一提分攻略:5家靠谱机构适配不同基础学员
  • redis-RDB/AOF-主从复制整理 - 指南
  • A few basic changes in PyQt6 and PySide6 regarding shader-based OpenGL graphics
  • 身份认证与信息管理:简单实验模拟钓鱼网页
  • 深入解析:Android Studio新手开发第二十四天
  • 雅思培训班怎么选?2025实测榜单出炉,5家机构值得优先考虑
  • LDO-实践篇(1)
  • 梦灯花op2 noctuary 歌词+翻译
  • 双穿透架构:Docker 部署 Nextcloud 、CoderServer、使用cpolar 辅助+frp主导的个人开发环境环境解决方案
  • [nanoGPT] ChatGPT 的 LLM 的全栈实现 | 快速上手 - 实践
  • QQ浏览器的制作
  • 爱与时间反应鲜红色慢慢退却 一次次重复直到忘记了誓言 放弃这无果努力不再浪费时间 让心忘记所有感觉 直到永远
  • 06.创建型 - 工厂方法模式(Factory Method Pattern)
  • 实用指南:ArrayList与LinkedList对比:从源码角度分析性能差异ki
  • 百年孤独
  • WPF Prism.Wpf implements mvvm,Prism.DryIOC implements IOC,IEventAggregator pub and sub message
  • 缩手反射
  • 2025.11.19
  • 面试官问你这些,其实是在问你JavaScript执行原理!
  • Linux学习记录(七):WSL
  • 2025年11月消防水泵,多级水泵,自吸水泵厂家推荐:高温工况适用机型优选
  • 11/19
  • Longest Palindromic Substring最长回文子串-Manacher算法