2015-05-30 121 views
1

爲什麼是時間複雜度,O(n)而不是O(nlogn)?你不需要將外循環的複雜性與內循環的複雜性相乘嗎?時間複雜度分析循環:

int fun(int n){ 
    int count = 0; 
    for (int i = n; i > 0; i /= 2) 
     for (int j = 0; j < i; j++) 
      count += 1; 
    return count; 
    } 

回答

1

在該循環的第一次迭代的內環覆蓋n個一半。下一次迭代涵蓋四分之一,然後是八分之一,等等。您可以用下面的函數表示係數。正如你所看到的,這是一個無限的系列。因此,整個功能是O(n)

Infinite geometric series of 1 over 2 to the n

+0

http://en.wikipedia.org/wiki/1/2_%2B_1/4_%2B_1/8_%2B_1/16_%2B_%E2%8B AF% – tvanfosson