簡體   English   中英

該代碼是O(n)還是O(logn)?

[英]Is this code O(n) or O(logn)?

它只檢查for循環1 / 3n次,所以我猜它在技術上還是線性的嗎? 但是我真的不明白為什么它不是O(logn),因為很多時候運行時間為O(logn)的代碼最終會檢查1 / 3n左右。 O(logn)是否總是每次都將選項除以2?

int a = 0;
for (int i = 0; i < n; i = i+3)
    a = a+i;

通過時間復雜度分析,恆定因素無關緊要。 您每個循環可以執行1,000,000次操作,但仍為O(n)。 因為常數1/3無關緊要,所以它仍然是O(n)。 如果n為1,000,000,那么n 1/3將比log n大得多。

Wikipedia上關於Big-O符號的條目

令k為常數。 然后:

 O(kg) = O(g) if k is nonzero. 

您的代碼具有復雜度O(n), O(n)/3 == a * O(n) == O(n)

它是n O(n)順序,而不是O(logn)順序。 這是因為運行時間隨n增加線性增加

有關更多信息,請查看此圖,希望您能理解為什么未登錄https://www.cs.auckland.ac.nz/software/AlgAnim/fig/log_graph.gif

運行時間為O(n) (以單位復雜度度量)。

暫無
暫無

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

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