アルゴリズムの時間計算量についての深い理解

時間計算量の定義

時間計算量は、入力サイズが増加したときにアルゴリズムに必要な実行時間を記述するために使用される尺度であり、問​​題のサイズが増加するにつれてアルゴリズムの実行時間が増加する速度を表します。アルゴリズムの上限推定値です。実行時間は、通常は O シンボル表現を通じて行われます。時間計算量はアルゴリズムの効率と実行速度を表し、さまざまなアルゴリズムのパフォーマンスを比較するために使用できます。

注:
1. 時間計算量は、最悪の場合のアルゴリズムの実行時間を表します。これは、最悪の場合の時間計算量がアルゴリズムのパフォーマンスの上限推定値であり、どのような状況でもアルゴリズムがその時間範囲内で完了できることが保証されるためです。
2. 実際のアルゴリズム解析では、通常、最良ケースと平均ケースの時間計算量も考慮されます。最良の場合は、最も理想的な入力状況における時間計算量を指し、平均的な場合は、考えられるすべての入力状況における平均時間計算量の推定値です。

時間計算量の分類

時間計算量は、多項式の大きさと非多項式の大きさの 2 つのカテゴリに大別されます。
非多項式の大きさは、
O ( 2 n ) と O ( n ! ) O(2^n) と O(n!) の2 つだけです。2n )O(n!)

非多項式振幅アルゴリズムの実行時間は、入力サイズが増加するにつれて急激に増加するため、非常に非効率なアルゴリズムになります。
多項式レベルの複雑さは、低次から高次まで一般的ではありません (時間計算量が高くなるほど、実行効率は低くなります)。

O ( 1 ) < O ( logn ) < O ( n ) < O ( nlogn ) < O ( n 2 ) O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) )<O (ログオン) _ _ _<O ( n )<O ( nログn ) _ _<O ( n2 )

対応する曲線グラフを以下に示します。
ここに画像の説明を挿入します

時間計算量の分析

1. アルゴリズムまたはコード部分の時間計算量を分析するときは、ループの実行回数が最も多いコード部分に注目するだけでよく、これがアルゴリズムの時間計算量を表します。
2. 加算ルール: 複数のアルゴリズムを順番に使用する場合、合計の複雑さは、最も大きいコードの複雑さに等しい 3. 乗算ルール: ネストされたコードの複雑さは、内部のコードの複雑さの積に
等しいそしてアウターコード。

一般的なデータ構造とアルゴリズムの時間計算量

一般的なデータ構造

1.アレイ

  • インデックスアクセス: O(1)
  • 検索: O(n)
  • 挿入/削除(終了):O(1)
  • 挿入/削除(途中または先頭):O(n)

2. リンクリスト

  • アクセス: O(n)
  • 検索: O(n)
  • 挿入/削除(先頭):O(1)
  • 挿入/削除 (途中または最後に実行): O(1) (位置がわかっている場合)、O(n) (位置を検索する必要がある場合)

3. 積み重ねる

  • 挿入/削除(先頭):O(1)
  • アクセス・検索:O(n)

4.キュー

  • 挿入/削除(先頭または末尾):O(1)
  • アクセス: O(n)

5. ハッシュテーブル:

  • 挿入/削除/アクセス (平均的な場合): O(1)
  • ハッシュ衝突の数に応じて、最悪のケースは O(n) になる可能性があります

一般的なアルゴリズム

1.線形探索

  • 時間計算量: O(n)

2.二分探索

  • 時間計算量: O(logn)

3. バブルソート

  • 平均的なケースと最悪のケース: O(n^2)

4.クイックソート

  • 平均的なケース: O(nlogn)
  • 最悪の場合: O(n^2)

5.マージソート

  • 最良のケース、平均的なケース、最悪のケース: O(nlogn)

6.ヒープソート

  • 平均的なケースと最悪のケース: O(nlogn)

一般的な並べ替えアルゴリズムの説明

注: 並べ替えアルゴリズムの安定性とは、並べ替えプロセス中に、等しいキー値を持つ要素の相対的な順序が並べ替え結果で変更されないという特性を指します。一部のアプリケーション シナリオでは、等しい要素の相対的な順序を変更せずに維持する必要があるため、安定性は並べ替えアルゴリズムの重要な特性です。安定性の利点は、特定の状況下、特に順序に依存する特定の問題を扱う場合に、ソート アルゴリズムの正確性を保証できることです。ただし、すべての並べ替えアルゴリズムが安定しているわけではなく、一部の並べ替えアルゴリズムでは、キー値が等しい要素の相対的な順序が変更される場合があります。したがって、並べ替えアルゴリズムを選択するときは、特定のアプリケーション シナリオに基づいて並べ替えアルゴリズムの安定性要件を考慮する必要があります。

バブルソート

原理: バブルソートは配列を複数回走査し、ソートが完了するまで隣接する要素のサイズを比較し、位置を交換します。各反復では、最大の要素が最後まで「バブル」されます。
特徴: バブルソートは比較的単純なソートアルゴリズムであり、実装すると理解しやすいですが、効率は低くなります。時間計算量は O(n^2) で、小規模なデータの並べ替えに適しています。
解決に適した問題: バブル ソートは小規模なデータの並べ替えには適していますが、大規模なデータの処理には適していません。

クイックソート

原則: クイックソートは分割統治の考えに基づいています。まず参照要素 (通常は配列内の要素) を選択し、次に配列を 2 つのサブシーケンスに分割します。一方のサブシーケンスの要素は参照要素以下であり、もう一方のサブシーケンスの要素は参照要素より大きくなります。または参照要素と同等です。次に、2 つのサブシーケンスが再帰的に迅速に並べ替えられます。
特徴: クイック ソートは比較ベースの並べ替えアルゴリズムであり、平均時間計算量は O(nlogn) です。インプレースソートと不安定性の特徴があります。
解決に適した問題: クイックソートは大規模なデータのソートに適しており、高速です。実際のさまざまな並べ替えシナリオで広く使用されています。

マージソート

原則: マージソートも分割統治の考え方に基づいています。配列が継続的に小さなサブ配列に分割され、並べ替えが完了するまでこれらのサブ配列が 1 つずつマージされます。
特徴: マージソートの計算量は O(nlogn) で、安定性と信頼性が高いという特徴があります。中間結果の一時配列を保存するには追加のスペースが必要です。
解決に適した問題: マージ ソートは大規模なデータの並べ替えに適しており、その安定性と信頼性により、同じ要素の順序を維持する必要があるシナリオに適しています。

ヒープソート

原則: ヒープ ソートは完全なバイナリ ヒープ構造に基づいています。ソート対象の配列を最大ヒープ (または最小ヒープ) に構築し、すべての要素がソートされるまで最大ヒープから最上位の要素を継続的に削除し、ヒープを調整します。
特徴: ヒープ ソートの時間計算量は O(nlogn) で、インプレース ソート アルゴリズムであり、追加のスペースを必要としません。ただし、ヒープ ソートは安定したソート アルゴリズムではありません。
解決に適した問題: ヒープ ソートは、大規模なデータの並べ替え、特に最大 (または最小) 要素の一部のみを保持する必要があるシナリオに適しています。優先キューや TopK 問題で広く使用されています。

これらのソート アルゴリズムには、実際のアプリケーションにおける独自のアプリケーション シナリオと制限があり、正しいソート アルゴリズムの選択は、データ サイズ、安定性要件、スペースの複雑さの要件、パフォーマンス要件などの要因によって決まります。
バブルソートはパフォーマンスが低いため、実際のプロジェクトではほとんど使用されません。
速度とスペースの複雑さの要件はあるが安定性の要件はない場合、ソート アルゴリズムはクイック ソートを選択します。安定性の要件はあるがスペースの複雑さの要件はない場合、
ソート アルゴリズムはマージ ソートを選択します。
最小の要素では、ヒープソートが使用されます。

おすすめ

転載: blog.csdn.net/yang1fei2/article/details/133042777