根号分治

由于刚学没几天,所以没什么例题。

简介

根号分治是一种用于优化暴力的技巧。

如果对于一个问题,有两种暴力:它们的一部分是复杂度瓶颈,一部分不是,而两者的瓶颈恰好是两个极端。那我们考虑根据某个值的根号分类讨论,结合两种算法,把 \(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}\) 作为分治的界限更快。

posted @ 2025-02-20 22:49  Luke_li  阅读(58)  评论(0)    收藏  举报