1. Introduction

大梵天创造世界的时候做了三根柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

Time Complexity

假设有n片,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。此后不难证明f(n)=2^n-1。

Pseudocode

/**

*

* @param n 盘子的数目

* @param origin 源座

* @param assist 辅助座

* @param destination 目的座

*/

public void hanoi(int n, char origin, char assist, char destination) {

if (n == 1) {

move(origin, destination);

} else {

hanoi(n - 1, origin, destination, assist);

move(origin, destination);

hanoi(n - 1, assist, origin, destination);

}

}

思想就是把上面的n-1移到辅助座,把最底下的移到目的座。再把辅助座的移到目的座。具体怎么移动就用递归。

汉诺塔问题的研究

由问题发现每次都是先移动第一个开始,最后一次最后移动且只移动一次。

ecd676d8a865?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

所以当问,第N个的需要移动次数,就可以使用公式了

OJ

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐