如何在没有预先定义的起点或终点的情况下找到图中所有节点之间的最短路径?

时间:2012-10-26 01:23:30

标签: google-maps graph graph-theory shortest-path

我想得到的是:连接图表中所有点的路径,但无需告诉算法从哪里开始以及在哪里完成。

需要在google-maps api中使用行车方向,但不需要设置起点或终点。

这不是TSP问题,因为我没有“开始城市”,也没有必须回到“开始城市”。

如本问题所述:Find the shortest path in a graph which visits certain nodes, 我可以使用排列,因为我有几个节点,但问题是我需要分析这几个节点的几个组所以我希望这个函数能耗时少。

注意:我不是在寻找最小的Spaning树,因为它不是:https://math.stackexchange.com/questions/130863/connecting-all-points-on-a-plane-with-shortest-path-possible 我想要一条道路告诉我,如果你先到这里,然后超越,然后超越,最后在那里,你将节省燃气。

问题:有没有可以帮助我的图书馆?或者这是一个已经确切答案的已知问题?我怎么能解决它?

4 个答案:

答案 0 :(得分:1)

听起来你想要一个所有对最短路径算法。这是一类最短路径算法,试图计算图中每对顶点之间的最短路径(或最短路径的长度)。

这是一个众所周知的问题,solutions exist。这里有一些reading material描述了其他可能的算法。对于您选择的语言和开发环境,可能会有Johnson算法的实现。

请记住,从计算上讲,这是一个代价高昂的问题。

答案 1 :(得分:0)

如果我理解正确,您希望1个路由访问所有节点,没有预定义的开始/结束,并且您希望它最小化。一个可能的解决方案可能是稍微修改你的图形,以允许旅行推销员算法完成一次完整的旅程。

您从图表开始,添加1个额外节点E。将该节点连接到图中的所有其他节点,并将所有这些边的成本设置为一个非常高的常量M。然后,您在该图表上释放一个旅行推销员算法,该算法将为您提供从P开始的路径E,传递所有节点并返回E。如果您将P中连接E的2条边移到路径的其余部分,您将拥有所需内容。

快速直观地证明它确实是您正在寻找的:假设它不是连接所有节点的最便宜的方式。让我们称之为假设更好的路径QQP都会连接原始图表中的所有节点。 Q的结束点为AB。这两个都将连接到节点E,边缘为成本M。如果您将这两条边添加到Q,您将获得比P更好的TSP解决方案,这是不可能的,因为P是最好的。

答案 2 :(得分:0)

当您使用谷歌地图时,您的特定TSP实例可能会满足三角形不等式。 你真的在谈论距离或旅行时间吗?

在距离的情况下: 尝试谷歌搜索:"三角旅行推销员问题"

重要提示:结果是保证超出界限的最佳结果非常接近,并非总是最好。

答案 3 :(得分:0)

一种方法是使用(自组织) kohonen网络 假设您在地图上有 n 个城市(在任何维度上都相同) 取一串 n 连接的“神经元”并将其随机放置在地图上。 然后你做几次迭代,一次迭代包含:

  1. 选择任何城市。 (例如,以有序的方式通过它们)
  2. 确定“最近的”神经元,称之为 x 。 (例如欧几里德距离)
  3. 将此 x 移近城市(例如,将神经元的方向向量移至城市,并将其乘以学习率0
  4. 将这个神经元的邻居移向这个城市(但不到3个,依赖于距离邻居到“当前最近的”神经元 x 的距离)
  5. 可以在步骤2,3和4中选择各种功能。

    另请注意,这可能不会提供全局最短路径,因为它取决于起始链的位置和其他不同的东西。为此,可以考虑使用不同的起始条件进行多次运行,或者(根据问题)可以帮助预先知识。

    我希望这有助于为更多读者完成这个问题...