正のエッジ重みのみを持つ有向連結グラフを考えると、フィボナッチヒープを使用するダイクストラよりも、2つの頂点間の最短経路を見つけるためのより高速なアルゴリズムはありますか?
ウィキペディアによると、ダイクストラはO(| E | + | V | * log(| V |))にあります(フィボナッチヒープを使用)。
たとえば、実行時間の半分の最適化ではなく、時間計算量が異なるアルゴリズム(O(n * log n)からO(n)への移行など)を探しています。
さらに、以下のアプローチについてのご意見をお聞かせください。
- すべてのエッジの重みのGCDを決定します。
- グラフを均一なエッジの重みを持つグラフに変換します。
- BFSを使用して、指定された2つの頂点間の最短経路を見つけます。
ポイント2の例:
GCDが1であると想像してください。次に、エッジ
A ---> B(エッジの重み3)
を
A-> A'-> A''-> B(エッジの重み1の3倍)に変換します。
この変換には一定の時間がかかり、エッジごとに1回実行する必要があります。したがって、このアルゴリズムはO(| E |)(変換)+ O(| E | + | V |)(BFS)= O(2 * | E | + | V |)= O(| E | + | V |)
私の質問を読むために時間を割いてくれてありがとう、そして私はあなたの時間を無駄にしないことを望みます^^。良い1日を。