[英]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.