导航:首页 > 源码编译 > 汉诺塔算法复杂度

汉诺塔算法复杂度

发布时间:2023-08-28 20:46:01

A. 汉诺塔该怎么玩,方法

汉诺塔算法介绍:

一位美国学者发现的特别简单的方法:只要轮流用两次如下方法就可以了。

把三根柱子按顺序排成“品”字型,把所有圆盘按从大到小的顺序放于柱子A上,根据圆盘数量来确定柱子排放的顺序:

n若为偶数的话,顺时针方向依次摆放为:ABC;而n若为奇数的话,就按顺时针方向依次摆放为:ACB。这样经过反复多次的测试,最后就可以按照规定完成汉诺塔的移动。

因此很简单的,结果就是按照移动规则向一个方向移动金片:

如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C。

(1)汉诺塔算法复杂度扩展阅读:

汉诺塔经典题目:

三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,且每次移动同一根柱子上都不可以出现大盘子在小盘子上方的情况。

至少需要几次移动的问题,我们设移动次数为H(n)。

把上面n-1个盘子移动到柱子C上,把最大的一块放在B上,把C上的所有盘子移动到B上,由此我们得出表达式:

H⑴ = 1

H(n) = 2*H(n-1)+1 (n>1)

很快我们就可以得到H(n)的一般式为:

H(n) = 2^n - 1 (n>0)

且这种方法的确是最少次数的,证明非常简单,可以尝试从2个盘子的移动开始证,可以试试。

进一步加深问题:

假如现在每种大小的盘子都有两个,并且是相邻的,设盘子个数为2n,问:⑴假如不考虑相同大小盘子的上下要几次移动,设移动次数为J(n);⑵只要保证到最后B上的相同大小盘子顺序与A上时相同,需要几次移动,设移动次数为K(n)。

⑴中的移动相当于是把前一个问题中的每个盘子多移动一次,也就是:

J(n) = 2*H(n) = 2*(2^n - 1) = 2^(n+1)-2

在分析⑵之前,我们来说明一个现象,假如A柱子上有两个大小相同的盘子,上面一个是黑色的,下面一个是白色的,我们把两个盘子移动到B上,需要两次。

盘子顺序将变成黑的在下,白的在上,然后再把B上的盘子移动到C上,需要两次,盘子顺序将与A上时相同,由此我们归纳出当相邻两个盘子都移动偶数次时,盘子顺序将不变,否则上下颠倒。

回到最开始的问题,n个盘子移动,上方的n-1个盘子总移动次数为2*H(n-1),所以上方n-1个盘子的移动次数必定为偶数次,最后一个盘子移动次数为1次。

讨论问题⑵:

综上可以得出,要把A上2n个盘子移动到B上,可以得出上方的2n-2个盘子必定移动偶数次,所以顺序不变,移动次数为:

J(n-1) = 2^n-2

然后再移动倒数第二个盘子,移动次数为2*J(n-1)+1 = 2^(n+1)-3,

最后移动最底下一个盘子,所以总的移动次数为:

K(n) = 2*(2*J(n-1)+1)+1 = 2*(2^(n+1)-3)+1 = 2^(n+2)-5

B. 各种算法的时间复杂度

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

一般时间复杂度到了2 n(指数阶)及更大的时间复杂度,这样的算法我们基本上不会用了,太不实用了.比如递归实现的汉诺塔问题算法就是O(2 n).

平方阶(n^2)的算法是勉强能用,而nlogn及更小的时间复杂度算法那就是非常高效的算法了啊.

空间复杂度
冒泡排序,简单选择排序,堆排序,直接插入排序,希尔排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引)

快速排序空间复杂度为logn(因为递归调用了) ,归并排序空间复杂是O(n),需要一个大小为n的临时数组.

基数排序的空间复杂是O(n),桶排序的空间复杂度不确定

原文: https://blog.csdn.net/weiwenhp/article/details/8622728

阅读全文

与汉诺塔算法复杂度相关的资料

热点内容
加密货币泡沫的危害 浏览:461
云视讯注册状态服务器错误801 浏览:852
python中删除csv 浏览:591
oracle创建表空间命令 浏览:14
十块钱五分钟的解压人偶 浏览:934
学android看什么书 浏览:376
网络加密了手机上怎样显示 浏览:805
文章被以什么形式存放在服务器中 浏览:708
炮兵命令 浏览:116
网商园app怎么样啊 浏览:325
app字体大小怎么设置在哪 浏览:432
华为app选择网络模式哪里找 浏览:321
策划优化服务器是什么 浏览:238
联想的组织服务器怎么连接 浏览:218
程序员千里贵州头条 浏览:672
阿里云服务器199一年 浏览:688
支点app里面有币怎么办 浏览:65
程序员ps 浏览:720
滴滴app顺风车怎么更换车辆信息 浏览:22
胡莱三国怎么更换服务器 浏览:816