1.问题
用分治法解最近对问题
在一个包含n个点的集合中,找出距离最近的两个点。
2.解析
当2<=n<=3,通过蛮力算法求解;当n>3,对所有的点按照坐标从小到大排序,利用点集在坐标方向的中位数m,在该处做一条垂线,将点集分为n/2和n/2两个子集P1和Pr,对左右两个部分分别求最近点对的距离d,然后进行合并。最近距离不一定存在于两个集合中,可能一个点在P1,一个点在Pr,而这两点间距离小于d。
3.设计
4.分析
时间复杂度:O(nlogn)
5.源码
https://github.com/zyzyzyf/sffx/blob/main/code/%E4%BD%9C%E4%B8%9A5/closePair.cpp