[英]How do I iterate through an object containing 2D arrays without getting O(n)^3?
[英]If I use two variables to iterate through a 2D array is that still O(n^2) time complexity?
for (let i = 0; i < array.length; i += 1) {
const row = array[i];
for (let j = 0; j < row.length; j += 1) {
const el = row[j];
}
}
這將是遍歷2D數組nxn矩陣的一種典型方式,我認為O(n ^ 2)的時間復雜度。
如果我這樣做
let count = 0;
let i = 0;
let j = 0;
const n = arr.length;
const max = n * n;
while (count !== max) {
const ele = arr[i][j];
if (j === n - 1) {
j = 0;
i += 1;
} else j += 1;
count += 1;
}
還是O(n ^ 2)嗎? 有點愚蠢的問題,我想答案是肯定的,但是我只想仔細檢查一下。 顯然,第一種方法更加清晰,但隨后的時間復雜度也較低。
給定n = max(array.length,array [0] .length) :
是的 -它們都是O(n ^ 2) 。 即使是一個循環, while
循環所經過的元素數也與2個for
循環所經歷的元素數相同。
換句話說,通過for
循環,您將(大約)遍歷n個大小的塊n次,而使用while
循環,您將經歷一次n ^ 2大小的塊一次。
好吧,起初它並不是真的 O(n 2 )。
Big-O通過給出其執行時間如何隨算法處理的元素數量的增長而擴展的概念,來告訴您算法的最壞情況。
對於二維矩陣,雖然矩陣確實是正方形(或至少是矩形),但此處將矩陣的長度用作n
並不真正合適。 相反,您應該使用矩陣中的像元數( i
x j
)。
實際上,二維矩陣是一個數組數組,您的算法只是簡單地單步遍歷每個單元格,在兩種情況下都使其為O(n)。 您可以說它是O( i
x j
),但它仍然是線性算法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.