我想知道双向Dijkstra算法的时间复杂度。
使用Min-Heap的普通Dijkstra有O(n log n + m)
。我的猜测是双向保持不变。但Wikipedia表明
双向搜索的改进一般可用O-Notation表示。
这是否可以计算双向Dijkstra以及如何计算?
答案 0 :(得分:5)
基本上,双向方法的成本是半尺寸图的单向处理的两倍。对于蛮力指数算法来说,这是一个巨大的增益(从O(m n )到O(2 *(m n / 2 ))。
对于Djikstra来说,最坏的情况基本上是一样的。
但是,时间复杂度可能不是评估效率的最佳指标。
在诸如在道路网络上寻找路线的实际情况中,双向方法类似于在每个端部周围生长光盘并且在两个光盘相遇时立即停止(几乎),而单向方法需要生长光盘从一开始直到你到达终点。
直观地说,如果R是开始和结束之间的直线距离,则搜索的成本将为O(R 2 ),而双向方法将为O(2 *(R) / 2) 2 ),即快2倍。
this paper很好地涵盖了这个主题。
无论如何,A *基本上是要走的路,除非你正在探索一个没有有效估算启发式的搜索空间。