2017-02-01 3 views
-5
int i; 
    for(i=0;i<n;i++) 
    { 
    if(i==number); 
     break; 
    } 

ORどの "for"ループのほうが時間の複雑さが優れていますか?

for(i=0; ;i++) 
    { 
    if(i==number) 
    break; 
    } 

は、ループ・エフェクトのための時間の複雑さに比較部分を削除するか、ではないでしょうか?

あなたがより速く、正確であると言うことはできません
+1

最初は 'O(n)'です。 2番目は 'O(max(number))'です。 –

+0

breakステートメントがあるので、i == numberのときに終了します。そして実際にはその中に「数字」を持つ配列のためです。 –

+0

ありがとう、ユージン・Sh。どうやって説明できますか? –

答えて

1

...

最初の1時間の複雑さはO(min(n, number))で、2番目はO(number)です。


nがnumberより大きい(または等しい)場合、最初の値は2番目の値と等しくなります。

  • 最初:O(number)(数がn未満であるように、min(n, number) = number
  • 秒:O(number)

nは数よりも小さい場合、それはまた停止するように、最初に(速くなりますn)。

  • 最初に:O(n)(nはnより小さいアンバー、min(n, number) = n
  • 秒:全体図でO(number)

、最初は速くなります。

ご覧のとおり、for look内の比較を削除すると、その複雑さが異なる2番目のケースを除いてはっきりと分かります。

+0

ありがとうダニエル、ループやいくつかの違いは? –

+0

私が説明したように、数がnより大きい場合は時間が異なります。そうでない場合は時間の複雑さは同じです – Daniel

関連する問題