将一组3D点映射到具有最小距离总和的另一组

时间:2009-03-09 14:31:55

标签: algorithm math mapping mathematical-optimization

给定两组三维点,即源集和目标集。每组上的点数是任意的(可以是零)。任务是为每个目标点分配一个或没有源点,以便所有距离的总和最小。如果源位置多于目标点,则忽略其他点。

这个问题有一个强力解决方案,但由于点数可能很大,所以不可行。我听说这个问题在2D中具有相同的设置大小很容易,但遗憾的是这些先决条件在这里没有给出。

我对近似和精确解决方案感兴趣。

编辑:哈哈,是的,我想这听起来像家庭作业。实际上,事实并非如此。我正在编写一个接收大量汽车位置的程序,我正试图将它们映射到各自的停车位。 :)

3 个答案:

答案 0 :(得分:3)

您可以解决此问题的一种方法是将待遇视为经典分配问题:http://en.wikipedia.org/wiki/Assignment_problem

您将点视为图形的顶点,边缘的权重是点之间的距离。因为最快的算法假设您正在寻找最大匹配(并且不是在您的情况下最小),并且权重是非负的,您可以将权重重新定义为例如:

weight(A, B) = bigNumber- distance(A,B)

其中bigNumber大于您的最长距离。

显然你最终得到了一个二分图。然后使用标准算法之一进行最大加权二分匹配(网上有大量资源,例如http://valis.cs.uiuc.edu/~sariel/teach/courses/473/notes/27_matchings_notes.pdf或维基百科概述:http://en.wikipedia.org/wiki/Perfect_matching#Maximum_bipartite_matchings)这样你最终会得到一个O(NM) max(N,M))算法,其中N和M是你的点集的大小。

答案 1 :(得分:1)

虽然我对你的问题没有真正的答案,但我可以建议你研究以下主题。 (我对此知之甚少,但之前在Stack Overflow上遇到过它。)

希望这有点帮助。

答案 2 :(得分:1)

离开我的头顶,进行空间排序,然后进行模拟退火。

网格空间&将集合分类为空间单元格。

解决每个单元格内的O(NM)问题,然后解决单元格区域内的问题,以此类推,以获得试验匹配。

最后,运行大量的模拟退火循环,随机改变匹配,以便探索附近的空间。

这是启发式的,给你一个很好的答案,虽然不一定是最好的,并且由于最初的网格排序,它应该是相当有效的。