转载

用clock()函数计算多项式的运行时间

百度百科中定义clock():clock()是C/C++中的计时函数,而与其相关的 数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock(void) ;
简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的 数据类型
1 #include<stdio.h>
2 #include<time.h>
3 #include<math.h>
4 #define max_num 10000
5 clock_t start,stop;//clock_t为clock()函数的返回值类型
6 double durtime;

方法一:求多项式,展开式:

 1 double power(double x,int i )
 2 {
 3     if(i)
 4        return x*power(x,i-1);
 5        return;
 6 }
 7 double F1(int num,int a[],double x)
 8 {
 9     int i,p;
10     p=a[0];
11     for(i=1;i<num;i++)
12     {
13         p+=a[i]*power(x,i);
14     }
15     return p;
16 }

函数二:求多项式的展开式,优化过后的算法;

 1 double F2(int num,int a[],double x)
 2 {
 3 int i,p;
 4 p=a[num-1];
 5 for(i=num-1;i>0;i--)
 6 {
 7 p=a[i-1]+x*p;
 8 }
 9 return p;
10 }

 

主函数,调用函数,计算时间:

 1 int main()
 2 {
 3     int i,sum;
 4     int a[max_num];
 5     for(i=0;i<max_num;i++) a[i]=1;
 6     start=clock();
 7     sum=F1(max_num,a,1.1);
 8     stop=clock();
 9     durtime=(double)(stop-start)/CLK_TCK/max_num;
10     printf("ticks=%.1f\n",(double)(stop-start));
11     printf("durtime=%6.2e\n",durtime);
12 
13 
14     start=clock();
15     sum=F2(max_num,a,1.1);
16     stop=clock();
17     durtime=(double)(stop-start)/CLK_TCK/max_num;
18     printf("ticks=%.1f\n",(double)(stop-start));
19     printf("durtime=%6.2e\n",durtime);
20     return 0;
21 
22 
23 
24 }

运行程序后结果:

 
看结果,基本能比较相关算法的优劣。一般来说,运行时间的数据都很小,可以将数据取比较大,这样就比较清楚的看出来结果,比如这里的max_num 取10000的
 
第一次写,菜鸟,欢迎各位大神指正。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/wuwenhui/p/4139930.html

正文到此结束
本文目录