Algorithm 多项式计算时间复杂度

Algorithm 多项式计算时间复杂度,algorithm,time-complexity,polynomials,Algorithm,Time Complexity,Polynomials,我正在浏览此链接: 这里它说使用普通方法的时间复杂度是O(n^2)。但是我想知道怎么做?下面是我对此的分析: 假设我们有一个方程,如:2x^2+x+1 这里for循环将执行3次,即(订单+1)次 所以根据这个,时间复杂度应该是O(n+1),也就是O(n)。为什么它说它是O(n^2)?我在这里有点迷茫。即使是一个提示也可以 该链接表明,计算系数^i的简单方法是将系数i乘以。这就是O(i)。对从0到n的所有指数重复此操作将是O(n^2) 计算多项式的一种简单方法是逐个计算所有项。首先计算x^n,将

我正在浏览此链接:

这里它说使用普通方法的时间复杂度是O(n^2)。但是我想知道怎么做?下面是我对此的分析:

假设我们有一个方程,如:2x^2+x+1
这里for循环将执行3次,即(订单+1)次


所以根据这个,时间复杂度应该是O(n+1),也就是O(n)。为什么它说它是O(n^2)?我在这里有点迷茫。即使是一个提示也可以

该链接表明,计算
系数^i
的简单方法是将
系数
i
乘以。这就是O(i)。对从
0
n
的所有指数重复此操作将是
O(n^2)

计算多项式的一种简单方法是逐个计算所有项。首先计算x^n,将该值乘以cn,对其他项重复相同的步骤并返回总和。如果我们使用一个简单的循环来计算x^n,这种方法的时间复杂度是O(n^2)


它还声称,如果你使用一种更好的算法来计算系数^i,比如,通过平方求幂,它的复杂度为O(logn),那么它的总复杂度(O(nlogn)),但霍纳的方法会更好。

是的,你是对的。您显示的表单通常称为。基本运算(加法、乘法)的数量为O(n),其中n是最高系数,这是线性的


顺便说一句,上面的代码似乎包含错误。也许应该是这样

for(int i = order ; i>=0 ; i--){

(原始循环是一个无限循环)。否则,它可以被视为Horner的一个实现。

好吧,这可能不是很明显,但一些原始操作具有不同的时间复杂度。计算机在计算
+
运算的结果时速度非常快,
*
-更慢,
%
-更慢。这些操作是在硬件上评估的,因此它们采用恒定数量的处理器刻度

但是
^
操作并不是那么简单<代码>系数^i复杂性不是O(1)/常数。计算结果的简单方法是将
系数
i
乘以次数。这将在O(
i
)时间内完成。另一种方法是使用二进制求幂方法,它可以提供更快的O(log(
i
)时间

为什么它说它是O(n^2)


多项式中有
n
个成员,您需要花费O(
n
)时间来计算每个成员的求幂运算结果。这就是为什么它是O(n2)。

我上面的例子就是这样。这是真正的霍纳法则吗?@calcuner基本上是的,但你似乎有一个小错误。请参阅更新。根据我的说法,您是正确的。如果我们使用分治,计算幂运算的时间复杂度将是O(n)。因此,上述代码的总体复杂度将是O(n^2)。但为什么这里说直接法也有O(n)的复杂度。检查此链接(代数函数部分)
for(int i = order ; i>=0 ; i--){