提高级源码:三柱汉诺塔相关扩展问题(百度帖吧)

本文详细探讨了汉诺塔问题的几种典型情况,包括从初始状态到结束状态的最优路径输出、特定中间状态前的步骤计数、任意状态到结束状态的最优方案等,并提供了实现这些操作的具体算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 http://tieba.baidu.com/f?kz=694089361

 

设盘子编号为1~N,编号大的尺寸大,有三根柱子1~3。

 

1、输出初始局面(所有盘子都在1号柱子)到终止局面(所有盘子都在3号柱子)的最优方案。
     时间复杂度:Ο(2^N)

 

 

 

 

 

 

 

 2、输出最优方案中某一局面之前经过的步骤数。
    时间复杂度:Ο(N)

 

 

 

 

3、输出当前局面(不一定是最优解的中间步骤)到终止局面的最优方案。
    时间复杂度:Ο(2^N)

 

 

 

 

4、输出当前局面下,把所有盘子移动到任一根柱子的最优方案。
    时间复杂度:Ο(2^N)

 

 

 

 

 

5、输出当前局面下,把所有盘子移动到任一根柱子的最优方案所需步数。
    时间复杂度:Ο(N)

    易知,必定把 1~N-1 移动到 N 处
    否则的话,需要至少 2^(N-1) 步,不会最优。
    所以 N 所在位置就是 目标柱子

    注意到如果 N、N-1、……、k+1 初始时都在同一个根柱子上,那就不用再管它们了。
    只需考虑 k、k-1、……、1

    之所以要移动 i,要么是为了给比它编号大的盘子让路,要么是因为要把它移动到目标柱子。
    所以,如果要把 i 移动到某根柱子 X,那么 i-1、i-2、……、1 也应该移动到 柱子 X

 

 

 

 

 

 

总结:总结一下,对于求方案的问题,因为最坏情况下步骤数可以达到Ο(2^N),所以以上源码在渐进意义上达到最优复杂度。

        对于求步骤数(无须输出方案),以上源码时间复杂度都是Ο(N),由于输入时间已达到Ο(N),所以在渐进意义上也达到了最优复杂度。



 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值