2017-12-14 7 views
-2

サンプルエクササイズでは、配列内のすべての要素が同じかどうかを確認しました。この質問は、これを行う最も効率的な方法ではありません。むしろ、これらの2つのソリューションについてです。同じforループ内の比較回数は時間の複雑さに影響しますか?

for(var i=0; i < set.length-1; i++) 
    { 
    if (set[i] != set[i+1]) // could have compared all elements to the firstelement instead of switching 
    { 
    isTrue=false; 
    } 

    } 

上記のアルゴリズムは、各インデックスとその後のインデックスを比較します。

var firstIndex=set[0]; 
for(var i=0; i < set.length-1; i++) 
{ 
    if(set[i] != firstIndex) 
    { 
     isTrue=false; 
    } 
} 

このアルゴリズムでは、現在のインデックスと最初のインデックスを比較しますが、これらのアルゴリズムは少なくともO(N)であるが。比較の違いが時間/空間の複雑さに影響しますか?

+0

のような物事ではない実行時間時間の複雑さを向上させることができます重複が発生しました。 – RobG

+0

私はインタビューの準備をしており、与えられたコードに基づいて複雑さを計算する方法を理解しようとしていました。いずれの場合もbig Oは線形になりますか? –

答えて

1

まあ、それらの両方のための

時間の複雑さがO(n)だろう明確な物事をすることができます。スペースの複雑さはO(1)です。

配列インデックスアクセスなどは、Big-Oタイムの複雑さに影響しません。

これらのアルゴリズムは少なくともO(N)ですが。

これは少なくともO(n)です。

あなたは条件が `I

if(set[i] != firstIndex) 
{ 
    isTrue=false; 
    break; 
} 
+0

ああ!さて、https://stackoverflow.com/questions/4915842/difference-between-time-complexity-and-running-timeから、私はランタイムがほとんどのアルゴリズムでは一般的に知られていないことを理解します。より大きなインプットへのスケーリングに関しては、ランタイムは重要ですか? –

+0

実行時間の問題をスケーリングするためには、しかし、あなたが直面する変化が線形に比例することを理解してください。このアルゴを大きな「n」にスケーリングすると、変化は線形になります。あなたがこれを聞いていたかどうかは分かりませんが、実行時には 'n 'のバリエーションがありますが、複雑さは同じクラスに属しています。@ NithinMoorthy – coderredoc

+0

ありがとうございます。これは非常に役に立ちました。 –

0

スペースの複雑さ:余分な変数/データ構造を使用していないため、変更はありません(2番目のスニペットのfirstIndexは一定のスペースを取るため考慮されていません)。

時間複雑度:ほとんど変化しません。どちらのスニペットでも、1回の比較を行っていますが、最初のスニペットは配列のアクセスが直接的な可変アクセスと比較して遅いため、少し遅くなります。

+0

さて、これはまさに私が疑問に思っていたものです。配列に繰り返しアクセスすると、何らかの変更が発生しますか?ありがとうございました!なぜこの質問が下落したのか知っていますか? –

+0

また、big Oはどちらの場合も線形になりますか? –

+0

Big Oは、配列のアクセスが一般的に時間の複雑さを考慮していないという理由から、どちらの場合も線形です。 – Ran

関連する問題