clock的用法(C语言)以及算法不同时消耗的时间

用法:

在这图源于里插入图片描述
(图片源于MOOC 浙江大学 陈越)

注意:每台设备的CLK_TCK不一样
运行秒数等于时钟打点数/机器每秒走过的时间打点数

Problem:

删除线格式
(图片源于MOOC 浙江大学 陈越)

方法1(普通算法):


#include <**iostream**>
#include <**cmath**>
#include <**time.h**>
using namespace std;
#define max 100000
int main()
{
	void f(double n);
	clock_t start,stop;
	start=clock();
	for(int i=1;i<=max;i++)f(1.1);
	stop=clock();
	double duration=(stop-start)*1.0/CLK_TCK/max;
	cout<<"跑了"<<duration<<"秒"<<endl;
	cout<<"设备每秒的打点数为"<<CLK_TCK<<endl;
}
void f(double n)
{
	int i=1,sn=1;
	for(i=1;i<=100;i++)
		sn+=pow(n,i)/i;
}

运行结果

在这里插入图片描述

方法2(秦九韶算法):

在这里插入图片描述在这里插入图片描述

#include <iostream>
#include <time.h>
using namespace std;
#define max 100000
int main()
{
	double f(int x,double a[]);
	clock_t start,stop;
	double a[101];
	for(double i=0;i<101;i++)a[(int)i]=1/i;
	start=clock();
	for(int i=1;i<=max;i++)f(1.1,a);
	stop=clock();
	double duration=(stop-start)*1.0/CLK_TCK/max;
	cout<<"跑了"<<duration<<"秒"<<endl;
	cout<<"设备每秒的打点数为"<<CLK_TCK<<endl;
	return 0;
}
double f(int x,double a[])
{
	double sn=1;
	for(int i=100;i>=0;i--)
	{
		sn+=a[i-1]+x*a[i];
	}
	return sn;
}

运行结果

在这里插入图片描述

RETSULT:

由于函数运行的时间很短,以至于time.h无法捕捉到函数运行的时间间隔,所以我们不妨让函数循环多次在取平均值。在算法1与算法2(100000次)的比较之下可以看出,法1的效率比法2的效率低了一个数量级,因此优秀的算法可以明显的缩短时间间隔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值