【发布时间】:2018-12-13 14:25:36
【问题描述】:
为什么时间复杂度计算为 O(n^2) 而不是以下算法的 O(n)。
FibList(n)
array[0-n] Create Array O(n)
F[0] <- 0 O(1)
F[1] <- 1 O(1)
for i from 2 to n O(n)
F[i] <- F[i-1] + F[i-2] O(n)
return F[n] O(1)
O(n) + O(1) + O(1) + O(n) O(n) + O(1) = O(n^2)
【问题讨论】:
-
F[i] <- F[i-1] + F[i-2]是O(1) -
现在创建一个大小为 n 的数组也是 O(1)。
-
@Adam 这是一个假设。使用不同的假设,即 F[i-1] + F[i-2] 成本 O(log_2(max(F[i-1], F[i-2]))) (即成本取决于位数),你得到O(n ^ 2)。看我的回答。
标签: algorithm time-complexity fibonacci