最近点对问题(蛮力法&分治算法)

1. 问题描述:

问题: 在k-维空间中的n个点中,找距离最近的点对;问题示意图如下:
在这里插入图片描述

2. 题解

(1)蛮力法:

蛮力法是最容易想到的算法(严格来说也不属于算法),我们的目标是在一组点迹中找到距离最近的两个点,那么我们只需要计算每两个点之间的距离,进行比较,即可找到最近点对。

算法:BruteForceClosestPoints(P)
// 输入:一个n(n≥2)个点的列表P,P1=(x1,y1),...,Pn=(xn,yn)
// 输出:两个最近点的下标index1, index2
dmin ⬅ ∞
for i ⬅ 1 to n - 1 do
     for j ⬅ i + 1 to n do    // 为了约束i < j,防止重复计算
          d ⬅ sqrt((xi - xj)^2 + (yi - yj)^2)
          if(d < dmin)
               dmin ⬅ d;  index1 ⬅ i; index2 ⬅ j;
return index1, index2;

在这里插入图片描述

(2)分治算法

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51339444/article/details/124276156
今日推荐