时间复杂度 - 双向 Dijkstra
Time Complexity - Bidirectional Dijkstra
我想知道双向 Dijkstra 算法的时间复杂度。
使用最小堆的普通 Dijkstra 有 O(n log n + m)
。我的猜测是双向保持不变。然而 Wikipedia 建议
一般而言,双向搜索的改进可以用 O-Notation 表示。
双向 Dijkstra 也可以计算吗?如何计算?
基本上,双向方法的成本是单向处理一半大小图的两倍。对于暴力指数算法,这是一个巨大的收益(从 O(mn) 到 O(2*(mn/2) ).
对于 Djikstra,最坏的情况基本保持不变。
但是,时间复杂度可能不是此处评估效率的最佳指标。
在实际情况下,例如在道路网络上寻找路线,双向方法类似于在两端生长一个圆盘,并在两个圆盘相遇时(几乎)停止,而单向方法则需要增长从头到尾一张光盘。
直觉上,如果 R 是开始和结束之间的直线距离,则直线搜索的成本将为 O(R2),而双向方法的成本为 O (2*(R/2)2),即快 2 倍。
this paper 很好地涵盖了主题。
无论如何,A* 基本上是可行的方法,除非您正在探索没有有效估计启发式的搜索 space。
我想知道双向 Dijkstra 算法的时间复杂度。
使用最小堆的普通 Dijkstra 有 O(n log n + m)
。我的猜测是双向保持不变。然而 Wikipedia 建议
一般而言,双向搜索的改进可以用 O-Notation 表示。
双向 Dijkstra 也可以计算吗?如何计算?
基本上,双向方法的成本是单向处理一半大小图的两倍。对于暴力指数算法,这是一个巨大的收益(从 O(mn) 到 O(2*(mn/2) ).
对于 Djikstra,最坏的情况基本保持不变。
但是,时间复杂度可能不是此处评估效率的最佳指标。
在实际情况下,例如在道路网络上寻找路线,双向方法类似于在两端生长一个圆盘,并在两个圆盘相遇时(几乎)停止,而单向方法则需要增长从头到尾一张光盘。
直觉上,如果 R 是开始和结束之间的直线距离,则直线搜索的成本将为 O(R2),而双向方法的成本为 O (2*(R/2)2),即快 2 倍。
this paper 很好地涵盖了主题。
无论如何,A* 基本上是可行的方法,除非您正在探索没有有效估计启发式的搜索 space。