繁体   English   中英

简单function的大O

[英]Big O of a simple function

我正在学习数据结构,并且对这个游戏很陌生。 我知道为 n 次迭代运行的单个循环具有 O(n) 时间复杂度。 但是如果我在 for 循环中使用splice ,它会是 O(n 2 ) 时间复杂度吗? 我很肯定它是 O(n 2 ) 但想确定一下。

这是我正在处理的示例代码:

var createTargetArray = function(nums, index) {
    let target = []
    for (let i=0; i< index.length; i++){
        let idx = index[i]
        target.splice(idx,0,nums[i])
    }
    return target
};

你是对的。 拼接方法的最坏情况应该是 O(n)。 该调用发生在 foreach 循环 O(n) 的迭代中; 所以整个脚本的大 o-notation 是 O(n^2)

由于大 O 表示法询问您的 function 需要多少次迭代才能对数组执行 f(x) 作为输入,所以当您遍历所有元素时,一般时间复杂度为 O(n)。 然而,在 JavaScript 中使用 .splice() function 也具有理想的 O(n) 时间复杂度,因此当您将 O(n) 放入另一个 O(n) 时,它实际上变为 O(n^2)。 作为一个好的经验法则,您可以考虑嵌套 O(n) 将 n 的幂增加一。 例如,如果您要循环让一个三重嵌套循环对数组的每个元素执行 1 次操作,它将变为 O(n^3) 等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM