グラフのデータ構造と Algorithms (例)

⚡ スマートサマリー

グラフデータ構造は、頂点と辺からなる非線形な集合であり、各辺は2つの頂点を結び付けます。グラフは、地図、ソーシャルネットワーク、ウェブページなど、現実世界のネットワークをモデル化し、多くの強力なアルゴリズムをサポートします。

  • 📐 構造: グラフ G = (V, E) は、頂点(ノード)の集合と、それらの頂点間の辺(リンク)の集合をペアにしたものです。
  • 🔤 用語: 主要な用語には、頂点、辺、次数、入次数、出次数、自己ループ、隣接関係などが含まれます。
  • 🗂️ 表現: グラフは隣接行列または隣接リストを使用して格納されますが、それぞれ異なるスペースのトレードオフがあります。
  • 🧭 タイプ: グラフは、構造によって、有向グラフ、無向グラフ、重み付きグラフ、巡回グラフ、非巡回グラフ、完全グラフ、二部グラフなどに分類されます。
  • 🌐 用途: Google 地図の経路探索、ソーシャルネットワーク、ウェブランキング、リソースの依存関係などはすべてグラフに依存している。

グラフのデータ構造と Algorithms

データ構造におけるグラフとは何ですか?

グラフは、頂点と辺から構成される非線形データ構造であり、頂点には情報またはデータが含まれており、辺は2つの頂点間のリンクとして機能する。

これは、目的地までの最適なルートの探索や、通信およびソーシャルネットワークの経路探索など、現実世界の様々な問題を解決するために使用されます。グラフでは、ユーザーがノードとして扱われ、ワイヤはユーザー同士をつなぐエッジです。

エッジが E で表され、頂点が V で表される場合、グラフ G は頂点とエッジのセットとして次のように書くことができます。 G(V、E).

データ構造のグラフの例

グラフデータ構造の簡単な例を以下に示します。

データ構造のグラフの例

これは単純な無向グラフ(グラフの一種)です。頂点の集合は{A, B, C, D, E, F}です。2つの頂点は辺を形成します。例えば、AとBは辺で結ばれています。しかし、AとFはどの辺でも結ばれていません。

データ構造におけるグラフ用語

グラフデータ構造で使用される重要な用語を以下に示します。

契約期間 詳細説明
頂点各データ要素は頂点またはノードと呼ばれます。上の図では、A、B、C、D、Eが頂点です。
エッジ(円弧)2つのノードまたは頂点間の接続リンクはエッジ(弧)と呼ばれます。エッジには2つの端点があり、(開始頂点、終了頂点)として表されます。
無向エッジ双方向エッジです。
有向エッジ一方向エッジです。
加重エッジ値が設定されたエッジ。
グラフにおいて、頂点に接続されている辺の数を次数と呼ぶ。
度数頂点に接続されている入力エッジの総数。
出次数頂点に接続されている発信エッジの総数。
セルフループエッジの XNUMX つの端点が一致する場合、エッジは自己ループと呼ばれます。
隣接頂点同士が辺で繋がっている場合、それらの頂点は隣接していると言われる。

データ構造におけるグラフの種類

最も一般的なもののリストは次のとおりです データ構造内のグラフの種類:

  • 有向グラフ
  • 無向グラフ
  • 加重グラフ
  • 双方向グラフ
  • 無限グラフ
  • ヌルグラフ
  • 自明なグラフ
  • マルチグラフ
  • 完全なグラフ
  • 接続されたグラフ
  • 循環グラフ
  • 有向非巡回グラフ(DAG)
  • サイクルグラフ
  • XNUMX部グラフ
  • オイラーグラフ
  • ハミルトングラフ

グラフをデータ構造で表現するには?

グラフは通常、2つの表現形式のいずれかを使用してメモリに格納されます。どちらの形式を選択するかによって、グラフが使用するメモリ量と、一般的な操作の実行速度が変わります。

  • 隣接行列: 2次元のV×V配列で、頂点iと頂点jの間にエッジが存在する場合はセル[i][j]が1(またはエッジの重み)、存在しない場合は0となる。エッジの検索はO(1)で済むが、O(V²)の空間を使用するため、密なグラフに最適である。
  • 隣接リスト: 各頂点が隣接する頂点のリストを格納するリストの配列。O(V + E)の空間を使用し、疎なグラフに対して効率的であるため、ほとんどの現実世界のグラフで使用されています。

これらについての詳細は、 グラフの隣接リストと行列表現 チュートリアル。

グラフデータ構造の応用

グラフには多くの用途があります。グラフを利用するアルゴリズムは数多く存在します。以下に、グラフの応用例をいくつか示します。

  • Google Mapsはグラフを使用して2つの道路の交差点を見つけ、2つの場所間の距離を計算します。たとえば、 ダイクストラ出発地と目的地間の最短距離を求めるため。
  • Facebookはグラフを用いてユーザー間の共通の友人を見つけ出す。そのアルゴリズムでは、各ユーザーをグラフのノードとして扱う。
  • リソース割り当てには、DAG(有向非巡回グラフ)が使用されます。DAGはリソース間の依存関係をチェックします。
  • その Google 検索エンジンはグラフを使用してウェブサイトのランキングを作成します。
  • 地図ping このデバイスはグラフデータ構造を使用します。
  • A ルータ そしてそのプロトコルは、グラフを使用して目的地までの経路を学習します。

よくあるご質問

グラフニューラルネットワークは、グラフ構造データから学習し、不正検出、レコメンデーション、創薬などに活用されます。ナレッジグラフはAIによる質問応答をサポートし、ディープラーニングフレームワークはあらゆる計算を演算のグラフとしてモデル化します。

はい。GitHub CopilotのようなAIアシスタントは、単純な記述からBFS、DFS、ダイクストラ法、トポロジカルソートの実装を生成できます。ただし、コードを使用する前に、接続されていないノード、サイクル、空のグラフなどのエッジケースをテストする必要があります。

木構造は、連結していてサイクルがなく、任意の2つのノード間に必ず1つの経路が存在する、特殊なタイプのグラフです。グラフはより一般的なもので、サイクル、連結していない部分、有向エッジや重み付きエッジを含むことができます。

主な探索方法は、幅優先探索(BFS)と深さ優先探索(DFS)の2つです。幅優先探索はキューを使用してレベルごとに探索を行い、深さ優先探索はスタックまたは再帰を使用して可能な限り深く探索してから戻ります。tracキング。