簡體   English   中英

在這個代碼示例中,什么是大 O,O(N) 或 O(N^2)?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM