我正在努力理解Big-O时间的复杂性,不幸的是我在努力,我似乎无法掌握这个概念,我知道我的结果对于以下两个代码片段是正确的,但是我如何到达那里似乎是错误的。有人能够帮助解释我误解的地方(不是请,但不要使用sigma。谢谢!
Code Fragment Time Complexity
sum ← 0 O(1)
for i ← 1 to n do O(n)
for j ← 1 to n do O(n)
k←1 O(1)
while k < n do
k ← k * C O(log n) - affected by C (due to multiplication)
sum ← sum + 1 O(1)
-----------
O(1 x n x n x 1 x [log n] x 1)
O(n2 log n)
Code Fragment Time Complexity
sum ← 0 O(1)
for i ← 1 to n do O(n)
for j ← 1 to i do O(n)
k←1 O(1)
while k < n do
k ← k + C O(n) – not affected by C, k is arbitrarily large
sum ← sum + 1 O(1)
-----------
O(1 x n x n x 1 x n x 1)
O(n^3)
答案 0 :(得分:3)
虽然最终结果是正确的,但我在计算中看到了一些小错误。
在第一个算法中:
O(1 x n x n x 1 x [log n] x 1)
应该是
1 + n x n x (1 + (O(log n) x 2)) = O(n^2 * log n)
在第二种算法中:
O(1 x n x n x 1 x n x 1)
应该是
1 + n x O(n) x (1 + (O(n) x 2)) = O(n^3)