【发布时间】:2020-11-17 14:11:43
【问题描述】:
我遇到了标题中描述的问题,我正在使用 MATLAB 2020。
我有 2 组 2D 点,我想找到这两个点(每个点来自不同的集合)
与所有其他点的距离最小min(distance(pi,pj))
我做了一些研究(谷歌)并找到了这篇文章:
“计算两个有限平面集之间最小距离的最优算法”
在此网页中:
What is the fastest algorithm to calculate the minimum distance between two sets of points?
我尝试使用 MATLAB 和 Garbriel 图的代码(我在 google 中找到)来实现该算法 这里:
http://matgeom.sourceforge.net/doc/api/matGeom/graphs/gabrielGraph.html
问题是当我运行代码时,假设是算法与“蛮力算法”(两个循环),蛮力总是更快......无论我使用多少点,它速度更快......这与逻辑(我的)和上面提到的文章形成鲜明对比。
当我检查代码行的执行时间时,我发现该行
dist = dist + (repmat(p1(:,i), [1 n2])-repmat(p2(:,i)', [n1 1])).^2;
在:
minDistancePoints(p1, varargin)
是“问题” 和建议? 谢谢
附言 让
set1=random(100,2)
set2=random(100,2)
我想找到 set1 中的 point1 和 set2 中的 point2 与所有其他点的距离最小。
【问题讨论】:
-
你能分享一个例子吗?如果您的每组 2D 点都有 1 个点,Bruteforce 会更快。如果您有 100 万个点,替代方案可能会更快。也许每种方法的实现都不是最理想的。没有完整的例子我们无法知道
-
Gabriel 图例程 (1) 似乎自己计算所有对距离 (2) 调用
delaunayn。您应该直接在delaunayn之上构建。 -
你试过dsearchn吗?