我有一组坐标,我将从一个位置的地址中提取。 现在,我的任务是为这些点生成最佳路径。 我怎样才能完成这项任务?我已经看到了为两点生成路线的例子。但是当有多个目的地被覆盖时,我无法想象它会在更大的范围内。 我正在为Android应用程序使用此功能。
答案 0 :(得分:0)
如果你必须以特定的顺序访问它们,问题可以减少到解决两点的路径:简单地用相邻的坐标对解决问题,然后将路径拼接在一起连接起点到终点分。
如果你必须以任何顺序访问它们并优化行进的距离,那么你正在解决事实上的traveling salesman problem NP-Hard。唯一确切的解决方案是尝试所有排列,事实上,它与之前的情况类似,但是对于大量的点集实践将花费太多时间。首先,解决每对点的最短路径,仅保留距离以节省内存。这将需要n(n-1)/ 2次操作。接下来,生成坐标集的每个排列,并使用先前计算的数据计算与它们相关联的路径。具有最小距离的置换(以及与之相关的路径)将是您的最佳序列。使用第一段中提到的方法再次生成路径。
算法的第一步可能看起来很耗时,但实际上它是非多项式的第二步。有一些运行速度更快的非精确解决方案,但它们的可靠性各不相同。您将不得不使用反复试验来确定它们是否适合您的申请。
答案 1 :(得分:0)
这是一个“寻路”或“路由”问题:
http://en.wikipedia.org/wiki/Pathfinding
它常常面对Dijikstra的算法:
http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
或其泛化称为“A *算法”:
http://en.wikipedia.org/wiki/A-star_algorithm
最近几年,这些东西已演变成“收缩层次结构”算法:
http://en.wikipedia.org/wiki/Contraction_hierarchies
更快,更有效率。
那里有一些寻路/路由引擎。最好的一个可以说是开源路由机:
你可以在那里找到更多的引擎。只是谷歌周围的“地图路由”或“寻路”。
通常,引擎是一个(RESTful)Web服务,您必须通过Net访问,而不是可以嵌入Java / Android项目的库。