補数グラフで最短経路を見つける


7

入力として頂点を受け取るアルゴリズムを探しています s、からの最短経路を見つける s補数グラフ(無向)のすべての頂点に。アルゴリズムを実行する必要がありますO(V+E) 時間、場所 E 元のグラフ(補数グラフではない)のエッジの数です。

もし G はグラフです。補数グラフは次のグラフとして定義されます。 e元のグラフのエッジではない場合にのみ、補数グラフのエッジです。つまり、既存のエッジをすべて削除し、元のグラフから欠落していたすべてのエッジを追加します。

したがって、まず最初に、もちろん補数グラフを「構築」する(隣接リストの頂点をそこに表示されないもので置き換える)ことを考え、次に新しいリストでBFSを実行しましたが、もちろん、ランタイム元のエッジではなく、補数グラフのエッジに基づいています。

もちろん、元のグラフでBFSを実行した後、距離が s(元のグラフで)1より大きい値は、補数グラフで1になるはずです(元のグラフで隣接していなかった場合、それらは補数グラフで隣接しているため)。しかし、距離をいつ更新するか、何を更新するかについて、特定のルールに従ってアルゴリズムを続行できませんでした。助言がありますか?


3
可能な方向は、2つのケースを検討することです。 |E|<c|V|2 そして |E|c|V|2、一定の c<1/2。2番目のケースでは、補数グラフはO(|E|)エッジ、これで完了です。最初のケースでは、補数グラフが非常に密集しているため、アルゴリズムをより高速に実行できます。
Yuval Filmus 14年

回答:


-1

私は個人的に、これが未回答のままにされている理由を見ません。

補数グラフで何かを見つけ、グラフで同じものを見つけることは、本質的に同じ時間の複雑さを持ちます(定数係数まで)。

エッジ間で交換するため (u,v) と非エッジ (u,v) ただ O(1)時間の操作。すべてのクエリ出力を無効にするだけで、変換や変換を行う必要はありません。


1
実行する必要があります O(|V|+|E|)時間。注意E補数グラフではなく、元のグラフのエッジのセットです。
xskxzr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.