私はすべての最短経路(またはその長さ)を頻繁に知る必要があるグラフを持っています。私はそれらを再計算したくないので、それらを単純な配列に格納してそこから取得するだけです。しかし、グラフは時間の経過とともに変化する可能性があるので、与えられた時間にグラフを再計算する必要があります。 最短経路を動的に更新する
は、今のところ、以下の変更が発生する可能性があります:
新しいエッジを追加するエッジ
の長さを変更するグラフ
に、ノードとエッジを追加しますグラフの
エッジの削除またはノードの削除
すべての場合、すべてのノードは常に接続され、すべてのエッジは正の重みを持ちます。また、グラフは無向である。操作のシーケンスは、すべてのノードが常にグラフの同じコンポーネントから来るようなものです。この前にノードまたはエッジが削除された場合、グラフが決して分離されないように、他のノードおよびエッジが追加されます。
今のところ私は更新を行い、すべての変更をグラフ構造を通して伝播する予定です。しかし、私はこれを正しく処理する方法はまだわかりません。どのようにキャッシュされた長さのこれらの更新を達成しようとしますか?
EDIT:あなたのいくつかが指摘したようにノードが追加されたり、リンクが変更されたとき
すべてを再計算するneccessaryかもしれません。これは、たとえば、すべての距離が更新によって変化する場合などです。しかし、グラフを使って変更を伝播し、dijkstrasのやり方と同様の緩和を行うと、最適な順序を選択しない可能性があるため、同じノードを複数回リラックスさせる必要があります。問題は、リラクゼーションの手順をどのようにするかということです。そのため、できるだけ複数の更新を避けるようにしています。
これは実際の考えがなければ意味をなさないものですが、これでもう少し明確になることを願っています。
ルートノードが1つあり、そこから最短のパスをすべて使用するか、すべてのノード間ですべてのパスが最短になりますか? –
いいえ、ルートノードはありませんが、最短パス長のすべてのペアです。 – LiKao
変更の影響を受けるパスで接続できる2つのポイントごとに、最短パスを再計算する必要があります –