平面最近点对

题意
给定\(n\)个平面上的点\(p_1,p_2,...,p_n\),输出距离最近的点之间的距离。\(n\le 4\times10^5\)

解析
将所有点按照\(x\)坐标排序,记\(solve(l, r)\)\([l,r]\)内的距离最近的点的距离。令\(mid = [\frac{l+r}{2}]\),将点分为两部分,分别计算每一部分内的最近点对,\(solve(l,mid)\)\(solve(mid+1,r)\),然后将两部分合并。

\(d\)\(solve(l,mid)\)\(solve(mid+1,r)\)较小值,合并时只需考虑满足\(|x_i-x_{mid}|<d\)的点\(p_i\),记录这些点并按\(y\)坐标排序。

暴力遍历这些点,对于遍历到的点\(p_i\),向后遍历至\(y_j-y_i\ge d\)为止,每个点向后最多遍历七个点。合并操作为\(O(n)\),总的时间复杂度为\(O(nlog^2n)\)

posted @ 2021-12-13 19:19  Ruthenium  阅读(54)  评论(0)    收藏  举报
返回顶端