学习笔记: cdq分治
来源:互联网 发布:淘宝客服信息发布出去 编辑:程序博客网 时间:2024/05/22 04:34
推荐论文:
1 《从<Cash>谈一类分治算法的应用》 陈丹琦
2 《浅谈数据结构题的几个非经典解法》 许昊然
Q: cdq分治和普通的分治有什么区别?
A: 在我们平常使用的分治中,每一个子问题只解决它本身(可以说是封闭的)。而在cdq分治中,对于划分出来的两个子问题,前一个子问题用来解决后一个子问题而不是它本身。
在很多问题中(比如大多数数据结构题),我们经常需要处理一些动态问题。然而我们对动态问题的处理总是不如静态问题来的那么方便,于是就有了cdq分治。但正如论文2所提到的,使用这算法的前提是问题必须具有以下两个性质:
1.修改操作对询问的贡献独立,修改操作互不影响效果。
2.题目允许使用离线算法。
具体算法流程如下:
1.将整个操作序列分为两个长度相等的部分(分)
2.递归处理前一部分的子问题(治1)
3.计算前一部分的子问题中的修改操作对后一部分子问题的影响(治2)
4.递归处理后一部分子问题(治3)
{
cdq分治的大概步骤就是
1. Solve(l,mid)
2. Solve(mid+1,r)
3. 处理左边对右边的影响
}
在整个流程中,最核心的就是步骤3:因为前一部分子问题中的修改操作相对后一部分子问题来说是静态处理,所以我们就可以更加方便地计算后一部分子问题。
CDQ分治属于比较特殊的一类分治,许多问题转化为这类分治的时候,时空方面都会有很大节省,而且写起来没有这么麻烦。
这类分治的特殊性在于分治的左右两部分的合并,作用两部分在合并的时候作用是不同的,比如,通过左半部分的影响来更新右半部分,所以分治开始前都要按照某一个关键字排序,然后利用这个顺序,考虑一个区间[l, r]的两部分间的影响。
- 学习笔记: cdq分治
- 学习笔记: cdq分治
- 【cdq分治】cdq分治与整体二分学习笔记Part2.cdq分治
- 学习笔记——cdq分治
- CDQ分治学习
- 【cdq分治】cdq分治与整体二分学习笔记Part1.整体二分
- CDQ分治与斜率优化DP——学习笔记
- cdq分治
- cdq分治
- cdq分治
- cdq分治
- cdq分治&整体二分学习缓存
- CDQ 学习笔记
- 时间分治(cdq分治)
- bsoj2653 cdq分治
- 【CDQ分治】数据
- BZOJ3262【CDQ分治】
- BZOJ1492【CDQ分治】
- POJ 1737 Connected Graph 题解(未完成)
- POJ 2299 Ultra-QuickSort 题解
- BZOJ 2179 FFT快速傅立叶 题解
- 随机规划自己的一天系列233
- poj 1995 Raising Modulo Numbers 题解
- 学习笔记: cdq分治
- leetcode 链表处理集锦
- 剑指offer(java版)
- 搜索下拉框
- poj 3258 River Hopscotch 题解
- 性能优化
- tyvj P1403 关押罪犯 题解
- linux块大小与分区大小问题
- 学习笔记 ST算法