最近对问题

来源:互联网 发布:java语言程序设计基础篇 编辑:程序博客网 时间:2024/04/30 18:32

1.蛮力法求最近对问题:

1) 基本思想:

分别计算每一对点之间的距离,然后找出距离最小的那一对,为了避免对同一对点计算两次距离,只考虑的那些点对。

2)复杂度分析:

对于此算法,主要就是算两个点的欧几里得距离。注意到在求欧几里得距离时,避免了求平方根操作,其原因是:如果被开方的数越小,则它的平方根也越小。所以复杂度就是求平方,求执行次数为:n的平方

;即时间复杂度为n的平方

2.分治法求最近对问题:

1)基本思想:

用分治法解决最近点对问题,就是将一个问题分解两个子问题,然后递归处理子问题,然后合并。可能两个点在每个子问题中,也可能两个点分别在两个子问题中,就这两种情况。则基本过程为:找一条中垂线(坐位集合坐标的中位数)把个元素分成左右两部分元素,然后分别求得两边的最短距离,,然后取两者中的最小者记为,在中线两边分别取的距离,记录该距离范围内点的个数,中线左边有个元素,右边有个元素,分别将两边的点按y坐标升序排列,在左边集合中每一个点,找右边集合的点,找到与之距离小于的点,更新最短距离,直到循环结束,即可求出最短距离。

2)复杂度分析:

由以上分析:合并子问题的解的时间。进而可得分治法求最近对问题的时间复杂度为:nlog2n