[英]What would be smart and fast way to find a pair of closest points in two sets?
例如,我有兩個要點列表:
List<Point2D> a;
List<Point2D> b;
找到這樣的i
和j
的最佳方法是什么,從而使a.get(i).distance(b.get(j))
最小?
顯而易見的解決方案是蠻力-計算從a
中的每個點到b
中a
每個點的距離,並使該對保持最短的距離。 但是此算法為O(n^2)
,效果不好。 有更好的方法嗎?
您可以將列表之一放在四叉樹或其他空間索引中,以快速進行每次查找。
或者,您可以將所有數據放入具有空間索引功能的數據庫中。
對於列表a
每個點,您可以按照此答案中的描述從列表b
找到最近的點。 時間復雜度為O((M + N)log M)。 N = | A |,M = | B |。
然后你只需在搜索點a
,具有近鄰。 時間復雜度為O(N)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.