我正在看河内程序的递归塔,该函数的调用次数为2 ^ n-1次。我的室友问我,建造64座塔楼需要多长时间。老实说,我不知道答案,所以我希望有人能在这里帮助我,因为我对答案感兴趣,而不是仅仅等待它
Big-O表示法又是什么?
这是我正在查看的代码:
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod)
{
if (n == 1)
{
printf("\n Move disk 1 from rod %c to rod %c", from_rod, to_rod);
return;
}
towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
printf("\n Move disk %d from rod %c to rod %c", n, from_rod, to_rod);
towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}
int main()
{
int n = 4; // Number of disks
towerOfHanoi(n, 'A', 'C', 'B'); // A, B and C are names of rods
return 0;
}
从GeeksforGeeks.org获得了代码
答案 0 :(得分:3)
好吧,您知道高度为n
的塔需要2 n-1 次通话,这些通话大约需要相同的时间。
因此,将其计时一些不太大的n
,并根据您想要的n
进行设置。
等待要解决的高度为64的塔需要太长时间才能直接测量。
关于big-Oh,您知道步数,所以只需删除恒定因子和增长缓慢的项即可。
答案 1 :(得分:1)
根据游戏的起源,这将一直持续到我们所居住的宇宙的尽头:https://en.wikipedia.org/wiki/Tower_of_Hanoi
这个难题是法国数学家爱德华·卢卡斯(ÉdouardLucas)发明的 1883年。有一个关于喀什威斯瓦纳特(Kashi Vishwanath)印度庙宇的故事,其中有一间大房间,里面放着三个破旧的柱子, 被64个金色磁盘包围。婆罗门神父执行命令 一个古老的预言,一直在按照 自那时以来,奉奉梵天不变的规则。难题是 因此也被称为梵天之塔。根据 传说,拼图的最后一步完成后,世界将会 结束。
答案 2 :(得分:0)
“这将花费多长时间解决”不是一个有用的问题;它完全取决于在其上编译和运行代码的系统的处理能力。
“河内之塔的递归实现是什么?”是绝对可以解决的。计算时您会发现,计算出的结果为O(2 ^ n),其中n是您拥有的磁盘数。
您可以在这里找到有关为ToH计算Big O的很好的讨论:Discussion/proof