平面最近点对
题意
给定\(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)\)

浙公网安备 33010602011771号