计算几何-最近点对问题

计算几何-最近点对问题

问题描述

最近点对问题是指求解平面点集中距离最近的两个点间的问题。

蛮力求解法

对平面中的所有点两两计算距离,然后通过比较获取最小距离。在具体的计算过程,可以通过一定的策略优化,比如避免计算A与B的距离和B与A的距离这样的重复计算,计算距离不用开方等。但总体的时间复杂度为O(N^2)。

线扫描算法

首先将点集按照x坐标值排序,然后按照从左向右进行线扫描。

假设我们已经遍历过1:N-1,h是1到N-1个点中最近点对的距离,对于第N个点,只有与第N个点的距离小于或者等于h的点我们才需要考虑,其余的点都可以过滤掉,所以只需考虑x坐标位于[x(N)-h, x(N)]范围, y坐标位于[y(N)-h, y(N)+h]范围内的点,计算该矩形范围内点距离第N个点的距离,并更新点对的最小距离。依此遍历点集所有元素,求解最近点对。

算法的时间复杂度O(NlogN).

计算的流程图如下:

代码实现(c++版)

发布于 2019-07-25 08:30