寻找坐标之间最短路径的算法

时间:2011-06-27 06:57:20

标签: algorithm a-star

AStar的工作基于线,AFAIK。

在我的情况下,我们有地理坐标,我可以获得航点之间的直线距离。但我想知道它的近似程度如何? “实际上重要的”实际距离可以是不同的。

实施例。 假设A和B在同一平面上,并且与目标点等距,如果我们考虑A和目标点之间的直线,B和目标点。

A和目标点之间的“公路”距离可能大于或小于B.但由于AStar基于直线工作,它将返回两条路线最短。

这是对的吗?

如果是,那么应该考虑哪个算法,如果我们想要基于实际距离的结果,单位为Km / m?

如果不是,那么我错过了什么?

3 个答案:

答案 0 :(得分:3)

默认情况下,A-star在边缘具有非负权重的图表上运行。没有限制边缘必须是直线。让A-star与之说Dijkstra's algorithm不同的是,它使用一种启发式方法,首先搜索图形的节点。在嵌入欧几里得空间的图形的情况下,这种启发式通常被选择为节点之间的欧几里德距离,尽管还有其他可能性。

答案 1 :(得分:2)

您可以使用加权图表对情况进行建模,其中顶点是您考虑的点,并且它们之间的边的权重等于相应点之间的道路距离。然后,您可以使用Dijkstra's algorithm 来查找点之间的最短距离。

例如,如果平面上有A点和B点,并且它们之间的道路距离等于C,那么在图形中,您将有顶点[A]和[B]以及它们之间的长度为C的边缘:

[A]---C---[B]

答案 2 :(得分:2)

好的,因为你让我发一个答案......

在您了解A *之前,您必须先了解Dijkstra's algorithm。给定图(一组节点和节点之间的边)和每个边的(正)“距离”(例如道路距离),Dijkstra算法给出某个源节点和每个目的节点之间的最短距离。例如,在您的图表中,节点可能是道路交叉点,边缘可能是道路,您放在边缘上的重量/距离可能是该道路的长度,或者遍历它的时间,或者不管。

请理解:Dijkstra的算法总是根据您放在边缘的重量给出正确的距离。实际上,该图甚至不需要嵌入平面中,即,首先可能没有“直线距离”的概念。它可以是任意图形。

现在,A *可以被认为是加速Dijkstra算法的特定启发式算法。您可以将其视为使用启发式来确定图中节点的顺序。

形式上:你有一个图G,其中有两个节点s和t,你想要找到s和t之间的距离d(s,t)。 (距离是根据图表,例如根据示例中的道路距离。)要找到d(s,t),在A *中使用启发函数h(x),其满足h(x)≤d(x ,T)。对于实例(只有一种可能性),您可以选择h(x)作为从x到t的直线距离。 h(x)越好作为d(x,t)的估计,A *算法运行得越快,但h的选择只影响速度,而不是答案:它总是会给出最短的距离。 d,而不是h。

因此,为了找到道路距离s到t,只需将d(u,v)设置为每对节点u和v的道路距离,它们之间有道路,运行A *,你会发现d(s,t)你想要的。

相关问题