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?
For every point of list
ayou can find the nearest point from listbas 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).