最近点对算法
问题描述
二维平面上n个点,求最近的两点距离?
如例:
P1 (1,0)、P2 (2,4)、P3 (3,4) P4 (3,5)、P5 (3,1)、P6 (5,6) P7 (6,3)、P8 (7,1)、P9 (7,2)
最短距离点对有3对,(P2,P3)、(P3,P4)、(P8,P9),最短距离为1.
方法一:蛮力法
-
两遍循环,枚举任意两点P[i] 、P[j] (i ≠ j) ,求出距离,一一比较,得到最短距离mind.
-
时间复杂度:两重循环, O ( n 2 ) O(n^2) O(n2).
暴力法:ClosePoint(P[],n) /* *输入: 点{x,y}数组P及个数n *输出: 输出最近的两点距离 */ if n < 2 then //无点对 return INF endif if n = 2 then //返回仅有两点距离 return dist{ P[0],P[1]} endif mind <-- INF // 标记:最短距离 for i = 1 to n-1 do for j = i + 1 to n do mind <-- min{ dist{ P[i],P[j]