logo

グラフとその表現

グラフのデータ構造とは何ですか?

グラフ は、頂点とエッジで構成される非線形データ構造です。頂点はノードと呼ばれることもあり、エッジはグラフ内の任意の 2 つのノードを接続する線または円弧です。より正式には、グラフは一連の頂点で構成されます( ) とエッジのセット( そして )。グラフは次のように表されます。 G(V,E)

グラフの表現

グラフを表現する最も一般的な 2 つの方法を次に示します。

  1. 隣接行列
  2. 隣接リスト

隣接行列

隣接行列は、グラフをブール値 (0 と 1) の行列として表現する方法です。



あると仮定しましょう n グラフ内の頂点 そこで、2D 行列を作成します adjMat[n][n] 次元 n x n を持ちます。

  • 頂点からのエッジがある場合 j 、 マーク adjMat[i][j] として 1
  • 頂点からのエッジがない場合 j 、 マーク adjMat[i][j] として 0

無向グラフから隣接行列への表現:

以下の図は、無向グラフを示しています。最初に、マトリックス全体が次のように初期化されます。 0 。ソースから宛先までのエッジがある場合は、 1 どちらの場合も( adjMat[目的地] そして 調整マット [ 行き先]) どちらの方向にも進むことができるからです。

Undirected_to_Adjacency_matrix

無向グラフから隣接行列へ

有向グラフから隣接行列への表現:

以下の図は有向グラフを示しています。最初に、マトリックス全体が次のように初期化されます。 0 。ソースから宛先までのエッジがある場合は、 1 その特定の adjMat[目的地]

Directed_to_Adjacency_matrix

隣接行列への有向グラフ

隣接リスト

リストの配列は、2 つの頂点間のエッジを格納するために使用されます。配列のサイズは次の数に等しい 頂点 (つまり、n) 。この配列内の各インデックスは、グラフ内の特定の頂点を表します。配列のインデックス i のエントリには、頂点に隣接する頂点を含むリンク リストが含まれます。

あると仮定しましょう n グラフ内の頂点を作成します。 リストの配列 サイズの n として adjList[n]。

  • adjList[0] には、頂点に接続 (隣接) されているすべてのノードが含まれます。 0
  • adjList[1] には、頂点に接続 (隣接) されているすべてのノードが含まれます。 1 等々。

隣接リストに対する無向グラフの表現:

以下の無向グラフには 3 つの頂点があります。したがって、リストの配列はサイズ 3 で作成され、各インデックスは頂点を表します。ここで、頂点 0 には 2 つの隣接頂点 (つまり、1 と 2) があります。したがって、配列のインデックス 0 に頂点 1 と 2 を挿入します。同様に、頂点 1 には 2 つの隣接点 (つまり 2 と 0) があるため、配列のインデックス 1 に頂点 2 と 0 を挿入します。同様に、頂点 2 については、その近傍をリストの配列に挿入します。

無向グラフから隣接リストへのグラフ表現

無向グラフから隣接関係リストへ

隣接リストに対する有向グラフの表現:

以下の有向グラフには 3 つの頂点があります。したがって、リストの配列はサイズ 3 で作成され、各インデックスは頂点を表します。現在、頂点 0 には隣接する頂点がありません。頂点 1 には 2 つの隣接点 (つまり、0 と 2) があるため、配列のインデックス 1 に頂点 0 と 2 を挿入します。同様に、頂点 2 については、その近傍をリストの配列に挿入します。

隣接リストへの有向グラフのグラフ表現

隣接リストへの有向グラフ