Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

closest pair algorithm

I am trying to understand the closest pair algorithm. I understand about dividing the set in half. But I am having trouble understanding how to recursively compute the closest pair. I understand recursion, but do not understand how to compute the closest pair by recursion. If you have (1,2)(1,11)(7,8) how would recursion work on these?

like image 336
Aaron Avatar asked Apr 22 '11 16:04

Aaron


People also ask

How do you find the closest pair of points algorithm?

Split-Conquer Method — Finding the Closest Pair The split conquer algorithm sorts the array by X coordinate, divides the sorted array into two, apply the algorithm recursively to the subarrays, and check whether or not there exists a pair with a shorter distance than that found in subarrays.

What is the closest pair explain the closest pair algorithm?

In this problem, a set of n points are given on the 2D plane. In this problem, we have to find the pair of points, whose distance is minimum. To solve this problem, we have to divide points into two halves, after that smallest distance between two points is calculated in a recursive way.

What is the basic operation of closest pair algorithm?

What is the basic operation of closest pair algorithm using brute force technique? b) Radius c) Area d) Manhattan distance Answer: a Explanation: The basic operation of closest pair algorithm is Euclidean distance and its formula is given by d=√(xi-xj)2+(yi-yj)2.

What do you mean by closest pair problem?

The closest pair of points problem or closest pair problem is a problem of computational geometry: given. points in metric space, find a pair of points with the smallest distance between them.


1 Answers

the basic idea of the algorithm is this.

You have a set of points P and you want to find the two points in P that have the shortest distance between them.

A simple brute-force approach would go through every pair in P, calculate the distance, and then take the one pair that has the shortest distance. This is an O(n²) algorithm.

However it is possible to better by the algorithm you are talking about. The idea is first to order all the points according to one of the coordinates, e.g. the x-coordinate. Now your set P is actually a sorted list of points, sorted by their x-coordinates. The algorithm takes now as its input not a set of points, but a sorted list of points. Let's call the algorithm ClosestPair(L), where L is the list of points given as the argument.

ClosestPair(L) is now implemented recursively as follows:

  1. Split the list L at its middle, obtaining Lleft and Lright.
  2. Recursively solve ClosestPair(Lleft) and ClosestPair(Lright). Let the corresponding shortest distances obtained by δleft and δright.
  3. Now we know that the shortest distance in the original set (represented by L) is either one of the two δs, or then it is a distance between a point in Lleft and a point in Lright.
  4. Se we need still to check if there is a shorter distance between two points from the left and right subdivision. The trick is that because we know the distance must be smaller than δleft and δright, it is enough to consider from both subdivisions points that are not farther than min(δleft, δright) from the dividing line (the x-coordinate you used to split the original list L). This optimization makes the procedure faster than the brute-force approach, in practice O(n log n).
like image 67
Antti Huima Avatar answered Oct 08 '22 14:10

Antti Huima