私はコーディングのインタビューの準備をしていて、グラフで私の心をリフレッシュしていました。私は次のことを疑問に思っていました。私が見たすべての場所で、隣接リストは大きなスパースグラフの隣接行列よりもメモリ効率が良いと想定されています。さらに、ノードから出て行くエッジの数を計算するには、行列中のO(N)が必要であり、O(1)はリスト内にあり、隣接するO(num隣接ノード)行列のO(N)
このような場所には、Cormen et al。の書籍、またはStackOverFlow:Size of a graph using adjacency list versus adjacency matrix?またはWikipediaがあります。グラフの表現:隣接リストと行列
しかし、Compressed Row Storage表現のようなスパース行列表現を使用すると、メモリ要件はO(ゼロ以外の数)= O(エッジ数)になります。これはリストを使用する場合と同じです。ノードからの出力エッジの数はO(1)(これはCRSに直接格納されている)であり、隣接するノードはO(隣のノードの数)にリストすることができる。
なぜ議論されていないのですか? CSR がであると仮定して、マトリックスによって表されるグラフの隣接関係リスト表現の一種ですか?あるいは、行列が疎行列表現を考慮していないために、メモリが集中していないという議論がありますか?
ありがとうございます!