Reputation: 27260
For example, I have two lists of points:
List<Point2D> a;
List<Point2D> b;
What would be the best way to find such i
and j
, so that a.get(i).distance(b.get(j))
is minimal?
The obvious solution is brute-force - calculate distance from each point in a
to each point in b
, keep the pair with shortest distance. But this algorithm is O(n^2)
, which is not good. Is there some better approach?
Upvotes: 4
Views: 752
Reputation: 24677
For every point of list a
you can find the nearest point from list b
as described in this answer. Time complexity is O((M+N) log M). N = |A|, M = |B|.
Then you just search the point in a
, having the nearest neighbor. Time complexity is O(N).
Upvotes: 3
Reputation: 47068
You can put one of the lists in a quad tree or some other spatial index to make each lookup fast.
As an alternative you could put all your data in a database with spatial index capabilites.
Upvotes: 3