算法案例_课件
优点是简单,易懂;缺点是不通用,不能解决任意多 项多求值问题,而且计算效率不高.
[问题2] 怎样找到更高效的算法?
分析:计算x的幂时,应充分利用前面的计算结果, 以减少计算量, 如:先计算x2,然后依次计算
x2 • x, (x2 • x) • x, ((x2 • x) • x) • x 的值.
f(x)=x5+x4+x3+x2+x+1可变形为
i>=0?
否
输出v
结束
i=i-1 v=vx+ai
输入ai
是
1.试搜索材料了解秦久韶,谈谈你对 他的伟大之处的认识。
【点评】秦九韶算法是求一元多项式 的值的一种方法.
它的特点是:把求一个n次多项式的值 转化为求n个一次多项式的值,通过这种转 化,把运算的次数由至多n(n+1)/2次乘法运 算和n次加法运算,减少为n次乘法运算和n 次加法运算,大大提高了运算效率.
v5=v4x+7=534×5+7=2677
所以,当x=5时,多项式的值是2677.
这种求多项式值的方法就是秦九韶算法.
变形前的计算, 需要多少次乘法 计算和多少次加
法计算?
变形后利用秦九韶算法计算n次多项式当x=x0 时,需要多少次乘法计算和多少次加法计算?
例1:用秦九韶算法求多项式 f(x)=2x5-5x4-4x3+3x2-6x+7当x=5时的值.
我们可以改写成如下形式: f(x)=(…(anx+an-1)x+an-2)x+…+a1)x+a0.
求多项式的值时,首先计算最内层括号内一 次多项式的值,即 v1=anx+an-1, 然后由内向外逐层计算一次多项式的值,即 v2=v1x+an-2, v3=v2x+an-3, ……, vn=vn-1x+a0.
这样,求n次多项式f(x)的值就转化为求n个 一次多项式的值.这种算法称为秦九韶算法.
例1:用秦九韶算法求多项式 f(x)=2x5-5x4-4x3+3x2-6x+7当x=5时的值.
f(x)=2x5-5x4-4x3+3x2-6x+7 v0=2 =(2x4-5x3-4x2+3x-6)x+7 v1=v0x-5=2×5-5=5 =((2x3-5x2-4x+3)x-6)x+7 v2=v1x-4=5×5-4=21 =(((2x2-5x-4)x+3)x-6)x+7 v3=v2x+3=21×5+3=108 =((((2x-5)x-4)x+3)x-6)x+7 v4=v3x-6=108×5-6=534
算法案例 ——秦九韶算法
[问题1] 某位同学求多项式f(x)=x5+x4+x3+x2+x+1 当x=5时的值,设计一个算法后写出程序如下:
程序
x=5
ห้องสมุดไป่ตู้
f=x^5 + x^4 + x^3 + x^2 + x + 1 PRINT f END
能否找到 更高效的 算法?
上述算法一共做了10 次乘法运算, 5 次加法运算.
解法二:列表
原多项式 的系数
2 -5 -4 3 -6 7
x=5
10 25 105 540 2670
2 5 21 108 534 2677
V0
V1
V2
V3
V4
V5
多项式
所以,当x=5时,多项式的值是2677. 的值.
练:用秦九韶算法求多项式 f(x)=2x6-5x5-4x3+3x2-6x当x=5时的值.
解:原多项式先化为:
f(x)=2x6-5x5 +0×x4-4x3+3x2-6x+0
列表 2 -5 0 -4 3 -6 0
x=5
10 25 125 605 3040 15170
2 5 25 121 608 3034 15170
所以,当x=5时,多项式的值是15170.
注意:n次多项式有n+1项,因此缺少哪一项 应将其系数补0.
f(x)=(x4+x3+x2+x+1)x+1 =((x3+x2+x+1)x+1)x+1 =(((x2+x+1)x+1)x+1 )x+1
此时算法一共做
了 4 次乘法运算,
5 次加法运算.
=((((x+1)x+1)x+1)x+1)x+1
一般地,对于一个n次多项式
f(x)=anxn+an-1xn-1+an-2xn-2+……+a1x+a0.
例1:用秦九韶算法求多项式 f(x)=2x5-5x4-4x3+3x2-6x+7当x=5时的值.
思考:例1计算时,进行了多少次乘法计算? 多少次加法计算?
变式训练,深化提高
观察上述秦九韶算法中的n个一次式,可见 vk的计算要用到vk-1的值. 若令v0=an,得递推式
v0=an, vK=vK-1x+an-k(k=1,2,……,n)
这是一个在秦九韶算法中反复执行的步骤, 因此可用循环结构来实现.试写出程序框图。
程序框图
开始
输入n, x, an v=an i=n-1