gpt4 book ai didi

c++ - 汉诺塔算法无需在终端窗口打印任何内容

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:44 28 4
gpt4 key购买 nike

典型的汉诺塔问题求解器如下:

void hanoi(int diskNumber , int start, int temp, int finish)
{
if(diskNumber == 1)
{
cout<< " Move Disk " << diskNumber<<" from " << start <<" to "<< finish<<endl;
}
else
{
hanoi(diskNumber-1,start,temp,finish);
cout<<"Move Disk from " << start <<" to "<<finish<<endl;
hanoi(diskNumber - 1,temp,start,finish);
}
}

但我想做的是计算算法运行的时间。因此:

int main
{
//Hanoi:
cout<<"Hanoi Tower Problem:"<<endl;
//3 Disks:
clock_t htimer3 = clock();
hanoi(3, 1,2,3);
cout<<"CPU Time for n = 3 is: "
<<clock() - htimer3/CLOCKS_PER_SEC<<endl;
//6 Disks:
clock_t htimer6 = clock();
hanoi(6, 1,2,3);
cout<<"CPU Time for n = 6 is: "
<<clock() - htimer6/CLOCKS_PER_SEC<<endl;
//9 Disks:
clock_t htimer9 = clock();
hanoi(9, 1,2,3);
cout<<"CPU Time for n = 9 is: "
<<clock() - htimer9/CLOCKS_PER_SEC<<endl;
//12 Disks:
clock_t htimer12 = clock();
hanoi(12, 1,2,3);
cout<<"CPU Time for n = 12 is: "
<<clock() - htimer12/CLOCKS_PER_SEC<<endl;
//15 Disks:
clock_t htimer15 = clock();
hanoi(15, 1,2,3);
cout<<"CPU Time for n = 15 is: "
<<clock() - htimer15/CLOCKS_PER_SEC<<endl;
//End of Hanoi Tower Problem
return 0;
}

这里的问题是,例如,如果我设置 diskNumber = 15,代码将运行 32767 次,这将填满终端窗口,我将丢失它之前生成的行(我必须计算其他一些诸如冒泡排序快速排序等算法。稍后我将使用这些数字绘制图表来表示他们的大 O,即:汉诺塔算法的大 O 是 2^n) 。为了解决这个问题,我修改了代码:

void hanoi(int diskSize, int start, int finish, int temp)
{
if(diskSize == 1)
{
return;
}
else
{
hanoi(diskSize - 1, start, temp, finish);
hanoi(diskSize - 1, temp, finish, start);
}
}

我的主要问题:修改后的代码是否与原始算法的运行时间相同?如果不是,应该怎么办?有什么建议么?

最佳答案

是的,您修改后的代码的时间复杂度与之前的代码相同,因为 cout 需要常数时间。因此,考虑到您正在写入的流,您的运行时间不会受到太大影响(粒度将以纳秒为单位)。

我建议将输出重定向到一个文件。例如:

./executable > FileName

关于c++ - 汉诺塔算法无需在终端窗口打印任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27019502/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com