如何找到一组独特的最接近点?

时间:2017-01-30 13:09:52

标签: algorithm matlab geometry

AB分别是mn点,m<=n。我想从m找到一组名为B的{​​{1}} 唯一点,其中所有C对之间的距离总和为最小的。

要在没有唯一性约束的情况下解决这个问题,我可以找到从[A(i), C(i)]B中每个点的最近点:

A

m = 5; n = 8; dim = 2; A = rand(m, dim); B = rand(n, dim); D = pdist2(A, B); [~, I] = min(D, [], 2); C2 = B(I, :); 中可能存在B的重复元素。现在第一个解决方案是强力搜索:

C

我认为minSumD = inf; allCombs = nchoosek(1:n, m); for i = 1:size(allCombs, 1) allPerms = perms(allCombs(i, :)); for j = 1:size(allPerms, 1) ind = sub2ind([m n], 1:m, allPerms(j, :)); sumD = sum(D(ind)); if sumD<minSumD minSumD = sumD; I = allPerms(j, :); end end end C = B(I, :); (每个C2的最接近点集)除了重复点之外几乎相同A(i)。那么如何减少计算时间?

1 个答案:

答案 0 :(得分:3)

使用Hungarian algorithm的变体,它计算最小/最大权重完美匹配。为未使用的B点创建n-m虚拟点以匹配(或者,如果您愿意付出更多努力,则将匈牙利算法机制调整为非方形矩阵)。