2015-04-21 73 views
4

下面的C代碼顯然是O(N)(根據我的練習考試)。但是,我不確定爲什麼它是O(N)而不是O(Something * Something)。爲什麼這個算法O(N)?

void doit(int N) { 
    while (N) { 
     for (int j = 0; j < N; j += 1) { 
     } 
     N = N/2; 
    } 
} 

任何關心給我一些這種問題的見解?

在此先感謝!

回答

20

因爲N + N/2 + N/4 + ... = 2N。

+0

非常感謝!在系列中應該注意了haha – user2109258

+2

@ user2109258它實際上是一個着名的系列,想到一個男人和他的狗,他們都在一起去同一個地方,狗以兩倍於人的速度移動,所以當狗達到目標,他回到了那個男人身上,當這個狗回到那個男人身上時,他回到了他們的目標等等,直到這個男人到達目標,問題是**這條狗的總行程是多少**? –

相關問題