个人主页:丷从心·
系列专栏:分治算法
学习指南:Python学习指南
问题描述
- 给定平面上 n n n个点,找其中的一对点,使得在 n n n个点组成的所有点对中,该点对的距离最小
一维最接近点对算法
Python
实现
import sys
def closest_pair(points):
points.sort() # 按照横坐标排序
min_dist = sys.maxsize # 初始化最小距离为一个很大的数
closest = None # 初始化最接近点对为 None
for i in range(len(points) - 1):
dist = abs(points[i] - points[i + 1]) # 计算相邻点对的距离
if dist < min_dist:
min_dist = dist
closest = (points[i], points[i + 1])
return closest
points = [2, 4, 1, 5, 8, 9, 3]
res = closest_pair(points)
print(f'最接近的点对为: {
res}')
最接近的点对为: (1, 2)
二维最接近点对算法
分治算法
- 选取一垂直线 l : x = m l : x = m l:x=m, m m m为 S S S中各点 x x x坐标的中位数,将 S S S分割为 S 1 = { p ∈ S ∣ x ( p ) ≤ m } S_{1} = \set{p \in S \mid x(p) \leq m} S1={ p∈S∣x(p)≤m}和 S 2 = { p ∈ S ∣ x ( p ) > m } S_{2} = \set{p \in S \mid x(p) > m} S2={ p∈S∣x(p)>m}
- 递归地在 S 1 S_{1} S1和 S 2 S_{2} S2上解最接近点对问题,分别得到 S 1 S_{1} S1