【发布时间】:2016-12-08 19:15:10
【问题描述】:
这个函数的时间复杂度是 O(n) 还是 O(log(n))。
function reverse(array) {
for (var i = 0, j = array.length - 1; i < j; i++, j--) {
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
乍一看,它似乎对输入进行了 n/2 次迭代。不过仔细想想,低层操作的实际数量接近2n。
【问题讨论】:
-
n/2 和 2n 都不是 O(log(n))。
-
仍然是 O(n)。 (它随着 n 线性增长)
-
请解释为什么要答题
-
它是
o(n/2)。 -
关于您的最后一句话:就上限复杂度(big-O)而言,循环内的这些操作将始终需要恒定的时间来执行(O(1)),因此您可以忽略这些并减少到 O(n/2)
标签: javascript algorithm time-complexity