2014-07-09 207 views
4
i <-- 1 
while(i < n) 
    j <--1 
    while(j < i) 
     j <-- j * 2 
    i <-- i + 1 
done 

我在這裏拍攝的內容是O(log n)。我猜外環是O(n),整體複雜度爲O(n log n)。確認?Big-O嵌套while循環

+2

看起來對我來說總的來說,雖然我認爲內循環實際上是記錄n/2,因爲它是基於我。除以2,通常不會顯示爲大O,但我相信你是正確的。 –

+0

順便說一句,如果您要將僞代碼更改爲'C'代碼並將其標記爲此,您將獲得更多的視圖。 –

+0

不可以。因爲你沒有在循環中做任何事情,編譯器會優化它:-) – Bergi

回答

1

是的,你是對的,但它不是那麼簡單,正確地弄清楚:)。

內環是微不足道的log n,沒有必要進一步解釋。

但是,外循環並不那麼簡單,因爲在每個循環中它會改變內循環執行的時間。

如果你想想看,內循環將被用於(爲i增加)運行:

log 1 + log 2 + log 3 + log 4 + log 5 .... + log n 

到logharitms的一些規律。由於,這是一樣的log (1*2*3*4*....*n)是相同

log (n!)

有一個法律,n!具有相同的複雜性(注意,這是複雜,它不是在代數相同)n^n

因此log (n!) = O(log (n^n))

現在我們只需切換到代數,因爲log (n^k) = k*log (n)我們得到的結果

log (n^n) = n log n

結果:

時間複雜度爲O(n log n)

+0

該法則被稱爲斯特林近似http://en.wikipedia.org/wiki/Stirling%27s_approximation – AbcAeffchen