1.3 算法案例——秦九韶算法[ 问题 1] 某位同学求多项式f(x)=x5+x4+x3+x2+x+1 当 x=5 时的值,设计一个算法后写出程序如下:x=5f=x^5 + x^4 + x^3 + x^2 + x + 1PRINT fEND程序 上述算法一共做了 次乘法运算 , 次加法运算 .优点是简单 , 易懂 ; 缺点是不通用 , 不能解决任意多项多求值问题 , 而且计算效率不高 .105能否找到更高效的算法 ?[ 问题 2] 怎样找到更高效的算法 ?分析 : 计算 x 的幂时 , 应充分利用前面的计算结果 , 以减少计算量 ,如:先计算 x2, 然后依次计算222,(),(())xx xxxxxxx的值 . 此时算法一共做了 次乘法运算 , 次加法运算 .45f(x)=x5+x4+x3+x2+x+1 可变形为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 =((((x+1)x+1)x+1)x+1)x+1f(x)=anxn+an-1xn-1+an-2xn-2+……+a1x+a0.我们可以改写成如下形式 :f(x)=(…(anx+an-1)x+an-2)x+…+a1)x+a0.求多项式的值时 , 首先计算最内层括号内一次多项式的值 , 即 v1=anx+an-1,然后由内向外逐层计算一次多项式的值 , 即一般地 , 对于一个 n 次多项式v2=v1x+an-2,v3=v2x+an-3, ……,vn=vn-1x+a0.这样 , 求 n 次多项式 f(x) 的值就转化为求n 个一次多项式的值 . 这种算法称为秦九韶算法 .f(x)=2x5-5x4-4x3+3x2-6x+7=(2x4-5x3-4x2+3x-6)x+7=((2x3-5x2-4x+3)x-6)x+7=(((2x2-5x-4)x+3)x-6)x+7=((((2x-5)x-4)x+3)x-6)x+7v0=2v1=v0x-5=2×5-5=5v2=v1x-4=5×5-4=21v3=v2x+3=21×5+3=108v4=v3x-6=108×5-6=534v5=v4x+7=534×5+7=2677所以 , 当 x=5 时 , 多项式的值是 2677.这种求多项式值的方法就是秦九韶算法 .例 1: 用秦九韶算法求多项式 f(x)=2x5-5x4-4x3+3x2-6x+7 当 x=5 时的值 .变形前的计算,需要多少次乘法计算和多少次加法计算?变形后利用秦九韶算法计算 n 次多项式当x=x0时,需要多少次乘法计算和多少次加法计算?所以 , 当 x=5 时 , 多项式的值是 2677.原多项式的系数例 1: 用秦九韶算法求多项式 f(x)=2x5-5x4-4x3+3x2-6x+7 当 x=5 时的值 .2 -5 -4 3 -6 7x=5105252110510854053426702677多项式的值 .解法二 : 列表2V0V1V2V3V4V5所以 , 当 x=5 时 , 多项式的值是15170. 练 : 用秦九韶算法求多项式 f(x)=2x6-5x5-4x3+3x2-6x 当 x=5 时的值 .解 : 原多项式先化为 : f(x)=2x6-5x5 +0×x4-4x3+3x2-6x...