问题描述:
在二维平面内给定n个点,寻找这些点中举例最近的两个点;
思路:
我们发现如果要将全部的点两两比较,则最起码需要O(n^2),因此我们的思路是如果要求与某个点A距离最近的点,则需要缩小范围,不用每个点都比较;
我们需要使用分治法来求解;
首先我们需要定义一些变量:
Px:对于点按照x坐标排序;
Py:对于点按照y坐标排序;
Qx:对于左部分的点按照x坐标排序;
Qy:对于部分的点按照y坐标排序;
Rx:对于右部分的点按照x坐标排序;
Ry:对于右部分的点按照y坐标排序;
递归的出口就是如果只有三个点以内,则直接两两计算距离,并返回最小距离;
我们可以从上面清晰的看出:每次将问题分割成两个小问题,因此T(n) = 2*T(n/2)+f(n);