私は、隣接リストで疎グラフを表し、隣接行列で密グラフを表すことが理想的だと読みました。しかし、疎グラフと密グラフの主な違いを理解したいと思います。
密なグラフは、エッジの数がエッジの最大数に近いグラフです。スパースグラフは、エッジの数が最小数のエッジに近いグラフです。スパースグラフは、 切断グラフ にできます。
名前が示すように、スパースグラフはまばらに接続されています(例:ツリー)。通常、エッジの数はO(n)であり、nは頂点の数です。したがって、隣接リストはすべてのエッジに一定のスペースを必要とするため優先されます。
密なグラフは密に接続されています。ここで、エッジの数は通常O(n ^ 2)です。したがって、隣接行列が優先されます。
比較するために、グラフに1000個の頂点があると仮定します。
グラフが密であるか疎であるかに関係なく、隣接行列では1000 ^ 2 = 1,000,000の値を保存する必要があります。
グラフが最小限に接続されている(つまり、ツリーである)場合、隣接リストには2,997個の値を保存する必要があります。グラフが完全に接続されている場合、3,000,000個の値を保存する必要があります。
From C++のオブジェクト指向設計パターンを使用したデータ構造とアルゴリズム、p。534、Bruno P. Reissによる :
非公式には、比較的少ないエッジを持つグラフは疎であり、多くのエッジを持つグラフは密です。
定義(スパースグラフ):スパースグラフは、G =(V、E)のグラフで、| E | = O(| V |)。
定義(密グラフ)密グラフとは、G =(V、E)のグラフで、| E | =Θ(| V |2)。
数学では、密なグラフとは、エッジの数がエッジの最大数に近いグラフです。反対に、エッジが数個しかないグラフは、まばらなグラフです。疎グラフと密グラフの区別はかなりあいまいで、コンテキストに依存します。