数据结构学习记录:1.1 算法的运行时间计算方法和秦九韶定义

在这里插入图片描述
秦九韶定义:
在这里插入图片描述

double Qinjiushao(int n, double a[], double x)
{
	int i;
	double p = a[n];
	for (i = n; i > 0; i--)
		p = a[i - 1] + x * p;
	return p;
}

time类函数
clock():捕捉从程序开始运行到clock()被调用时所消耗的时间。这个时间的单位是clock tick,即“时钟打点”。
clock_t:clock()函数返回的变量类型,用clock_t来定义变量。
常数CLK_TCK:机器时钟每秒所走的时钟打点数。用clock()捕捉到的时间除以这个常量便可以得到消耗的时间——秒。

math类函数
pow(x,i):求x的i次方。

例,测试算法的函数
在这里插入图片描述

#include
#include
#include

#define MAX 1000/*被测函数最大重复次数*/
#define MAXX 10/*多项式的最大项数*/

clock_t start, stop;/*clock_t:clock()函数返回的变量类型,用clock_t来定义变量。*/
double duration;/*记录被测函数运行的时间,以秒为单位*/

double count(int n, double a[], double x)/*普通算法*/
{
	int i;
	double p = a[0];
	for (i = 1; i <= n; i++)
		p += (a[i] * pow(x, i));/*pow(x,i):求x的i次方*/
	return p;
}

double Qinjiushao(int n, double a[], double x)/*秦九韶定义*/
{
	int i;
	double p = a[n];
	for (i = n; i > 0; i--)
		p = a[i - 1] + x * p;
	return p;
}

int main(void)
{
	int i;
	double a[MAXX];
	for (i = 0; i < MAXX; i++)/*初始化数组*/
		a[i] = (double)i;

	start = clock();/*开始计时*/
	for (i = 0; i < MAX; i++)/*重复运行函数,获取足够的时钟打点*/
		count(MAX - 1, a, 1.1);/*被测函数*/
	stop = clock();/*停止计时*/
	duration = ((double)(stop - start)) / CLK_TCK;/*计算运行的时间——秒*/
	printf("普通函数运行时间为:%6.2e\n", duration);

	start = clock();/*开始计时*/
	for (i = 0; i < MAX; i++)/*重复运行函数,获取足够的时钟打点*/
		Qinjiushao(MAX - 1, a, 1.1);/*被测函数*/
	stop = clock();/*停止计时*/
	duration = ((double)(stop - start)) / CLK_TCK;/*计算运行的时间——秒*/
	printf("秦九韶函数运行时间为:%6.2e\n", duration);

	return 0;
}

运行结果:由于每个人的电脑不同,所以运行的时间存在差异,但是两个算法的结果一定是相差至少一个数量级的(一测试,伤心了,自己的电脑太辣鸡了,1000次运算都常常卡死……)
在这里插入图片描述

你可能感兴趣的:(数据结构学习笔记,算法,经验分享)