(1)基于计时函数clock()进行毫秒级计时。
(2)基于计时函数time()进行秒级计时。
二、实验要求:
编写两个程序,分别调用下列两个函数测试它们在不同计算规模时的运行时间并验证其时间复杂度,并画出计算时间相对于计算规模的函数曲线示意图。
(1) 在三重循环下的基本加法运算的计算时间与计算规模的关系,其时间复杂度为O( n3 )。函数定义如下:
void add ( int n )
{
int i, j, x;
x = 1;
for( i = 1; i<= n; j++ )
for( j = 1; j <= i; j++ )
for( k = 1; k<= j; k++ )
x++;
}
(2) 调用Hanoi函数测试汉诺塔问题的计算时间与计算规模的关系,其时间复杂度为O( 2n )。函数定义如下:
void hanoi( int disc, int start, int temporary, int goal )
{
if( disc == 1)
printf( "%d -> %d\n" , start , goal);
else
{
hanoi( disc - 1, start, goal, temporary );
hanoi( 1, start, temporary, goal );
hanoi( disc - 1, temporary, start, goal );
} // end else
} // end hanoi
以下程序能够测试函数在不同规模时运行的时间,并且显示其的过程,能够验证其时间复杂度。
三:实验结果
1. 源程序
#include<stdio.h>
#include<time.h>
#include<windows.h>
void main()
{
void hanoi(int n, int start, int temp, int goal);
int start = 1;
int temp = 2;
int goal=3;
void add(int n);
int n;
printf("输入计算的规模:");
scanf_s("%d", &n);
hanoi(n, start, temp, goal);
int a = clock();
printf("起始时刻为:%d\n", a);
add(n);
int b = clock();
printf("结束时刻为:%d\n", b);
int c = b - a;
printf("n = %d 时,计算时间为%d", n, c);
system("pause");
}
void add(int n)
{
int i, j, k;
int x = 1;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
{
for (k = 1; k <= n; k++)
x++;
}
}
void hanoi(int n, int start, int temp, int goal)
{
if (n == 1)
{
printf("%d->%d\n", start, goal);
}
else
{
hanoi(n- 1, start, goal,temp);
printf("%d->%d\n", start, goal);
hanoi(n- 1, temp, start, goal);
}
}
2.执行结果(屏幕截图)
3.计算时间关于计算规模的函数曲线示意图