问题
求出平面上n个点之间的最小距离
分治法的思想
把问题先分解为若干个规模较小的子问题,(同时要保证每个子问题之间是相互独立的),解出子问题(递归),最后合并
一维
//就是求一条直线上所有点之间的最小距离
step1
用m将集合划分为两个子集S1,S2,使得S1和S2中大约含有n/2个数字
step2
分别递归地找出S1和S2中最接近的点
(图中是a1&a2跟b1&b2),取里面较小的距离d
step3
找到两个集合中最近的点c1&c2,距离为x
推导到二维的分析
// 合并时的处理是影响时间复杂度的关键
假设c1c2之间的距离是最小的,比d小,那么 c 1 ∈ ( m − d , m ] , c 2 ∈ ( m , m + d ] c1∈(m-d,m],c2∈(m,m+d] c1