[英]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
大得多。
令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.