[英]What is Big O in this example of code, O(N) or O(N^2)?
你能解釋一下這個代碼示例中的 Big O 是什么嗎?
arr = [
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1],
[1, 1]
]
def count_ones(outer_array):
count = 0
for inner_array in outer_array:
for number in inner_array:
count += 1
return count
count_ones(arr)
這完全取決於您對n
的定義。 如果您將n
定義為 2d 矩陣中的單元格數,則此嵌套循環的線性復雜度為O(n)
。
另一方面,如果您將n
定義為外部數組的長度,而m
定義為內部數組的最大長度,則時間復雜度為O(n*m)
。
無論哪種方式,復雜度都不能是O(n^2)
因為在這種情況下,它需要是邊長相等的方陣n
。
鑒於 n 被定義為嵌套數組中元素的總數:
for inner_array in outer_array:
for number in inner_array:
是 O(n),因為它訪問每個元素一次。
count += 1
是 O(1) 因為它是基本算術。
O(1) * O(n) = O(n)
基本上,你有一個二維數組,每個元素都選擇一次。 通常情況下它是 O(N),其中 N - 元素數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.