1.问题
对于平面上给定的N个点,找出N个点钟距离最近的两个点。
2.解析
1.暴力法:
每一个点都遍历平面上的所有点,计算出两点之间的距离,然后再找出所有数据中d最短的那两个点,复杂度为O(N^2)。思路简单,但是效率低下。
2.分治法:
将平面中的点以横坐标的中位数m作为分割线,将所有的点分割成两部分,并不断递归。
计算每块小区域中点的最短距离dX,并找出其中的最短距离d。由此完成了第一部分的问题,但如果最近对分布在两个区域中呢?我们需要另外讨论。
如该图片,由于之前找出了最小值d,只有在阴影区域的点才需要我们重新去判断,于是将阴影中的点做升序排序,在y坐标属于【y,y+d】的区域内找出最短距离对,距离为d3
返回min{d,d3}。
3.设计
if n=2 return d
if n=