调整最短路径算法

时间:2010-12-12 09:01:37

标签: python shortest-path dijkstra

对于数据结构&在大学的算法课我们必须实现一篇论文中提出的算法。可以找到该论文here。 所以我完全实现了算法,但仍然留下了一些错误(但这并不是我问这个问题的原因,如果你想看看我到目前为止如何实现它,你可以找到它here

我在Stackoverflow上提出问题的真正原因是作业的第二部分:我们必须尝试使算法更好。我有几个方面的想法,但它们在理论上听起来都不错,但在实践中它们并没有真正做好:

  • 在源节点和结束节点之间画一条线,搜索最靠近该线中间的节点,并递归地将“路径”划分为2。基础案例将是一个较小的图表,单个Dijkstra将进行计算。这实际上并不是对当前算法的调整,但有些人认为很明显这不会给出最佳解决方案。
  • 尝试通过为指向结束节点的边缘赋予更高的优先级来为算法赋予一定的方向感。这也不是最佳的..

所以现在我完全没有想法,并希望这里有人可以给我一些可能的调整提示。它并没有真正改进算法​​,我认为他们要求我们这样做的第一个原因是我们不仅仅是从纸上实现算法而不知道它背后的原因。

(如果Stackoverflow不是提出这个问题的正确位置,我很抱歉:))

算法的简短描述: 该算法试图选择哪些节点看起来很有希望。承诺我的意思是他们很有可能躺在最短的路上。节点的前景如何是它的“覆盖面”。路径上的顶点的范围是它到开始和结束的距离的最小值。图中顶点的范围是所有最短路径上顶点到达的最大值。 为了最终确定是否在Dijkstra算法中将节点添加到优先级队列,添加了test()函数。测试返回true(如果图中顶点的范围大于或等于从原点到v的路径的重量,将时间v插入优先级队列中)或(顶点的范围在图形大于或等于从v到末端顶点的欧氏距离。

Harm De Weirdt

1 个答案:

答案 0 :(得分:2)

在这样的情况下你最好的选择是像研究员一样思考:一般的研究和计算机科学研究专门关于渐进式改进,一个人表明他们可以使用Dijkstra算法然后他们或其他人更快地计算某些东西,表明他们可以使用A *更快地计算同样的东西。这是一系列小步骤。

也就是说,寻找改进论文中提出的算法的最佳方法是在未来的方向部分。本文为您提供了一些方向,但在这种情况下,您的金矿位于第5和第6部分。作者承认采用不同的可能方法有多个地方。尝试研究其中的一些方法,这应该会导致您对算法的可能改进,或者至少是一个可论证的算法。 祝你好运!