[英]I'm not quite sure if the Big O of my algorithm is O(n^3) or O( m * n * n )
所以,我試圖在下面找到我的算法的大 O。
for(int x=0;x<m;x++){
for(int y=0;y<n;y++){
for(int z=0;z<n;z++){
if(target[x][y]==source[z]) count++;
}
}
}
但是,我不太確定它是 O(n^3) 還是 O( m * n * n )...
除了嵌套之外,每個循環都獨立於其他循環,因此它是每個循環次數的簡單乘法:O(m * n * n) = O(m * n 2 )。
這意味着性能將隨着m
增加線性擴展,隨着n
增加呈二次方擴展。 如果兩者都增加,則性能將根據其產品進行擴展。
除非m
和n
之間存在某種未說明的關系,否則這不能推廣到 O(n 3 )。 恰恰相反,如果沒有關系,您甚至可以考慮算法 O(m)(如果您對縮放n
時會發生什么不感興趣)或 O(n 2 )(如果您對什么不感興趣)當m
縮放時發生)。
請注意,這種搜索可以在 O(m + n 2 ) 中完成。
source
的m
元素中的每一個,
s
稱為當前元素的值。s
,
s
添加到集合中。target
的n*n
元素的每個元素,
v
為當前元素的值。s
,
count
。這假設集合查找是 O(1) 並且添加到集合是 O(1)(攤銷)。
在我看來它是O(m*n*n) ,也就是O(m*n 2 ) ,因為您的外循環在m
上迭代,但您的兩個內循環都在n
迭代。
循環 O(n)。 循環內循環 O(n*n) 或 O(n^2)。 在另一個循環內循環 O(n*n*n) 或 O(n^3)。
你的最外層循環依賴於 n 還是 m? 當然,您不能因為沒有外循環而忽略外循環。
因此,來自彼此內部的三個循環的 O(m*n*n) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.