私はダイクストラの経路探索アルゴリズムをJavaScriptに実装しました。その大部分は、ノードまでの距離を保存し、最小のものをフェッチすることです。距離は頻繁に変化し、最も短い距離が頻繁に取得されます。
私は現在、順序付けられたリンクリストを使用しており、アイテムは追加されたときに順番に並べられます。
より速い方法はありますか?
編集:
更新:
アルボウのフィボナッチヒープの提案を実装しました。 32〜85倍高速でした減少すると、データセットが大きくなります。
値が削除されるたびに統合を実行しないことにより、真のフィボナッチヒープから逸脱しました。 50シフトごとに1回実行すると最高のパフォーマンスが得られます。
ソースコードはこちら: https://github.com/nojacko/dijkstras-js/blob/bda68d1274629c30b1f902ffb7f95f1e3c695973/Dijkstras.js
それが本当に順序付けられたリンクリストである場合、適切な場所が見つかるまでリストを1つずつトラバースする必要があるため、これはかなり悪い選択です。アイテムを挿入します。つまり、O(N)です。これはリストが小さい場合は問題ありませんが、大きなグラフでは手に負えなくなる可能性があります。
通常、そのようなものに必要なのはヒープです。
http://en.wikipedia.org/wiki/Heap_%28data_structure%29
... O(log(n))で挿入およびポップできる場所...通常、ほとんどのプログラミング言語でそのまま使用できます。