学习笔记: cdq分治
今年的课程有很大一部分内容是cdq分治及其扩展(也就是二进制分组),拜读后觉得还是蛮有用的,这里小小地总结一下。(话说自己草稿箱里还有好多学习笔记的半成品呢,真是弱爆了。顺便感谢下fy与wxl向我介绍了那么好的东西)
推荐论文:
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]的两部分间的影响。
转载于:https://www.cnblogs.com/SBSOI/p/5639170.html
学习笔记: cdq分治相关推荐
- [学习笔记]CDQ分治
分治,考虑前一半对后一半的影响. (和一般分治不太相同的思想是,一般分治不分谁对谁的影响,跨mid的都要统计.(全局变量统计) 而CDQ貌似要落脚到前一半对后一半的影响上,也就是贡献在后一半统计,由前 ...
- 学习笔记——CDQ分治
再次感谢这位大佬的博客:https://www.cnblogs.com/ljc20020730/p/10395866.html CDQ分治,是一种在分治合并中计算前面值对后面答案的贡献的一种算法.今天 ...
- [学习笔记] CDQ分治 从感性理解到彻底晕菜
==== €€£ WARNING ==== 这篇博文由于过于久远并没有什么干货已被废弃 新博文链接->CDQ分治&整体二分 ==== = ...
- 【学习笔记】分治FFT
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 分治FFT 1. Luogu P4721 [模板]分治 FFT 2. 2020 ICPC Mac ...
- 算法笔记-CDQ分治
CDQ分治 多用于解决多维偏序问题,通过增加 l o g ( n ) log(n) log(n) 的时间将偏序问题降一维.离线算法 对于修改和询问问题,修改操作的位置小于某一询问时,修改才会对询问产生 ...
- 【转】算法导论学习笔记 一 分治算法
分治策略是一种常见的算法.在分治策略中,我们递归的求解一个问题,在每层递归中应用如下三个步骤: 1. 分解,将问题分解成规模更小但解决方案相同的子问题 2. 解决,递归的求解子问题,如果子问题足够小则 ...
- 【cdq分治】cdq分治与整体二分学习笔记Part2.cdq分治
上午的学习学会了整体二分,下午学了cdq分治 发现了二者的区别: 整体二分的主体是在不断地二分答案(把所有询问二分),而cdq分治则是在不断地二分操作. 当然同样的,cdq分治的复杂度也是与区间长度正 ...
- 【cdq分治】cdq分治与整体二分学习笔记Part1.整体二分
之所以把cdq分治和整体二分放在一起学习,是因为他们两个实在太像了-不管是做法还是代码- 感觉整体二分可能会比cdq分治稍微简单那么一点点?所以先学整体二分. 整体二分是对答案进行二分,其具体操作如下 ...
- 【教程】简易CDQ分治教程学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- [摸鱼]cdq分治 学习笔记
待我玩会游戏整理下思绪(分明是想摸鱼 cdq分治是一种用于降维和处理对不同子区间有贡献的离线分治算法 对于常见的操作查询题目而言,时间总是有序的,而cdq分治则是耗费\(O(logq)\)的代价使动态 ...
最新文章
- 并发编程-volatile和synchronized的区别
- springboot+事务,多张表的操作事务回滚
- 计算机缺少fixos.dll,fix_toolbox.dll
- ipv6路由协议配置_IPV6寻址,标头和路由协议
- vue3,对比 vue2 有什么优点?
- ActivityGroup简介
- 毕业设计-智能自选综合商城设计(毕业设计源码+系统+文档+部署)
- 12864液晶模块的详细使用
- 链表-双向循环链表【C语言】
- 关于计算机信息管理的照片,2021年10月青海自考计算机科学与技术(计算机信息管理方向)专业报名照片要什么格式...
- PI系统在DCS中的应用
- 【MFiX】记录一些有参考价值的legacy-tut/test算例
- 人工智能基础——知识的概念
- mysql事务6,MySQL6-事务
- 零担物流单号查询方法,如何查自己的货到哪里了
- 你是否在Microsoft Edge上测试你的网站?
- 微机原理第五章 存储器
- 检查手机端还是非手机端,做m站和pc站的适配
- 雨滴特效源码html,js雨滴特效
- 微信小程序生成海报失败问题解决方法