C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での時間計算量分析に関する実践的な質問


時間計算量 任意のアルゴリズムのは、アルゴリズムが完了するのにかかる時間です。アルゴリズムの効率を示し、比較分析を行うための重要な指標です。アルゴリズムの時間計算量を減らして、より効果的にする傾向があります。

例1

次のコードスニペットの時間計算量を見つけます

for(i= 0 ; i < n; i++){
   cout<< i << " " ;
   i++;
}

ループの最大値はnですが、forループではiが2回インクリメントされるため、時間が半分になります。したがって、時間計算量はO(n / 2)であり、これはO(n)と同等です。

例2

次のコードスニペットの時間計算量を見つけます

for(i= 0 ; i < n; i++){
   for(j = 0; j<n ;j++){
      cout<< i << " ";
   }
}

内側のループと外側のループは両方ともn回実行されています。したがって、iの単一値の場合、jはn回ループし、iのn値の場合、jは合計n * n=nを2回ループします。したがって、時間計算量はO(n 2)です。

例3

次のコードスニペットの時間計算量を見つけます

int i = n;
while(i){
   cout << i << " ";
   i = i/2;
}

この場合、各反復の後、iの値は前の値の半分になります。したがって、シリーズは次のようになります。したがって、時間計算量はO(log n)です。

例4

次のコードスニペットの時間計算量を見つけます

if(i > j ){
   j>23 ? cout<<j : cout<<i;
}

コードには2つの条件ステートメントがあります。各条件文の時間計算量はO(1)であり、そのうちの2つはO(2)であり、これは定数であるO(1)と同等です。 。

例5

次のコードスニペットの時間計算量を見つけます

for(i= 0; i < n; i++){
   for(j = 1; j < n; j = j*2){
      cout << i << " ";
   }
}

内側のループは(log n)回実行されており、外側のループはn回実行されています。したがって、iの単一値の場合、jは(log n)回実行され、iのn値の場合、jは合計n *(log n)=(n log n)回ループします。したがって、時間計算量はO(n log n)です。


  1. 漸近的な複雑さ

    漸近解析 漸近解析を使用すると、入力サイズに基づいてアルゴリズムのパフォーマンスについてのアイデアを得ることができます。正確な実行時間を計算する必要はありませんが、実行時間と入力サイズの関係を見つける必要があります。入力のサイズが大きくなるときは、実行時間を追跡する必要があります。 スペースの複雑さについては、アルゴリズムを完了するためにメインメモリ内のどのくらいのスペースが占有されているかという関係または関数を取得することが目標です。 漸近的振る舞い 関数の場合f(n) 漸近的な振る舞いは、nが大きくなるにつれてf(n)が大きくなることです。小さい入力値は考慮されません。私たちの仕事は

  2. C /C++でのバークレーのアルゴリズム

    バークレーのアルゴリズムは、分散システムのクロック同期に使用されるアルゴリズムです。このアルゴリズムは、分散ネットワークの一部またはすべてのシステムにこれらの問題のいずれかがある場合に使用されます- A.マシンには正確なタイムソースがありません。 B.ネットワークまたはマシンにUTCサーバーがありません。 分散システム 物理的に分離されているが、ネットワークを使用して相互にリンクされている複数のノードが含まれています。 バークレーのアルゴリズム このアルゴリズムでは、システムはノードをマスター/リーダーノードとして選択します。これは、サーバーのプールノードから実行され