2016-08-14 13 views
0

イムsturggling次の関数の時間の複雑さと

void what(int n) { 
    int i; 
    for (i = 1; i <= n; i++) { 
     int x = n; 
     while (x > 0) 
      x -= i; 
    } 
} 

IVEの複雑さを発見した関数のスペースはスペースに探しに次のもの によってそれを解決しようとした私が見つけた唯一のO(1)以降なしそれを取る。 時間を考えているとき 毎回分けられているのでn(1 + 1/2 +1/4 + ....)= O(N.log(N)) は正しいと思いましたか? あなたが

+0

@ Jean-FrançoisあなたがO(2)の意味を理解できていないのは、タイプOですか? – Alejandro

答えて

1

単純な分析は、O(N.LOG(N))の時間の複雑さを与え感謝が、ループが何を計算していないことに留意すべきである:ローカル変数xn/i回デクリメントされ、廃棄されます。良いコンパイラは関数全体をno-op:void what(int n) {}にコンパイルできなければなりません。O(1)の複雑さが結果として得られます。