我是新手(计算复杂度理论的新手),我有一个问题。
假设我们有“旅行推销员问题”,Dijkstra算法的以下应用程序能否解决?
从起点开始,我们计算两点之间的最短距离。我们到了重点。我们删除源点。然后我们计算距当前点的下一个最短距离点,依此类推...
在移动下一个可用的最短距离点时,每一步都会使图形变小。直到我们访问所有要点。
这将解决旅行商的问题。
我是新手(计算复杂度理论的新手),我有一个问题。
假设我们有“旅行推销员问题”,Dijkstra算法的以下应用程序能否解决?
从起点开始,我们计算两点之间的最短距离。我们到了重点。我们删除源点。然后我们计算距当前点的下一个最短距离点,依此类推...
在移动下一个可用的最短距离点时,每一步都会使图形变小。直到我们访问所有要点。
这将解决旅行商的问题。
Answers:
我不知道这里没有人会注意到在这种情况下完全不需要Dijkstra算法的应用吗?您可以通过简单地选择最近的节点来实现此贪婪算法,这就是已知的先验。Dijkstra的算法用于发现路径,但是每次只需要执行一个步骤。这显然没有找到TSP的最佳解决方案,但是许多非常好的方法也没有找到它。用于TSP的所有最佳解决方案查找器在计算方面都非常苛刻。
答案是否定的,这不是解决TSP问题的好方法。一个很好的计数器示例是所有点都在一条线上,如下所示:
--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4
使用Dijsktra的算法,将使可怜的推销员从点0开始,首先是1,然后是2,然后是3等。这不是最佳的。
希望能有所帮助。看一看史蒂芬·S·斯基耶纳(Steven S. Skiena)出色著作《算法设计》的第一章,它更详细地解释了此示例。
TSP问题不是在两点之间找到最短的路径,而是要在所有最佳点之间建立路由。当您拥有最佳路线时,可以使用Dijsktra查找路线中每个点之间的最短路径。