web-dev-qa-db-ja.com

疎グラフと密グラフの違いは何ですか?

私は、隣接リストで疎グラフを表し、隣接行列で密グラフを表すことが理想的だと読みました。しかし、疎グラフと密グラフの主な違いを理解したいと思います。

40
Geek

密なグラフは、エッジの数がエッジの最大数に近いグラフです。スパースグラフは、エッジの数が最小数のエッジに近いグラフです。スパースグラフは、 切断グラフ にできます。

33
CAMOBAP

名前が示すように、スパースグラフはまばらに接続されています(例:ツリー)。通常、エッジの数はO(n)であり、nは頂点の数です。したがって、隣接リストはすべてのエッジに一定のスペースを必要とするため優先されます。

密なグラフは密に接続されています。ここで、エッジの数は通常O(n ^ 2)です。したがって、隣接行列が優先されます。

比較するために、グラフに1000個の頂点があると仮定します。

グラフが密であるか疎であるかに関係なく、隣接行列では1000 ^ 2 = 1,000,000の値を保存する必要があります。

グラフが最小限に接続されている(つまり、ツリーである)場合、隣接リストには2,997個の値を保存する必要があります。グラフが完全に接続されている場合、3,000,000個の値を保存する必要があります。

34
ElKamina

From C++のオブジェクト指向設計パターンを使用したデータ構造とアルゴリズム、p。534、Bruno P. Reissによる

非公式には、比較的少ないエッジを持つグラフは疎であり、多くのエッジを持つグラフは密です。

定義(スパースグラフ):スパースグラフは、G =(V、E)のグラフで、| E | = O(| V |)。

定義(密グラフ)密グラフとは、G =(V、E)のグラフで、| E | =Θ(| V |2)。

10
Ryhan

メイングラフの積分特性は、頂点の数Vとエッジの数Eです。これら2つの関係により、グラフが疎か密かが決まります(wikiページ ここ )。

グラフのメモリ内表現を選択する背後にある理論全体は、サブジェクトドメインと使用方法を考慮して、最適なアクセス時間とメモリフットプリントのトレードオフを決定することです。

一般的に、メモリフットプリントを許容できない場合を除き、O(1)アクセス時間(したがって、グラフを密な隣接行列として保存))が必要です。その場合、最も適切なスパースを選択しますマトリックス表現(wikiページ ここ )。

3
bobah

数学では、密なグラフとは、エッジの数がエッジの最大数に近いグラフです。反対に、エッジが数個しかないグラフは、まばらなグラフです。疎グラフと密グラフの区別はかなりあいまいで、コンテキストに依存します。

1
Akash Kandpal