用最小总距离连接所有点的算法

时间:2012-02-27 19:32:07

标签: algorithm

我有一组适用于每对点的点和距离函数。我希望将所有点连接在一起,并保持最小总距离。您知道我可以使用的现有算法吗?

每个点都可以链接到几个点,所以这不是通常的“推销员行程”问题:)

谢谢!

5 个答案:

答案 0 :(得分:8)

你想要的是Minimum spanning tree

生成一个最常用的两种算法是:

答案 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