我被告知这个alogrthim的时间复杂度是n^3
,但我发现第一个循环将迭代n次,而第二个循环将迭代n^2
和最后一个循环一个将迭代n(n-1)/2 + n
,因为它将首先运行n n-1
然后n-3.....1
,因此时间复杂度应为n^2
。有人能说出为什么这是错的吗?
procedure alg 1(int n)
t := 0
for i := 1 to n do
for j := 1 to n do
for k := n to j do
t := i ∗ j ∗ k
答案 0 :(得分:0)
从n(n-1)/2 + n = (n^2-n)/2 + n
开始,最后一个循环仍然是Big-Oh(n)。三个嵌套循环最终可以在n ^ 2处结束的唯一方法是最后一个是O(1)。
想象一下Big-Oh如何改变最后一个循环:
n = 1 | (n^2-n)/2 + n = 1
n = 10 | (n^2-n)/2 + n = 55
n = 100| (n^2-n)/2 + n = 5050
它在第三个循环中有一个不错的常量,但它仍然由指数控制。