两组点之间的最佳匹配
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 也以正确的方式回复)以上是关于两组点之间的最佳匹配的主要内容,如果未能解决你的问题,请参考以下文章