
コンピュータサイエンスにおいて、グラフとは、数学におけるグラフ理論の分野における無向グラフと有向グラフの概念を実装することを目的とした抽象データ型である。
グラフデータ構造は、有限個の(場合によっては変更可能な)頂点(ノードまたはポイントとも呼ばれる)の集合と、無向グラフの場合はこれらの頂点の順序付けされていないペアの集合、有向グラフの場合は順序付けされたペアの集合から構成されます。これらのペアはエッジ(リンクまたは線とも呼ばれる)として知られており、有向グラフの場合はエッジとして知られていますが、矢印またはアークと呼ばれることもあります。頂点はグラフ構造の一部である場合もあれば、整数インデックスまたは参照によって表される外部エンティティである場合もあります。
グラフデータ構造では、各エッジに記号ラベルや数値属性(コスト、容量、長さなど)といったエッジ値を関連付けることもできます。

グラフデータ構造Gが提供する基本的な操作は通常次のとおりです。[ 1 ]
エッジに値を関連付ける構造は通常、次の機能も提供します。[ 1 ]
以下の表は、グラフの各表現形式における各種操作の実行にかかる時間計算量を示しています。ここで、| V |は頂点の数、| E |は辺の数です。行列表現では、各要素は辺をたどるコストを表します。存在しない辺のコストは無限大とみなされます。
隣接リストは一般的に疎グラフの表現に好まれ、隣接行列はグラフが密な場合、つまりエッジの数が多い場合に好まれる。頂点の数の二乗に近い値です。あるいは、2 つの頂点を結ぶ辺があるかどうかを素早く調べる必要がある場合。[ 5 ] [ 6 ]
隣接リスト表現における操作の時間計算量は、隣接頂点の集合をハッシュテーブルや平衡二分探索木などのより効率的なデータ構造に格納することで改善できます(後者の表現では、頂点は整数や文字列などの線形順序集合の要素によって識別される必要があります)。ハッシュテーブルによる隣接頂点の表現は、償却平均時間計算量をもたらします。与えられた 2 つの頂点の隣接性をテストし、エッジを削除し、償却平均時間計算量[ 7 ]は次数xの特定の頂点を削除する他の操作の時間計算量と漸近的な空間要件は変化しません。
グラフ問題の並列化は、データ駆動型計算、非構造化問題、局所性の低さ、計算に対するデータアクセスの比率の高さといった重大な課題に直面しています。[ 8 ] [ 9 ]並列アーキテクチャで使用されるグラフ表現は、これらの課題に対処する上で重要な役割を果たします。不適切な表現を選択すると、アルゴリズムの通信コストが不必要に上昇し、スケーラビリティが低下する可能性があります。以下では、共有メモリアーキテクチャと分散メモリアーキテクチャについて検討します。
共有メモリモデルの場合、並列処理に使用されるグラフ表現は逐次処理の場合と同じです[ 10 ]。これは、グラフ表現(隣接リストなど)への並列読み取り専用アクセスが共有メモリでは効率的であるためです。
分散メモリモデルでは、通常、頂点セットを分割するアプローチが取られます。グラフをセット。 ここ、は利用可能な処理要素 (PE) の数です。頂点セットのパーティションは、対応するエッジに加えて、一致するインデックスを持つ PE に分配されます。各 PE は独自のサブグラフ表現を持ち、別のパーティションにエンドポイントを持つエッジには特別な注意が必要です。MPI のような標準的な通信インターフェースでは、他のエンドポイントを所有する PE の ID を識別できる必要があります。分散グラフアルゴリズムでの計算中、これらのエッジに沿って情報を渡すことは通信を意味します。[ 10 ]
グラフの分割は慎重に行う必要があります。低通信と均等なサイズの分割の間にはトレードオフがあります[ 11 ]。しかし、グラフの分割はNP困難問題であるため、計算することは現実的ではありません。代わりに、次のヒューリスティックが使用されます。
1Dパーティショニング: 各プロセッサは頂点とそれに対応する出力エッジ。これは隣接行列の行方向または列方向の分解として理解できます。この表現で動作するアルゴリズムでは、全対全通信ステップとメッセージバッファのサイズは、各PEが他のすべてのPEに対して送信エッジを持つ可能性があるためです。[ 12 ]
2Dパーティショニング:各プロセッサは隣接行列のサブマトリックスを受け取ります。プロセッサは長方形に配置されていると仮定します。、 どこそしてはそれぞれ、各行および各列の処理要素の数です。次に、各プロセッサは、次元の隣接行列のサブマトリックスを取得します。これは、マトリックス内の市松模様として視覚化できます。 [ 12 ]したがって、各処理ユニットは、同じ行と列のPEにのみ出力エッジを持つことができます。これにより、各PEの通信パートナーの数が制限されます。から可能性のあるもの。
機械学習、ソーシャルネットワーク分析、その他の分野では、数兆のエッジを持つグラフが存在します。I/Oとメモリ要件を削減するために、圧縮グラフ表現が開発されてきました。ハフマン符号化などの一般的な手法が適用可能ですが、隣接リストや隣接行列は効率を高めるために特定の方法で処理することができます。[ 13 ]
幅優先探索(BFS) と深さ優先探索(DFS) は、与えられた連結成分内のすべてのノードを探索するために使用される、密接に関連した 2 つのアプローチです。どちらも任意のノード「ルート」から始まります。[ 14 ]強く連結した成分は、修正された DFS であるKosaraju のアルゴリズムなどのアルゴリズムを使用したグラフの走査によっても見つけることができます。
ダイクストラ法は、正の重みを持つグラフ(すべての辺の重みが0以上であるグラフ)および/または有向グラフで使用できる経路探索アルゴリズムです。これは、任意に選択された2つのノード間の最短経路を見つけるために使用でき、ルーティング問題でよく用いられます。