簡體   English   中英

在兩組中找到一對最接近的點的智能,快速方法是什么?

[英]What would be smart and fast way to find a pair of closest points in two sets?

例如,我有兩個要點列表:

List<Point2D> a;
List<Point2D> b;

找到這樣的ij的最佳方法是什么,從而使a.get(i).distance(b.get(j))最小?

顯而易見的解決方案是蠻力-計算從a中的每個點到ba每個點的距離,並使該對保持最短的距離。 但是此算法為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM