查找两组点之间最近的点对,优化求和差值



>假设我有两个包含点坐标的点矩阵 A 和 B。我想找到最小化点对之间欧几里得差和的点对。

例如,在一维情况下,我有: A = [4 1 1.5];B = [4 1.2 0]; 如果算法首先匹配最接近的对(如这个(,则可以返回对 [4 4]、[1 1.2]、[1.5 0]。这将给出 1.5+.2+0 = 1.7 的总差值。

我正在寻找一种可以最小化货币对之间总差异的解决方案,它给出了解决方案 [4 4]、[1 0]、[1.5 1.2],总差异为 .3+1+0 = 1.3。

这适用于 3D 中的 10k-100k 点。

感谢您的帮助!

感谢大家的评论!特别是@jodag将其识别为赋值问题,提供匈牙利算法作为解决方案,并提供指向 Matlab 实现的链接。

这似乎正在起作用,至少对于少量的粒子。如果我陷入困境,我会尝试划分搜索区域。

我不知道你是否需要一个仅限于 Matlab 的答案(因为我还没有看到任何 Matlab 函数来做空间索引(,但在这里。

您可以使用 https://www.boost.org/doc/libs/1_68_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html 来"对节点进行空间索引"(https://en.wikipedia.org/wiki/Spatial_database#Spatial_index(

目的是能够在 O(log(N(( N 中搜索壁橱节点,即节点数

假设您的两个集合 A 和 B 都包含 N 个节点

索引 A 和 B 的成本为

O(N log(N(( 和 O(N log(N(( 在 A 中选取点 i,在 RTree(B( 中搜索,找到点 j. 存储 d1(i 和 j 之间的距离((搜索成本 O(log(N((

在 B 中选取点 j,在 RTree(A( 中搜索,如果您找到点 i,那么您已经得到了匹配 [A 中的 i 与 B 中的 j] 如果您得到节点 k,则计算距离 d2

如果 d2

对所有 N 点执行此操作

总体成本在 O(N log(N((

最新更新