簡體   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