求多项式相加的迭代算法
2016-01-16 10:36
447 查看
问题描述:
假设有n+2个实数a0,a1,…,an,和x的序列,要对多项式求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。
通过如下变换我们可以得到另一种算法,即Pn(x) =
(1)
该算法称之为秦九韶或者霍纳算法,就是通过提取公因式x来减少乘法的次数,减少的乘法次数为(n-1)+(n-2)+……+1 = n(n-1)/2,所以一共只需要做(n+1)n/2 - (n-1)n/2 = n次乘法和n次加法就可以了。对于计算机来说,做加法比做乘法快得多,所以效率的提高是很大的。
程序实现
实现秦九韶算法最关键的是要注意迭代式的求法,我们观察(1)式可以发现,外面的式子就是里面的式子加上小一阶的系数再乘上x得到的,所以我们可以得到p(n) = an-1+p(n)x. c语言代码如下://a[]表示储存系数a0到an的数组,n是数组的大小,也是项数 double PloyAdd(double a[], int n, double x) { double res = 0.0; for(int i=n; i>=0; --i) res = x*res + a[i]; return res; }
相关文章推荐
- Linux php.ini设置date.timezone=XXX为什么不生效?
- 用wget下载整个目录
- Linux C编程Makefile编写初步-转
- HDU 1243 反恐训练营
- Android环境搭建
- C中的预编译宏定义-转
- 使用GHOST打包制作gho镜像文件
- 飞龙的程序员书单 – Linux
- SSH方式使用root登陆ubuntu14.04
- LeetCode Unique Paths
- java与C#的比较
- Web项目演化系列--开启分布式(分离数据层)
- 祝贺我人生中第一个技术博客的开通!!!
- 静态化
- gcc 编译多个源文件-转
- 客户端软件更新管理系统
- 【Java】贪吃蛇
- c# winform进入窗口后在文本框里的默认焦点
- sip消息类型和消息代码详解-转
- copy 、mutableCopy