ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

分 块 套 娃

2022-08-13 20:30:24  阅读:120  来源: 互联网

标签: 套娃 分块 复杂度 算法 大小 散块


众所周知, 如果我们用正常的分块做单点加区间求和, 时间复杂度高达 \(O(1)-O(n^{1/2})\) (修改-询问).

然后你发现这太慢了. 于是你考虑改一下分块的大小.
我们更改块的大小为 \(n^{2/3}\), 整块的复杂度成功变成了 \(O(n^{1/3})\)!
但是散块的复杂度变成了 \(O(n^{2/3})\), 成功劣化.
于是你考虑套娃, 对每个块再套用正常的分块, 块的大小是 \(n^{1/3}\).
于是时间复杂度就神奇地变成了 \(O(1)-O(n^{1/3})\)!

继续套娃.
分块大小改为 \(O(n^{3/4})\), 这样整块的复杂度就是 \(O(n^{1/4})\), 然后考虑使用刚刚得出的算法, 散块也是 \(O(n^{1/4})\)!

以此类推, 只要我们分 \(k\) 层, 我们就得到了 \(O(k)-O(n^{1/k})\) 的算法, 我们取一个 \(k\) 使得 \(k=n^{1/k}\), 容易发现 \(k\) 小于 \(\log n\), 我们取得了比线段树还优秀的时间复杂度!

这样分析太大意了. 实际上, 随着层数的增长, 查询时散块带来的常数会指数级增长, 然后这个算法就寄掉了.

但是 \(O(1)-O(n^{1/3})\) 算法是可以试试的(

另外这种奇怪的思路可以被应用到二维分块中 (不会qaq), 我第一次看到是在 这里.

标签:,套娃,分块,复杂度,算法,大小,散块
来源: https://www.cnblogs.com/pjykk/p/16583952.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有