多种方式计算多项式a0+a1*x+a2*x^2+a3*x^3+.......(计算效率与算法的重要性)

问题描述:

两种方式计算多项式a0+a1*x+a2*x^2+a3*x^3+.......(普通算法以及秦九韶算法)在某处x的值,通过调用<time.h>中的函数tick(),计算两种方式的运算时间,得出。。。。。预知结论为何,请看下面代码:

代码如下:

#include<stdio.h>
#include<math.h>    //pow
#include<time.h>    //tick
#define MAXODER 300 //最大阶乘数
#define REPEAT 1e5  //函数重复执行次数(一次执行所需时间太短)
//普通算法
double Multinomial_1(int a[],int n,double x)
{
	double result = 0;
	int i;

	for(i=0;i<=n;++i)
	{
		result = result + a[i]*pow(x,i);//多项式求值
	}

	return result;
}
//秦九韶算法
double Multinomial_2(int a[],int n,double x)
{
	double result = 0;
	int i;

	for(i=n;i>0;--i)
	{
		result = a[i-1] + a[i]*pow(x,i);//多项式求值:提取公因式
	}

	return result;
}
//计算函数运行一次所用时间
void time(clock_t start,clock_t end)
{
	double duration;   //存放函数执行时间
	printf("%f\n",(double)(end - start));    //Multinomial_1函数执行打点的次数
	duration = ((double)(end - start))/CLOCKS_PER_SEC/REPEAT;//函数执行一次所需时间---CLOCKS_PER_SEC	每秒钟打点次数
	printf("%6.2e\n",duration);
}

int main()
{
	int a[MAXODER+1];  //存放多项式的系数
	double x;          //原变量
	int i;             //循环因子

	clock_t start1;    //记录普通函数运行打点次数
	clock_t end1;	   //clock_t是tick()函数返回值的数据类型
	clock_t start2;    //记录秦九韶算法函数运行打点次数
	clock_t end2;

	for(i=0;i<=MAXODER;++i)       //初始化,多项式的各系数
	{
		a[i] = i;
	}
	printf("please input a num:");//输入要求的值
	scanf("%lf",&x);              //注意此处输入的格式“%lf”而不是"%f"

//普通算法
	start1 = clock();              //函数从开始执行到此处打点的次数
	for(i=0;i<REPEAT;i++)
	{
		Multinomial_1(a,MAXODER,x);
	}
	end1 = clock();				   //函数从开始执行到此处打点的次数

//秦九韶算法
	start2 = clock();              //函数从开始执行到此处打点的次数
	for(i=0;i<REPEAT;i++)
	{
		Multinomial_2(a,MAXODER,x);
	}
	end2 = clock();

	printf("普通算法:\n");
	time(start1,end1);
	printf("秦九韶算法:\n");
	time(start2,end2);

	return 0;

}

输入x=8,看看结果吧:

结论:解决问题的效率与算法的优劣有关

时间: 2024-11-05 20:24:08

多种方式计算多项式a0+a1*x+a2*x^2+a3*x^3+.......(计算效率与算法的重要性)的相关文章

myeclipse安装svn插件的多种方式

开发者服务评测征文 十万现金悬赏大神 方法一:在线安装 1.打开HELP->MyEclipse Configuration Center.切换到SoftWare标签页. 2.点击Add Site 打开对话框,在对话框Name输入Svn,URL中输入:http://subclipse.tigris.org/update_1.6.x3.在左边栏中找到Personal Site中找到SVN展开.将Core SVNKit Library和Optional JNALibrary添加(右键Add to Pr

android 设置字体颜色、EditText自动输入转换成大写字母的多种方式

在TextView上面设置某一个字的字体颜色为指定颜色时,可以通过java类SpannableString类和Html语言来实现. (一)SpannableString类方式 private void setText(TextView t){ String text = t.getText().toString().trim(); SpannableString span = new SpannableString(text); span.setSpan(new ForegroundColorS

从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文.(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程) 在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动(Activity),对于之前的界面根据需求进行摧毁(Finish())或则保留. 如果一个交互流程中,是从A开始,按照A - B - C - D - A这样的顺

shell实战:多种方式实现获取列内容

自己不是专业的linux,平时工作中也不用linux编程,自学一些linux shell编程,忘了学,学了忘,效率不高.今天权当复习吧. 想想这样一个情景吧,获取某一行的部分列值. 考虑这样的输入:"root:x:0:0:root:/root:/bin/bash",现在我们获取用户及shell信息.自己暂时想到的5种实现方式. #!/bin/bash ############################################## #第二种实现 普通循环 #########

异步上传文件多种方式归纳

最近在做异步上传文件的工作,用到了一些库,这里归纳下,暂且不考虑异常处理,仅作为demo. 1.不用任何插件,利用iframe,将form的taget设为iframe的name,注意设为iframe的id是没用的,跟网上很多说的不太一致 iframe_upload.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm

JavaScript中判断为整数的多种方式

原文:JavaScript中判断为整数的多种方式 之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer). JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示.但实际操作中比如数组索引.位操作则是基于32位整数. 方式一.使用取余运算符判断 任何整数都会被1整除,即余数是0.利用这个规则来判断是否是整数. function isInteger(obj) { return obj%1 === 0 } isInteger(3

爱,有很多种方式表达

爱,有很多种方式表达,或真或假,但融于情,浓过情,没有选择,因为爱:没有后悔,因为爱.    有个女人,让我爱她二十多年了,从孩子堤时代开始,或者是一见衷情,但又是一厢情怨,曾经为她的一眸一颦而欢喜,也为她的一怒一哀而伤心.    有首诗说得很赤白:我是曾经多么多么的爱着她.    现实却是:我一无所有.    有首歌唱道:我就跟你一起走,爱我一无所有.因为你是我的全部.    而孩堤的厢情最终被现实灰灰烟灭,我知道,我在乎你,但我有时候却喜欢身边的女人,有道是男人好色.    最终你披着别人的

计算多项式的导函数

计算多项式的导函数 总时间限制:  1000ms 内存限制:  65536kB 描述 计算多项式的导函数是一件非常容易的任务.给定一个函数f(x),我们用f'(x)来表示其导函数.我们用x^n来表示x的n次幂.为了计算多项式的导函数,你必须知道三条规则: (1).(C)' = 0 如果C是常量 (2).(C*x^n)' = C*n*x^(n-1) 如果n >= 1且C是常量 (3).(f1(x)+f2(2))' = f1'(x)+f2'(x) 容易证明,多项式的导函数也是多项式. 现在,请你编写

jQuery绑定事件-多种方式实现

jQuery绑定事件-多种方式实现: <html> <head> <meta charset="utf-8" /> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script><!--百度CDN--> </head> <body> <input type="text"/&