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--){