我有一组适用于每对点的点和距离函数。我希望将所有点连接在一起,并保持最小总距离。您知道我可以使用的现有算法吗?
每个点都可以链接到几个点,所以这不是通常的“推销员行程”问题:)
谢谢!
答案 0 :(得分:8)
答案 1 :(得分:7)
正如其他人所说,minimum spanning tree(MST)将允许您形成连接所有点的最小距离子图。
您首先需要为您的数据集构建图表。要有效地形成无向图,您可以计算点集的Delaunay triangulation。从三角测量到图形的转换是相当文字的 - 三角测量中的任何边缘也是图中的边缘,由三角剖分边缘的长度加权。
MST(Prim's / Kruskal的O(E*log(V))
)和Delaunay三角测量(Divide and Conquer O(V*log(V))
)阶段都有高效的算法,因此可以采用有效的整体方法。
希望这有帮助。
答案 2 :(得分:2)
您正在寻找的算法称为最小生成树。找到水,电话或电网的最低成本很有用。有Prim的算法或Kruskal算法。 IMO Prim的算法更容易理解。
答案 3 :(得分:0)
此处http://en.wikipedia.org/wiki/Minimum_spanning_tree您可以找到有关最小生成树的更多信息,因此您可以对其进行调整以解决问题。
答案 4 :(得分:0)
看看Dijkstra的算法:
Dijkstra算法由荷兰计算机科学家Edsger Dijkstra于1956年构思并于1959年发布,是一种图搜索算法,它解决了具有非负边缘路径成本的图的单源最短路径问题,从而生成最短路径树。该算法通常用于路由和其他图算法中的子程序。
http://en.wikipedia.org/wiki/Dijkstra“s_algorithm