这是Horner用于计算x处多项式值的方法的伪代码(其中a [i]表示x ^ i的系数):
y=a[0]
for i = n to 1
y = a[i] + x*y
互联网上的许多文章都指出霍纳方法的运行时间与 n 成正比。 但由于y中的项数与(ni)成比例(当我们已经完成i次迭代时),所以不应该花费的总时间为(n-1)+(n-2).... 1这与 n ^ 2 成正比? 或者我们是否始终认为任何乘法(不论术语的数量)都需要恒定的时间?
答案 0 :(得分:0)
您正在尝试计算多项式的值,因此代码中的y
是一个数字,而不是另一个多项式。您之前已将x
定义到您希望计算多项式值的值。
是的,我们假设两个数的乘法是常数运算。因此,在每次迭代中,您执行一次乘法和一次加法,两个整数之间的操作(可能是浮点数,取决于您正在操作的字段)和一个赋值,所有这些都是常量。您执行这三项操作n
次,总计O(n)
。
另外我相信您应该在a[n]
中将y
放在第一步中,然后从n-1
迭代到0
或者反转for循环的迭代,具体取决于关于多项式的表示。