簡體   English   中英

嵌套算法的計算復雜性

[英]Computational complexity of a nested algorithm

給定一個數組a [1,2,3,4,5,6,7,8,9,10],假設我們有一個算法可以執行以下操作:

for i in 0..a.length
  for j in 0..a.length
    ...

這將具有O(n ^ 2)的Big O運行時,因為對於每個元素,它將遍歷整個數組。

但是如果內部循環僅從外部索引向前移動怎么辦?

for i in 0..a.length
  for j in i..a.length
    ...

也就是說,相比之下,第一個算法將在每次迭代(外部循環)中查看n個元素。 第二個算法着眼於:

  • 第一次迭代時的n個元素
  • 第二次迭代中的n-1個元素
  • 第三次迭代中的n-2個元素
  • ...
  • 最后一次迭代的1個元素

在為這種算法計算Big O運行時時,它仍然是O(n ^ 2)嗎?

這仍然是O(n ^ 2)。 和1 + 2 + ... + n是n(n + 1)/ 2,它是O(n ^ 2)。

更一般地,對於任何多項式函數p(n),p(1)+ p(2)+ ... + p(n)的和是O(np(n))。 這個證明要難得多,因為你必須推理n的任意冪的總和,但確實如此。 這意味着,例如,如果您將內部循環中的第三個循環嵌套在從j到n的范圍內,則運行時將為O(n ^ 3)。

如果給出a是該特定數組,那么該算法的時間復雜度是恆定的(或O(1))。 也許我讀過你的字面意思,但是對於最嚴格的O(n ^ 2),a必須是像[1,2,...,n]這樣的數組。 如果a顯式大小為10,則算法始終以相同的步數運行。

希望這個答案是不必要的,但我是一個離散數學課的助教,我們經常提出與此非常相似的技巧問題。 如果我誤解了這個問題,那么我為浪費你的時間而道歉! 此外,已發布的答案非常好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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