根号分治
由于刚学没几天,所以没什么例题。
简介
根号分治是一种用于优化暴力的技巧。
如果对于一个问题,有两种暴力:它们的一部分是复杂度瓶颈,一部分不是,而两者的瓶颈恰好是两个极端。那我们考虑根据某个值的根号分类讨论,结合两种算法,把 \(n\) 的复杂度转化为 \(\sqrt{n}\)。
可以说,根号分治就是一种通过分治取长补短的技巧。在操作类型不平衡的情况下,调整根号运算为 \(n^{\frac{1}{3}}\) 之类的会更快哦。
有些话看起来是废话,但 某个值的总数量一定 是根号分治的一个明显的提示条件。
例题
CF1207F Remainder Problem/P3396 哈希冲突
模板题。
两种暴力:修改时直接修改对应位置 \(O(1)\),查询时每次跳 \(x\) 地暴力查询 \(O(\frac{n}{x})\);存 \(c_{i,j}\) 表示对 \(i\) 取模后 \(j\) 位置上的值,这样修改是 \(O(n)\) 的,查询是 \(O(1)\) 的。
只需要从 \(\sqrt{n}\) 处分治,在 \(x\le \sqrt{n}\) 时用第二种暴力,在 \(x>\sqrt{n}\) 时用第一种暴力,复杂度就被压缩到了 \(O(n\sqrt(n))\)。实测 \(n^{0.1}\) 作为分治的界限更快。

浙公网安备 33010602011771号