一、问题描述
对于平面上的一些点对:p1, p2, …,pn, 找出两个点,使得这两个点之间的距离最小;
解题思路:
- 首先对所有的点按照x坐标排序, 然后按x坐标在pivot处将点集二分为坐标点集S1和右边点集S2;
- 先递归求得左边点集的最小距离min_left, 然后递归求得右边点集的最小距离min_right; 比较左右点集的最小距离min = min(min_left, min_right);
- 此外, 靠近pivot左右min的区域(pivot-min, pivot+min)的区域,存在点对距离小于min,并且一个点在pivot左侧, 一个点在pivot右侧;
二、优化第三步骤
对于第三步骤中, 求解(pivot-min, pivot+min)区域中的点对, 假设其中有N个点,暴力法计算点对时间是O(n^2), 不可取;
计算区域[pivot-min, pivot+min] 的点对距离可以采用下面优化:
1) 由于点对点两个点一个在左边S_left = [pivot-min, pivot],一个在右边S_right = [pivo