与Big O有关的困惑

时间:2014-10-22 00:46:02

标签: algorithm math big-o

我正在研究空间和时间的复杂性,并且遇到了这个

O(n +(n / 2 + n / 4 ...... n / n))= O(n + log(n))。

我没有得到这是怎么回事?任何人都可以提供一些见解吗?

1 个答案:

答案 0 :(得分:7)

我认为这取决于你的分母。总和

  

n + n / 2 + n / 4 + n / 8 + ... + n / n

总结为O(n),因为它等于

  

n(1 + 1/2 + 1/4 + 1/8 + ...)

     

≤2n

因此,技术上正确的是它是O(n + log n),因为O(n + log n)= O(n),但这是一种非常奇怪的写入方式。 O(n)是一种更好的方法来写出来。

总和

  

n + n / 2 + n / 4 + n / 6 + n / 8 + ... + n / n

致力于

  

n(1 + 1/2 + 1/4 + 1/6 + 1/8 + ... + 1 / n)

     

= n(1 +(1/2)*(1 + 1/2 + 1/4 + 1/6 + ... + 1 /(n / 2)))

     

= n(1 +(1/2)H _ {(n / 2)})

     

=Θ(n log n)

这是有效的,因为nth harmonic number是Θ(log n)。这可能更接近于预期,但用+代替×。

希望这有帮助!