簡體   English   中英

是復雜度O(log(n)+ log(n / 2)+ log(n / 4)+ log(n / 8)+ ... + log(2))= O(log(n))?

[英]Is complexity O(log(n) + log(n/2) + log(n/4) + log(n/8) + … + log(2)) = O(log(n))?

作為家庭作業,我被要求在O(log(n))中編寫一個算法,我可以計算我寫的那個復雜度為O(log(n)+ log(n / 2)+ log(n / 4) + log(n / 8)+ ... + log(2))。

我認為它相當於O(n),因為它大致是log(n)* O(log(n))= O(n)。 但我不確定。 我知道家庭作業問題在這里不受歡迎,但我真的不知道另一種方法來找出它的復雜程度。 谷歌搜索並沒有幫助我。

要指定:n在N中,n = pow(2,c),c在N中

不,它不是O(log n)。 它是O((log n) 2 )。

O(log(n) + log(n/2) + log(n/4) + log(n/8) + ... + log(2))
= O(log(n * n/2 * n/4 * n/8 * ... * 2))                    using log multiplication rule
= O(log(n * n * n * ... * n / 2 / 4 / 8 / ... / n))
= O(log(nlog n / 2 / 4 / 8 / ... / n))
= O(log(nlog n / (1 * 2 * 4 * 8 * ... * n/4 * n/2 * n))
= O(log(nlog n / ((1 * n) * (2 * n/2) * (4 * n/4) * ...)    group first and last terms
= O(log(nlog n / (n * n * n * ...))                         since we grouped terms,
= O(log(nlog n / n(log n)/2)                                      we halved the number of terms
= O(log(nlog n) - log(n(log n)/2))                             log division rule
= O(log n.log n) - ((log n)/2).log n)                      log power rule * 2
= O(log n.log n) - (log n.log n)/2)
= O(log n.log n)/2)
= O((log n)2/2)
= O((log n)2)                                              big-O doesn't care about constants

從一些基本的算術開始:

O(log n/2) = O( (log n) + log(1/2))

常量可以忽略。 因此:

O(log n / 2) = O(log n)

所以,你要添加一堆O(log n)。 多少? 好吧,關於log(n)值得。 所以,這意味着該算法是:

O( (log n)^2)

暫無
暫無

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

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