空间二维平面上n个点,找到其中距离最近的一对点
分治法思想:用中位线将二维平面尽可能的等分为两个点集,点集最好有一样的点数目
然后将问题分解为:从左边点集找最小min1,右边点集最小min2,然后再找两边的相互的最小
假如直接这样解相互的算法复杂度仍然是O(n2),跟穷尽法一样,得找到相互得规律,然后减少算法复杂度
如果存在相互中是最小的点,那么必定有dist<min(min1,min2)=alpha,这只是在一个小区间内成立的,仔细的研究这个区间,发现,区间大小在中位线左右alpha,上下alpha内,而这个区间最多会有6个点,也就是说每个点最多比对6个点就可以得到结果,这样最后的算法复杂度可以降到O(nlogn)
分治法可以用做一个解决问题的思路,比如赛程安排,也可以作为一种提高效率的方法,但是假如要提高效率,对于其中的步骤必须有好的解法才行,比如这个算法中的点的分析,还有比如矩阵strassen乘法的一次减少