入力として頂点を受け取るアルゴリズムを探しています 、からの最短経路を見つける 補数グラフ(無向)のすべての頂点に。アルゴリズムを実行する必要があります 時間、場所 元のグラフ(補数グラフではない)のエッジの数です。
もし はグラフです。補数グラフは次のグラフとして定義されます。 元のグラフのエッジではない場合にのみ、補数グラフのエッジです。つまり、既存のエッジをすべて削除し、元のグラフから欠落していたすべてのエッジを追加します。
したがって、まず最初に、もちろん補数グラフを「構築」する(隣接リストの頂点をそこに表示されないもので置き換える)ことを考え、次に新しいリストでBFSを実行しましたが、もちろん、ランタイム元のエッジではなく、補数グラフのエッジに基づいています。
もちろん、元のグラフでBFSを実行した後、距離が (元のグラフで)1より大きい値は、補数グラフで1になるはずです(元のグラフで隣接していなかった場合、それらは補数グラフで隣接しているため)。しかし、距離をいつ更新するか、何を更新するかについて、特定のルールに従ってアルゴリズムを続行できませんでした。助言がありますか?
3
可能な方向は、2つのケースを検討することです。
—
Yuval Filmus 14年
そして 、一定の 。2番目のケースでは、補数グラフは エッジ、これで完了です。最初のケースでは、補数グラフが非常に密集しているため、アルゴリズムをより高速に実行できます。