0

これはより一般的な質問です。都市の名前をそのノード (国、緯度、経度などの基本情報を含む) にマップするマップがあります。各都市ノードには、宛先ノードを指すエッジの配列があります。エッジには時間メンバーとコスト メンバーがあります。2 つのノード間を移動する最短時間を見つけたいのですが、これを行う最善の方法について混乱し始めています。

都市ノードのベクトルに基づく独自の最小ヒープ クラスを作成しました。マップを作成して、マップから最小ヒープに都市ノードを追加できます。最短パスを見つけるためにダイクストラのアルゴリズムを作成しましたが、一部のパスでは機能しますが、すべてでは機能しません。これは、ダイクストラのアルゴリズムの都市ノードの重みを更新すると、ヒープが正しくソートされていないためだと思います。

ノードの重みを更新したら、最小の重みが一番上になるようにヒープを再ヒープするにはどうすればよいですか?

ありがとうございました!

4

1 に答える 1

0

ヒープ全体をソートしたい場合は、 http://en.wikipedia.org/wiki/Heapsortを簡単に見てください。

役立つ疑似コードがいくつかありますが、一番上が最低になるように再配置する必要があるかもしれませんが、それでうまくいくはずです。それ以外の場合は、ヒープのバブリングを調べて、ヒープを完全に再編成するのではなく、各段階でそれを適用できます。

http://en.wikipedia.org/wiki/Binary_heap

ここで説明するのは少し複雑ですが、アップ/ダウン ヒープ バブリングにより、ヒープが正しく編成されます。最悪の場合、ヒープソートは O(n log n) で実行されますが、バブリングはほとんどの操作で O(log n) で実行されることにも注意してください。

于 2013-04-16T22:13:31.283 に答える