2016-10-14 3 views
1

実際の実行時間は異なりますが、実行時にコードが大幅に異なり、どのように同じ時間の複雑さがあるのか​​、私が判断できない概念を使用しています。これらの関数では時間の複雑さは(漸近的に)どのように等しくなりますか?

void fun(){ 
    int i, j; 
    for (i=1; i<=n; i++){ 
     for (j=1; j<=log(i); j++){ 
      printf("GeeksforGeeks");//prin tit 
     } 
    } 
} 

void fun2(){ 
    int i, j; 
    for (i=1; i<=n; i++){ 
     for (j=1; j<=log(n); j++){ 
      printf("GeeksforGeeks");//print it 
     } 
    } 
} 

来る方法

は漸近的に同じであり、O(logn!)の時間の複雑さを持っていますか?

+3

の可能な重複(http://stackoverflow.com/questions/21152609/show-that-the-summation-%e2%88% [iがn個(LOGI)総和Σは、O(nlogn)であることを示します] 91-i-to-n-logi-is-onlogn) –

答えて

1

ステップ番号はO(log(n!))と同じO(1からnまでのiについてlog(i)の合計)です。

fun2のステップ数はO(n log(n))です。

今やStirling's approximationは、これが実際に同じであることを示しています。

+0

yep! 'log2(n!)=Θ(n・log2(n))'とすると、これをi = 'O(n)'と見ることができ、したがって同じ振る舞いをします。 – yd1

関連する問題