计算几何

前几天看到一个看起来挺牛的数据随机下区间点对最优化的做法,没想到还真用上了。好像和官方题解不太一样,先记录一下。

题意是区间查询平面最近哈密顿距离点对。

先考虑一下全局查询怎么做。我们充分发扬人类智慧,每个点按 \(a\) 排序,然后从小到大枚举每个点,找下标距离它不超过 \(B\) 的点计算距离。事实表明取 \(B=20\) 就基本能算出最短距离了。复杂度 \(O(nB)\)

然后考虑区间查询怎么做。考虑分治,假设当前分治区间 \([l,r]\),我们处理所有 \([l',r']\subseteq[l,r]\) 的询问。那么我们求出 \([l,r]\) 的最近点对 \([p,q]\),显然对于任意询问 \([l',r']\) 如果满足 \(l'\le p\le q\le r'\),那么答案显然就是 \(d(p,q)\)\(d(x,y)\) 表示 \(x,y\) 的距离);否则 \([l',r']\) 要么属于区间 \([l,q]\),要么属于区间 \([p,r]\),直接分治下去计算答案(属于 \([p,q]\) 的部分随便选一边)即可。

加上小区间询问暴力平衡之后,理论复杂度似乎是 \(O(n^{1.4}B)\) 的。偷懒所以没加。

下面是坐标和询问区间均随机生成的复杂度证明(不带暴力平衡),不太严谨,理性愉悦即可:

由于询问一个长度为 \(l\) 的区间的概率为 \(\frac{l^2}{n^2}\),那么期望一个区间内的询问次数 \(\le \frac{l^2q}{n^2}\)。这里认为 \(n,q\) 同阶,那么 \(l\le \sqrt n\) 时我们就可以认为不会再向下分治了。

由于分治一层单个区间长度期望乘 \(\frac{2}{3}\),那么设期望递归层数为 \(t\),那么:

\[\left(\frac{2}{3}\right)^tn=\sqrt n \]

\[t=O(\log \sqrt n) \]

而递归一层之后所有区间的长度总和会乘 \(\frac{4}{3}\),所以:

\[T=\sum\limits_{i=0}^{t}\left(\frac{4}{3}\right)^t\cdot nB=O(Bn\sqrt n) \]

当然这个上界是远远达不到的,实测这个根号跑得和 \(\log\) 差不多快。

代码。

posted @ 2024-11-06 21:07  Arghariza  阅读(26)  评论(0)    收藏  举报