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

问题描述 投票:1回答:2

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

例如,在1-D情况下,我有:A = [4 1 1.5]; B = [4 1.2 0];如果算法首先匹配最近的对(如this),则可以返回对[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点。

谢谢你的帮助!

matlab nearest-neighbor
2个回答
1
投票

感谢大家的意见!尤其是@jodag将此识别为分配问题,将匈牙利算法作为解决方案,并提供指向Matlab implementation的链接。

这似乎是有效的,至少对于少量的颗粒。如果我陷入困境,我会尝试划分搜索区域。


0
投票

我不知道你是否需要一个限于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中搜索壁橱节点N是节点的数量

假设你有两组A和B都包含N个节点

索引A和B的成本为O(N log(N))和O(N log(N))

选择点我在A你在RTree(B)搜索你找到点j。存储d1(i和j之间的距离)(搜索成本O(log(N))

在B中搜索点j你在RTree(A)中搜索如果你找到了点i然后你得到了你的匹配[我在A中与j在B中]如果你得到节点k然后计算距离d2

如果d2 <d1你的匹配是[在A中的k与B中的j],否则你的匹配是[i在A中与j在B中]

为所有N点做到这一点

总成本为O(N log(N))

© www.soinside.com 2019 - 2024. All rights reserved.