以下のアルゴリズムの時間計算量はどれくらいですか?

アントワーヌ

以下のアルゴリズムの時間計算量を確認したいだけです。

編集:以下では、最適なデータ構造が使用されているとは想定していません。ただし、そのような構造を使用するソリューションを自由に提案してください(使用されるデータ構造と、それらが複雑さに与える有益な影響について明確に言及してください)。

ここに画像の説明を入力してください

表記法:以下では、n = | V |、m = | E |、およびavg_neighは、グラフ内の任意のノードの隣接ノードの平均数を示します。

仮定:グラフは重み付けされておらず、無向であり、隣接リスト表現がメモリにロードされています(各頂点の隣接リストを含むリストのリスト)。

これが私たちがこれまでに持っているものです:

1行目:次数の計算はO(n)です。これは、隣接リスト表現の各サブリストの長さを取得する、つまりn個のO(1)操作を実行するだけだからです。

3行目:最小値を見つけるには、すべての値、つまりO(n)をチェックする必要があります。これは、すべてのノードに1回アクセスするwhileループにネストされているため、O(n ^ 2)になります。

6〜7行目:隣接リスト表現からvの隣接リストがわかっているため、頂点vの削除はO(avg_neigh ^ 2)であり、隣接リストの各サブリストからvを削除するのはO(avg_neigh)です。6〜7行目はwhileループにネストされているため、O(n * avg_neigh ^ 2)になります。

9行目:1つのリストの長さを取得するだけなので、O(1)です。forループとwhileループにネストされているため、O(n * avg_neigh)になります。

要約:全体の複雑さはO(n)+ O(n ^ 2)+ O(n * avg_neigh ^ 2)+ O(n * avg_neigh)= O(n ^ 2)です。

注1:各サブリストの長さが利用できない場合(たとえば、隣接リストをメモリにロードできないため)、各リストには平均してavg_neigh要素が含まれているため、1行目の次数の計算はO(n * avg_neigh)です。 n個のサブリストです。そして9行目では、複雑さの合計はO(n * avg_neigh ^ 2)になります。

注2:グラフに重みが付けられている場合、隣接リスト表現にエッジの重みを格納できます。ただし、1行目の度数を取得するには、各サブリストを合計する必要があり、隣接リストがRAMにロードされている場合はO(n * avg_neigh)になり、それ以外の場合はO(n * avg_neigh ^ 2)になります。同様に、9行目はO(n * avg_neigh ^ 2)またはO(n * avg_neigh ^ 3)になります。

デビッドアイゼンスタット

(1)アルゴリズム1の実装として認識可能であり、(2)時間O(| E | + | V |)で実行されるアルゴリズムがあります。

まず、アルゴリズム1の本質を考えてみましょう。グラフが空になるまで、次の手順を実行します。優先度が最も低いノードの優先度をそのノードのコア番号として記録し、そのノードを削除します。ノードの優先度は、(1)残差グラフでのその次数、および(2)削除された隣接ノードのコア数に対する最大値として動的に定義されます。ノードの次数が上がることはなく、優先度の高いネイバーが最初に削除されないため、ノードの優先度が上がることはないことに注意してください。また、優先順位は、外側のループの反復ごとに常に1つずつ減少します。

O(| E | + | V |)時間を達成するのに十分なデータ構造サポートは、

  1. 初期グラフ(初期化時間O(| E | + | V |))から開始してサポートするグラフ

    • ノードの削除(O(度+ 1)、すべてのノードでO(| E | + | V |)に合計)、
    • ノードの残余次数を取得する(O(1))。
  2. 初期度(初期化時間O(| V |))から開始して、サポートする優先度キュー

    • 最小優先度要素(O(1)が償却済み)をポップし、
    • 要素の優先度を1つ下げて(O(1))、ゼロ以上にします。

適切なグラフの実装では、二重にリンクされた隣接リストを使用します。各無向エッジには、2つの対応するリストノードがあり、同じ頂点から発生する前/次のノードに加えて、互いにリンクされています。度はハッシュテーブルに保存できます。このアルゴリズムを実装するために必要なのは残余度のみであることが判明したため、残余グラフをわざわざ保存しないでください。

優先順位は0から| V |までの数字なので -1、バケットキューは非常にうまく機能します。この実装は、二重にリンクされたリストの| V |要素ベクトルで構成されます。ここで、インデックスpのリストには、優先度pの要素が含まれています。また、キュー内の要素の最小優先度の下限も追跡します。最小優先度要素を見つけるために、この境界から順にリストを調べます。最悪の場合、これにはO(| V |)のコストがかかりますが、アルゴリズムが限界を増やすたびに貸方に記入し、限界が減少するたびに借方に記入すると、このスキャンの変動費を相殺する償却スキームが得られます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

与えられたアルゴリズムの時間計算量はどれくらいですか?

このJSアルゴリズムの時間計算量はどれくらいですか

このBFSアルゴリズムの時間計算量はどれくらいですか?

このアルゴリズムの時間計算量はどれくらいですか?

このアルゴリズム(Big-O)の時間計算量はどれくらいですか?

この生成アルゴリズムの時間計算量はどれくらいですか?

このコイン交換アルゴリズムの時間計算量はどれくらいですか?

数独のアルゴリズムXの時間計算量はどれくらいですか?

このreverseWordsアルゴリズムの時間計算量はどれくらいですか?

このアルゴリズム(擬似コード)の時間計算量はどれくらいですか?

次の再帰的アルゴリズムの時間計算量はどのくらいですか?

このアルゴリズムの時間計算量はどのくらいですか?

すべてのパス合計を見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

すべてのことばの梯子を取得するためのこのアルゴリズムの時間計算量はどれくらいですか?

2D配列から値を取得するこのアルゴリズムの時間計算量はどれくらいですか?

nのすべての約数を取得するこのアルゴリズムの実行時間計算量はどれくらいですか?

ワイルドカードマッチングのためのこのアルゴリズムの時間計算量はどれくらいですか?

AVLツリーとバイナリツリーを使用したこのアルゴリズムの時間計算量はどれくらいですか

すべての組み合わせを見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

最大二者間マッチングアルゴリズムの時間計算量はどれくらいですか?

whileループとともに二分探索を行うこのアルゴリズムの時間計算量はどれくらいですか?

最長の回文部分文字列を見つけるこのアルゴリズムの時間計算量はどれくらいですか?

このコインチェンジの組み合わせアルゴリズムの時間計算量はどれくらいですか?

Spark:GraphXで使用される連結成分アルゴリズムの時間計算量はどれくらいですか?

ニュートン法と二分法のアルゴリズムの時間計算量はどれくらいですか?

アルゴリズムの時間計算量を改善するにはどうすればよいですか?

時間計算量に基づくこれら3つのアルゴリズムの違いは何ですか?

C ++のアルゴリズムの時間計算量を減らすにはどうすればよいですか?

この特定のアルゴリズムの時間計算量を計算するにはどうすればよいですか?

TOP 一覧

  1. 1

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  2. 2

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  3. 3

    Python / SciPyのピーク検出アルゴリズム

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  6. 6

    androidsoongビルドシステムによるネイティブコードカバレッジ

  7. 7

    ZScalerと証明書の問題により、Dockerを使用できません

  8. 8

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  9. 9

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  10. 10

    二次導関数を数値計算するときの大きな誤差

  11. 11

    Ansibleで複数行のシェルスクリプトを実行する方法

  12. 12

    画像変更コードを実行してもボタンの画像が変更されない

  13. 13

    Reactでclsxを使用する方法

  14. 14

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  15. 15

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  16. 16

    PyTesseractを使用した背景色のため、スクリーンショットからテキストを読み取ることができません

  17. 17

    値間の一致を見つける最も簡単な方法は何ですか

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  20. 20

    好き/愛の関係のためのデータベース設計

  21. 21

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

ホットタグ

アーカイブ