グラフG =(V, E)、V に属するサブセットS 、およびSに属さないGのすべての頂点を含むサブセットS'が与えられた場合、 SとSのノード間のエッジの総数をカウントしたい' .
この問題を O(n^2) よりも複雑に解決できるアルゴリズム。
「O(n^2) より低い」とは、O(|E|) のようなものを意味すると仮定すると、ハッシュ構造を使用してそれを行うことができます。S のすべてのノードをハッシュセットに入れ、G のすべてのエッジを反復処理し、エッジごとに両方のエンドポイントがハッシュセットに含まれているかどうかを確認します。ハッシュセットの構築は O(n) であり、適切なハッシュ関数を想定すると、すべてのエッジの処理は O(|E|) です。の場合|E| in Omega(n^2)
、O(n^2) を超えることはできません。
編集:2つのこと:
|E| in Omega(n^2)
グラフに使用する表現によっては、うまくいかないという最後のステートメントが間違っています。をSE' = {e = {s,v} in E | s in S}
の少なくとも 1 つのエッジに付随するエッジのセットとします。インシデント/隣接リストがある場合、S のノードに付随するエッジを反復処理するだけで、複雑さを O(|E'|) に改善できます。および |E'| |E| よりも小さい場合があります。S に依存する非定数係数によって。