平面最近点对

给定\(n\)个点\((x_1,y_1),(x_2,y_2,\cdots,(x_n,y_n)\),求最近点对,即

\[\min_{i \not= j}\{\text{dis}(i,j)\} \]

其中\(\text{dis}(i,j)\)为点\(i\)和点\(j\)的距离,\(n \le 200000\)

有一个很简单的\(\mathcal{O}(n ^ 2)\)做法,就是枚举\(i,j\)然后算距离,这里不展开讲。

讲一下分治的做法:
每次用一条直线(我称为分界线)将整个平面分成两部分\(L,R\),将点分成两部分,如图。

算出两边的最近点对距离\(dis_L,dis_R\),考虑如何算出\(L \to R\)的最近点对。

有一种比较简单的方法是在\(L\)当中枚举点和每一个\(R\)配对,复杂度太高了。

考虑什么样的情况对答案的更新是有效的。

\(\delta = \min(dis_L,dis_R)\),在这条分界线左右\(\delta\)远处作两条平行的直线,如图。

例如我现在考虑点R,以其为圆心,\(\delta\)为半径作圆,其中与右边那条虚线所框出来的点就是有意义的点,如图。

(N,M)
因为圆不好整,所以补成矩形。

证明:这个矩形里最多只有\(6\)个点。
将其分成六个等大的小矩形,长\(\frac{2}{3}\delta\),宽\(\frac{1}{2}\delta\),反证,如果个数\(>6\),那么有一个矩形就会有\(2\)个点,这两个点的最远距离为\(\sqrt{\left(\frac{2}{3}\delta\right)^2 + \left(\frac{1}{2}\delta\right)^2} = \frac{5}{6}\delta < \delta\),不符合\(\delta\)定义。

于是\(O(n\log{n})\)分治解决。

posted @ 2020-12-26 21:47  luyiming123  阅读(118)  评论(0编辑  收藏  举报