無向有限スパースグラフがあり、次のクエリを効率的に実行できる必要があるとします。
- -戻るとの間の経路がある場合と、そうでなければN 1 N 2 F
- から到達可能なノードのセットを返します
これは、グラフの接続されたコンポーネントを事前に計算することで簡単に実行できます。どちらのクエリも時間で実行できます。
エッジを任意に追加できるようにする必要がある場合 -次に、コンポーネントを分離セットデータ構造に格納できます。エッジが追加されるたびに、異なるコンポーネントの2つのノードを接続する場合、それらのコンポーネントをマージします。これが追加されますのコストとへのコストと(同様かもしれません)。
エッジを任意に削除できるようにする必要がある場合、この状況を処理するのに最適なデータ構造は何ですか?知っていますか?要約すると、次の操作を効率的にサポートする必要があります。
- -返し間の経路がある場合とそうでなければ、。
- ConnectedNodes(N)-Nから到達可能なノードのセットを返します。
- つのノード間にエッジを追加します。、またはその両方が以前に存在しなかった可能性があることに注意してください。
- つのノード間の既存のエッジを削除します。
(私はゲーム開発の観点からこれに興味があります-この問題はかなりの状況で発生するようです。おそらくプレイヤーは電力線を構築でき、発電機が建物に接続されているかどうかを知る必要があります。プレイヤーはロックできるかもしれません。ドアのロックを解除し、敵がプレイヤーに到達できるかどうかを知る必要があります。しかし、これは非常に一般的な問題なので、そのように言いました)