给定一组具有经度和纬度的Y点(位置),跨越一组唯一X点的最短路径是什么?
我在设计数据库时遇到的算法问题。不确定如何继续或是否有一个优雅的解决方案来解决这个问题。请帮忙!谢谢!
编辑:这不是旅行推销员问题,它不是访问所有位置的最短路径,而是任何跨越X点的唯一集合。
例如,如果我们有2000个位置,那么访问任何10个位置的最短路径是什么?
与整体Y相比,X的大小非常小。
答案 0 :(得分:1)
我会将我的数据放入R* Tree,然后在其上运行DBSCAN算法,将其分解为群集O(n * lg(n))。一旦点聚集,您就可以找到与您想要找到之间最短路径的点数最接近的聚类。既然你已经将所有内容都分解为10个点,那么你可以选择两个选项:解决Traveling Salesman Problem得到慢速O(n!)和精确的点,或者取最左边的点并获得最短路径使用Dijkstra's algorithm到最右边的点,这比O(E + V * log(V))要快得多,但没有给出最佳结果。
修改<!/强>
正如下面的评论中使用Dijkstra算法所指出的,这将导致O(n!+ V * log(V)),因为两点之间的任何路径都是边缘。使用Held-Karp算法解决运行O(n ^ 2 * 2 ^ n)的TSP会更快