对数复杂性:要么这本书有错别字,要么这里发生了什么?



我现在正在学习算法,我遇到过一个例子,我的答案是Infinite loop,但在正确的答案中,它说是O(log2n)

function someFunc(n) {
for(var i = 0; i < n; i * 2) { // I think that Infinite loop cannot be O(log2n), can it?
console.log(i);
}
}

我在这里有点困惑。我不明白为什么,因为它和下面的Infinite loop一样,不是吗?

function loop(n) {
while(true) {
console.log(n)
}
}

来源:Sammie Bae-JavaScript数据结构和算法-2019(第1章(

这是本书中的一个明显错误。我在出版商的网站上找到了第一章的PDF,正如你所说(第10页(:

练习5

1   function someFunction(n) {
2
3       for (var i=0;i<n;i*2) {
4           console.log(n);
5       }
6
7   }

(下一页(

答案
[…]
5。O(log2n(对数复杂度。对于给定的n,这将只运算log2n次,因为i是通过乘以2而增加的而不是像其它实例中那样加1。

正如注释中所指出的,这个循环实际上永远不会退出。

作者(可能(维护了一个github repo,在那里可以找到源,所以你可以建议修复相关文件

最新更新