2
A
和B
分別是一組m
和n
點,其中m<=n
。我想從B
中找到一組m
獨特點,名爲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)
最近點的集合)是差不多的C
除了其重複點。那麼如何減少計算時間?