典型的なデータ構造 - グラフ、グラフストレージ、基本操作、トラバーサル

写真

引用元:「データ構造チュートリアル」。

コンセプト

グラフでは要素間の関係を多対多にできます。グラフ内の任意の 2 つのデータ要素間に接続関係が存在する場合があります。データ構造として、グラフはデータ要素間に広く存在するより複雑な関係を表現できます。電子回路解析、エンジニアリング計画解析、最短経路の検索などの多くのアプリケーションの中でも、グラフはそのような関係を記述するための非常に自然なモデルです。グラフ理論は離散数学の主要な内容の 1 つですが、ここではいくつかの概念と保存方法のみを紹介します。

  1. 有向グラフ/無向グラフ: グラフ内のすべてのエッジに方向がない場合、それは無向グラフです。グラフ内のすべてのエッジに方向がある場合、それは有向グラフと呼ばれます。

    アセット/10.jpg

  2. 通常、グラフ内の頂点にはシーケンス内の番号を付ける必要があります。シーケンス内の頂点の位置が i の場合、その頂点は頂点 i になります。

  3. Right/Net: エッジに関するデータ情報を権利と呼びます。特定のアプリケーションでは、重みは、線路の長さや勾配、回路の 2 つの端点間の抵抗電流や電圧値など、実際的な意味を持ちます。各エッジに重みを付けたグラフは、ネットワークまたはネットと呼ばれます。頂点と辺の実際の意味は、問題が属する分野によって異なります。

  4. 次数: 頂点の次数は、頂点 v に接続されているエッジの数を指し、TD(v) として記録されます。有向グラフの場合、頂点 v の入次数は、頂点 v を終点とする円弧の数を指し、ID(v) として示されます。特定の頂点 v の出次数は、頂点 v を終点とする円弧の数を指します。頂点 v を開始点とし、OD(v) と表すと、TD(v) = ID(v) + OD(v) となります。n がグラフ内の頂点の数を表すために使用され、e がエッジまたは円弧の数を表すために使用され、TD(vi) が頂点 vi の次数を表すために使用される場合、次の関係があります。 2e = TD(vi) を i = 1 から i = n まで累積します。この関係からわかるように、n 個の頂点を持つ無向グラフは最大でも n(n - 1)/2 を持ちます。このようなグラフは完全グラフと呼ばれます。n 個の頂点を持つ有向グラフは最大でも n(n - 1) です。このような有向グラフは有向完全グラフと呼ばれます。グラフが完全なグラフに近い場合、それは密なグラフと呼ばれ、エッジまたはアークの数が少ない場合、それは疎なグラフと呼ばれます。

  5. パス/リング (ループ)/有向グラフ: 無向グラフでは、2 つの頂点間の一連の頂点が 2 つの頂点間のパス、つまりパスを接続できます。このパスに含まれるエッジの数をパスの長さと呼びます。有向グラフの場合、パスも段階的に変化します。重み付きグラフの場合、パスの長さはパス上のすべてのエッジの重みの合計を指します。開始頂点と終了頂点が同じ頂点の場合、パスはループまたはリングになります。有向グラフでは、この頂点から始まるパスがグラフ内の他のすべての頂点に到達できるような頂点がある場合、その有向グラフはルート付きグラフと呼ばれ、その頂点が有向グラフのルートになります。

  6. サブグラフ: グラフの頂点とエッジの一部を含むグラフのサブセット。

  7. グラフの接続性: 無向グラフの場合、固定点 vi から頂点 vj (i ≠ j) へのパスが存在する場合、vi から vj は接続されていると言われます。無向グラフ内の 2 つの頂点が接続されている場合、その無向グラフは接続グラフと呼ばれます。無向グラフの最大連結部分グラフは、グラフの連結成分と呼ばれます。明らかに、グラフには 1 つしかありません。有向グラフ内の任意の 2 つの頂点が接続されている場合、その有向グラフは強接続グラフと呼ばれ、有向グラフ内の最大の強接続サブグラフは、有向グラフの強接続コンポーネントと呼ばれます。

  8. スパニング ツリー: 接続されたグラフの最小の接続されたサブグラフは、グラフのスパニング ツリーと呼ばれます。スパニング ツリーにはループがありません。スパニング ツリーにエッジを追加すると必ずループが作成されます。スパニング ツリーからエッジを削除すると、確実に接続されなくなります。

  9. スパニング フォレスト: 有向グラフに、入次数が 0 の頂点が 1 つだけあり、他の頂点の入次数が 1 である場合、それは有向ツリーです。有向グラフのスパニング フォレストは、複数の有向ツリーで構成されます。

グラフの基本操作

グラフストレージ

  1. 隣接行列法 (スペースのコスト効率が低いため、スパース グラフには適していません)。

    12

  2. 隣接リスト方式。

  1. 有向グラフのクロスリンクリスト法。わずかに。

グラフの走査

与えられたグラフ内の指定された頂点から開始して、特定の原則に従ってグラフ内の他の頂点を系統的に訪問します。各頂点は 1 回だけ訪問され、グラフ内の頂点で構成されるシーケンスが取得されます。このプロセスはグラフ トラバーサルと呼ばれます。

グラフの走査は通常、深さ優先検索と幅優先検索を使用して実行されます。詳細については、この記事の下の「DFS および BFS (深さ/幅優先検索)」セクションを参照してください。

深さ優先検索の主なアイデアは、最初に未訪問の頂点を開始頂点として使用し、現在の頂点のエッジに沿って未訪問の頂点まで移動することです。未訪問の頂点がない場合は、前の頂点に戻り、すべての頂点が訪問されるまで他の頂点のテストを続けます。(深さ優先トラバーサルと接続コンポーネント | 初心者チュートリアル (runoob.com)から引用 )

幅優先検索。その走査原理は、グラフ内の指定された頂点から開始し、その頂点を訪問し、次にその頂点の未訪問の隣接点を順番に訪問し、次にこれらの隣接点から開始して、その未訪問の点を順番に訪問します。同じ原則に基づきます。訪問した隣接点など、グラフ内のすべての訪問した頂点の臨界点を訪問するまで続きます。この時点でグラフにまだ訪問していない頂点がある場合は、別の未訪問の頂点から開始します。開始して続行します。グラフ内のすべての頂点にアクセスするまで、上記のプロセスを繰り返します。幅優先検索は深さ優先検索とは異なり、最初に指定された開始点を訪問し、次に頂点の未訪問の隣接点をすべて順に訪問し、次に隣接点の未訪問の隣接点を訪問するという具合です。プロセスにはキュー構造を設定する必要があります。

グラフの保存方法、走査の開始点、走査方法などが異なると、走査されるシーケンスも異なります。

フォローアップの概念

最小スパニングツリー、最短パス、AOVネットワークとトポロジソート、AOEネットワークとクリティカルパスなど。

グラフ理論の基礎と表現 | 初心者チュートリアル (runoob.com)

おすすめ

転載: blog.csdn.net/Staokgo/article/details/132922499