分治策略之最近点对问题
问题:在平面给定N个点,求点对间最近距离。
分析:我们知道直线上找出2个最近的点,时间复杂度是O(NlogN),平面上比较所有的点对,直观上我们可以知道时间复杂度是O(N^2)。思考一下,当N非常大的时候,那不是得运算很久,有没有快速算法呢?我们采用分治策越,N个点我们不会做,我们进行Divide,分成两个子问题,N/2个点,依次进行下去。在子问题求出最小解,再回头进行Combine。求解程序如下:
%INPUT: x: 点的x坐标 y :点的y坐标
%OUTPUT: result:min_euclidean distance
function [ result ] = Least_Euclidean_Distance( x,y )
if( length(x)==2 )%只有两个点
result=sqrt( (x(1)-x(2))^