“最近点对依靠局部稀疏条带,而直径由凸包边界与全局支撑控制。旋转卡壳也可用于宽度或最小包围矩形,但目标函数和需要同步的支撑线数量会改变;“都能旋转”不是这些算法共享同一候选公式的理由。”
形式陈述
这是计算几何中的基本问题:固定实平面的标准 Euclidean 内积,输入是
递归的接口还要返回本子问题中按
在坐标比较、加乘与距离比较均为常数成本的实数 RAM 模型下,额外空间可做到
直觉
分治先排除左右内部的大多数点对,只留下可能跨越分割线的窄带。Packing 不是经验猜测,而是数量证书:已知同侧点不能靠得比
全局有平方多个点对,算法却只在每层检查线性多个局部候选;真正的加速来自几何分离,而非单纯把点数组切成两半。
图中的竖直带筛选横向距离,按纵坐标排列则筛选纵向距离;只有同时通过两次筛选的点对才需要计算完整距离。
例子与边界
取左侧点
合并后的
输入含重复点时答案立即为零,排序阶段即可检测;继续套 packing 证明会违反“同侧点至少相距
“检查七个后继”依赖具体 strip 宽度、边界归属和分格证明;换一种闭区间约定可能得到另一个常数,但不改变线性合并。实现应证明自己的常数覆盖所有候选,而不是把数字当作魔法循环上界。
推论与应用
最近点对是几何分治的典型闭环:预排序、递归不变量、合并证书和复杂度递推缺一不可。它用于碰撞预筛、聚类和空间数据分析,也为 Delaunay 邻接包含最近点对提供直觉。
高维 packing 常数随维数快速增长,算法虽可推广却不再有同样工程优势。不同度量下 strip 形状和局部装填界也会改变,不能直接复用 Euclidean 的七邻居实现。
参考资料
-
Robert Sedgewick、Kevin Wayne,Algorithms 配套代码,ClosestPair.java,在线版,访问于2026年:
closest的按位置划分、按 归并与窄带扫描。 -
Michael I. Shamos and Dan Hoey, “Closest-Point Problems,” FOCS 1975, pp. 151–162.
-
Thomas H. Cormen et al., Introduction to Algorithms, 3rd ed., MIT Press, 2009, §33.4.