两组点之间的最佳匹配

Posted

技术标签:

【中文标题】两组点之间的最佳匹配【英文标题】:Best match between two sets of points 【发布时间】:2019-03-01 04:47:07 【问题描述】:

我有两个点列表,我们称它们为 L1( P1(x1, y1 ), ... Pn(xn, yn)) 和 L2 (P'1(x'1, y'1), ... P'n(x 'n, y'n))。

我的任务是找到它们的点之间的最佳匹配,以最小化它们的距离之和。

关于某种算法的任何线索?这两个列表包含大约。 200-300 分。

谢谢和最好的。

【问题讨论】:

en.wikipedia.org/wiki/Hungarian_algorithm 您能否详细说明如何定义best match?我们的任务是否包括为 L1 中的每个点从列表 L2 中选择一个点? 假设每个列表中有 3 个点:P1、P2、P3 和 P'1、P'2、P'3。您可以通过以下方式匹配它们:P1-P'1、P2-P'2、P3-P'3 或 P1-P'2、P2-P'1、P3-P'3 等...找到最好的匹配使得这对距离的总和最小。正如 SaiBot 所说,匈牙利算法是一种选择。我在看看 【参考方案1】:

如果您的问题的用例涉及将列表 L1 中存在的任何点与列表 L2 中的某个点相匹配,那么 Hungarian Algorithm 将用作完美契合。

与您的匈牙利矩阵相对应的权重将是为行注释的点与列之间的距离。优化的匈牙利算法的总体运行时间为 O(n3),这将很适合您给定的 n = 300

约束

一个很好的教程涵盖了匈牙利算法的思想和实现是https://www.topcoder.com/community/competitive-programming/tutorials/assignment-problem-and-hungarian-algorithm/

如果不是匈牙利算法,您还可以将给定问题转换为max-flow-min-cost 问题 - 我现在将省略其细节,但如果需要可以讨论。

【讨论】:

就是这样。谢谢,我会尝试建立自己的 H.A.执行。我会检查你的答案是否正确(SaiBot 也以正确的方式回复)

以上是关于两组点之间的最佳匹配的主要内容,如果未能解决你的问题,请参考以下文章

APPLY 运算符 - 它如何决定哪些行是两组之间的匹配?

在两组点上找到平移和缩放以获得距离的最小二乘误差?

什么算法将集合 A 中的每个元素映射到集合 B 中的最佳匹配?

怎么求这两组点的数学关系,也可以说是求俩个坐标系的关系?

(转)二分图的最大匹配完美匹配和匈牙利算法

二分图的最大匹配完美匹配和匈牙利算法