【发布时间】:2018-07-11 22:41:42
【问题描述】:
设以下算法为:
sum(v, i, j) {
if i == j
return v[i]
else {
k = (i + j) / 2
return sum(v, i, k) + sum(v, k+1, j)
}
}
这个算法的时间复杂度是O(n),但是我如何(用自然语言)证明它的复杂度呢?问题总是被分成两个新问题,那就是O(log n),但其余的复杂性从何而来?
应用主定理产生预期结果,O(n)。
谢谢。
【问题讨论】:
-
The problem always gets divided in two new problems so that would be O(log n)-没有。每次划分时,您都不会丢弃任何一半。如果你像二分搜索一样丢弃任何一半,那么它是 O(logn) 否则你将计算递归树的所有叶子,它的顺序是 O(n)。