我知道Dijkstra的算法实际上是用斐波那契堆实现的。但是它是否也可以使用红黑树实现,并且仍然具有O(m log n)的最坏情况运行时间?使用红/黑树实现Dijkstra的最短路径算法?
2
A
回答
7
对于初学者来说,实际上看到Dijkstra算法用斐波那契堆实现是很少见的。尽管斐波纳契堆给出了很好的渐近性(O(m + n log n)),但实际上它具有如此高的常数因子,以致其他类型的堆更有效。
至于你的问题 - 是的,你可以使用红黑树作为优先级队列来获得O(m log n)性能。这是有效的,因为您可以在O(log n)时间的红黑树中找到最小元素,并在时间O(log n)上模拟树上的减键操作,方法是先执行删除,然后插入。但是,这可能不如使用标准二进制堆的效率高,因为红黑树具有更差的参考位置和更多的内存开销。更一般地说,每当你需要一个优先级队列时,你总是可以使用一个平衡的二叉搜索树,尽管通常这样做是矫枉过正的。
希望这会有所帮助!
2
我不会说Dijkstra的算法是用斐波那契堆实现的。事实上,任何堆都可以完成,尽管斐波那契在不同的操作中具有最好的分期复杂性(请记住,尽管这只显示在真的是巨大的图表)。再次使用红黑树会达到相同的计算复杂度,但会有更高的常量,因为使用红黑树更复杂。
该算法所需的只是能够从给定集合中获得最小元素。这就是堆的意思,因此它最适合这个问题。红黑树可以做很多其他的事情,因此更复杂,并在这种特殊情况下变得更糟糕。
相关问题
- 1. 使用Dijkstra算法的最短路径
- 2. AFP Dijkstra的最短路径算法
- 3. dijkstra的最短路径算法回溯?
- 4. Dijkstra找到最短路径的算法?
- 5. Dijkstra的最短路径算法修改
- 6. Dijkstra的算法最短路径
- 7. Dijkstra的最短路径算法问题
- 8. 做一个C++ 11 Dijkstra算法实现返回最短路径
- 9. sna:修改Dijkstra算法(最短路径)
- 10. Dijkstra算法寻找最短路径
- 11. 增量Dijkstra或最短路径算法?
- 12. 实现方法找到最短路径(Dijkstra算法)的被陷在环路
- 13. 使用Dijkstra算法的2d数组中的最短路径?
- 14. Dijkstra的最短路径,HackerRank
- 15. 使用Dijkstra的多条最短路径
- 16. 使用Dijkstra算法寻找最短路径
- 17. 最短路径Dijkstra Java
- 18. Neo4j 2.2.5 - Dijkstra最短路径
- 19. 如何限制最短路径 - dijkstra算法的最大代价?
- 20. Dijkstra算法计算N条最短路径
- 21. 如何返回n最佳最短路径(dijkstra算法)
- 22. 红黑树实现
- 23. Dijkstra的最短路径算法是行不通的
- 24. Dijkstra的算法 - 只有负成本的DAG最短路径
- 25. Dijkstra的算法不会生成最短路径?
- 26. Dijkstra std :: priority_queue的最短路径算法性能vs std :: set
- 27. Dijkstra的最短路径算法拉尔斯·沃格尔
- 28. 的Dijkstra最短路径算法无限循环
- 29. 的最短路径指数来,我被要求找出一种图形,其总的最短路径(使用Dijkstra算法)数量的节点(Dijkstra算法)
- 30. Dijkstra最短路径与最小步骤
请参阅http://www.cs.utexas.edu/users/shaikat/papers/TR-07-54.pdf了解如何有效实施它的实际方法。 – mmgp
看看这个相关的问题http://stackoverflow.com/q/14252582/194609 – Karussell