[偏序关系与CDQ分治]【学习笔记】
组合数学真是太棒了
$CDQ$真是太棒了(雾
参考资料:
1.《组合数学》
2.论文 课件 很容易查到
3.sro __stdcall
偏序关系
关系:
集合$X$上的关系是$X$与$X$的笛卡尔积$X \times X$的子集$R$
即$X$的元素的有序对集合的一个子集
属于$X \times X$的有序对$(a,b)$记为$aRb$
$R$的一些概念:
自反$: \ \forall x \in X,\ xRx$
对称$: \ \forall x,y \in X,\ xRy \rightarrow yRx$
传递$: \ \forall x,y,z \in X,\ xRy,yRz \rightarrow xRz$
偏序$Partial order$:
偏序关系:自反,反对称且传递,符号$<$
严格偏序:反自反,反对称且传递,符号$\le$,如$LIS$
偏序集:$(X,\le )$ 如:集合包含,整除
可比$:\ \forall x,y \in X,\ xRy \lor yRx=true$
全序$:\ $每一对元素都可比
链$chain:\ X$的一个子集,每一对元素都可比
反链$antichain:\ X$的一个子集,任意两个元素都不可比
极小元和极大元:不存在更小/更大的元素
偏序集的极小元集合和极大元集合都是反链
链与反链有对偶性;$A \bigcap C \le 1$
$Dilworth$定理:
$1.\ $最少反链个数等于最长链大小
$2.\ $最少链个数等于最长反链大小
证明:
只证明$1$ , $2$太长了不(我)想(没)写(看)
设最长链长度$r$
首先反链个数不可能更少是显然的,因为最长链里每一个元素必须在不同的反链里;
现在证明可以划分成$r$个反链,通过不停的在$X$中删除最小元集合,后删除的集合中的每个元素一定比先删除的集合中的某个元素大,这样形成一条链。设一共删除$p$次,容易得到$ p \le r \land p \ge r $, 因此 $ p=r $
$CDQ$分治
注:以下主要为个人理解
我们暂且定义偏序中几个比较关系就是几维,如$LIS$是二维偏序
$CDQ$分治可以解决一类偏序问题,将多维的偏序问题减维
减维的原理:
通过规定用$[L,MID]$更新$[MID+1,R]$,使得在满足上一维顺序的同时可以对这一维进行排序来满足这一维的顺序
其他的减维手段还有排序和数据结构维护
二维偏序
通常用排序和数据结构维护就可以解决,如$LIS$,用$CDQ$分治强行做复杂度反而多一个$log$
但也有适合$CDQ$分治的,如逆序对。归并排序是$CDQ$的基础和最简单形式
三维偏序
可以用树套树或者$CDQ$分治$+$树,(然而$Candy?$蒟蒻并不擅长写树套树只会$CDQ$)
套路做法是第一维排序对其分治,第二维$CDQ$分治里排序,第三维用数据结构维护(常用树状数组)
因为前两维已经满足了,数据结构只维护一维就很简单了,常见区间和、区间最大值
常见形式:
目前遇到的三维偏序问题有两种形式
$1.$更新时不需要完整信息,可以把左更新右放到最后,如统计类问题
这类问题的排序可以使用归并排序,或者提前排序然后在分治里把序列分成两份(这时候递归调用写在最后)
$CDQ(l,r)$
$\ CDQ(l,mid)\ CDQ(mid+1,r)$
$\ [l,mid] \rightarrow [mid+1,r]$
$2.$更新时需要完整信息,用左更新右后才可以递归右面,如最优化问题
这类问题通常需要在分治里单独排序
$CDQ(l,r)$
$\ CDQ(l,mid)\ sort(l,r)$
$\ [l,mid] \rightarrow [mid+1,r]$
$\ CDQ(mid+1,r)$
复杂度分析
根据主定理:
$T(n)=2T(\frac{n}{2})+O(kn)=O(knlogn)$
根据算法导论上的练习题
$T(n)=2T(\frac{n}{2})+O(knlogn)=O(knlog^2n)$
常见用途:
$1.$数据结构题
在这类问题中通常将时间(操作序列)作为第一维,剩下的二维问题使用$CDQ$分治和数据结构
如$Mokia$,动态逆序对,天使玩偶
对应上文的第一种形式
注意必须要“修改独立”才行
如果强制在线我就只有等死了
$2.\ DP$
$(1)$三维$LIS$
将序列编号作为第一维,分治里需要单独排序,感觉使用间接排序比较好
如$SDOI2011$拦截导弹
$(2)$斜率优化$DP$维护凸包
感觉比用平衡树好多了($Candy?$蒟蒻并没有写过用平衡树维护)
如:$cash$,$WF2011\ Machine\ Works$
序列编号作为第一维,然后使用一种“先按斜率排序,分治时按序列编号(时间)分成两块再递归”的技巧
递归完$[l,mid]$后需要按$x$排好序,然后维护一个凸包
因为这时$[mid+1,r]$是斜率排好序的,在凸包上扫描一遍就可以了
为了避免精度问题可以使用叉积与点斜式
四维偏序
$CDQ$分治套$CDQ$分治
设四维$a,b,c,d$
$Sort\ at\ a$
$CDQ(l,r)$
$\quad CDQ(l,mid)$
$\quad CDQ(mid+1,r)$
$\quad MergeSort\ at\ b$ 每个元素标记属于$[l,mid]$还是 $[mid+1,r]$
$\quad CDQ2(l,r)$
$CDQ2(l,r)$要做的和普通的三维偏序一样,就是多了一个标记的限制(来自$CDQ$中$a$的限制,必须用标记不能判断$a \le mid$,因为$CDQ2$是要递归下去的,$mid$就变了)
总结一下就是有一个序$b$和限制$a$,然后处理$c,d$的二维问题
复杂度$O(nlog^3n)$ ,每多套一个$CDQ$分治就多一个$log$
100维偏序
$O(100*N^2)$暴力就好了.....
总结:
$CDQ$分治结束啦~\(≧▽≦)/~
虽然课件上还有一些题下个月再做吧
明天看一下整体二分然后就开始仔细研究组合数学了
[偏序关系与CDQ分治]【学习笔记】的更多相关文章
- 初学cdq分治学习笔记(可能有第二次的学习笔记)
前言骚话 本人蒟蒻,一开始看到模板题就非常的懵逼,链接,学到后面就越来越清楚了. 吐槽,cdq,超短裙分治....(尴尬) 正片开始 思想 和普通的分治,还是分而治之,但是有一点不一样的是一般的分治在 ...
- CDQ分治学习笔记
数据结构中的一块内容:$CDQ$分治算法. $CDQ$显然是一个人的名字,陈丹琪(NOI2008金牌女选手) 这种离线分治算法被算法界称为"cdq分治" 我们知道,一个动态的问题一 ...
- [摸鱼]cdq分治 && 学习笔记
待我玩会游戏整理下思绪(分明是想摸鱼 cdq分治是一种用于降维和处理对不同子区间有贡献的离线分治算法 对于常见的操作查询题目而言,时间总是有序的,而cdq分治则是耗费\(O(logq)\)的代价使动态 ...
- CDQ分治学习笔记(三维偏序题解)
首先肯定是要膜拜CDQ大佬的. 题目背景 这是一道模板题 可以使用bitset,CDQ分治,K-DTree等方式解决. 题目描述 有 nn 个元素,第 ii 个元素有 a_iai.b_ibi.c_ ...
- 三维偏序[cdq分治学习笔记]
三维偏序 就是让第一维有序 然后归并+树状数组求两维 cdq+cdq不会 告辞 #include <bits/stdc++.h> // #define int long long #def ...
- CDQ分治学习思考
先挂上个大佬讲解,sunyutian1998学长给我推荐的mlystdcall大佬的[教程]简易CDQ分治教程&学习笔记 还有个B站小姐姐讲解的概念https://www.bilibili.c ...
- cdq分治学习
看了stdcall大佬的博客 传送门: http://www.cnblogs.com/mlystdcall/p/6219421.html 感觉cdq分治似乎很多时候都要用到归并的思想
- [Updating]点分治学习笔记
Upd \(2020/2/15\),又补了一题 LuoguP2664 树上游戏 \(2020/2/14\),补了一道例题 LuoguP3085 [USACO13OPEN]阴和阳Yin and Yang ...
- 点分治&&动态点分治学习笔记
突然发现网上关于点分和动态点分的教程好像很少……蒟蒻开篇blog记录一下吧……因为这是个大傻逼,可能有很多地方写错,欢迎在下面提出 参考文献:https://www.cnblogs.com/LadyL ...
随机推荐
- Linux系统常用命令权威指南
<一>线上查询及帮助命令(2)1.man man [选项] [命令] 查看命令帮助,命令的词典,更复杂的还有info,但不常用. #man cd-a 显示所有的手册页,不只是显示第一个-f ...
- Nginx安装手册
前提是搭建yum安装环境,见前面的教程资料 Nginx安装手册1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. gcc 安装ngin ...
- JXLS 2.4.0系列教程(五)——更进一步的应用和页面边距bug修复
注:本文代码建立于前面写的代码.不过不看也不要紧. 前面的文章把JXLS 2.4.0 的基本使用写了一遍,现在讲讲一些更进一步的使用方法.我只写一些我用到过的方法,更多的高级使用方法请参考官网. ht ...
- UIScrollerview的contentsize设置
最近被同行的一个朋友问到一个问题"UIScrollerview上添加子控件,给子控件约束好布局之后,还需要给scrollerview重新设置contentsize吗?"于是想到了我 ...
- NSDate的常用用法
1. 创建或初始化可用以下方法 用于创建NSDate实例的类方法有 + (id)date; 返回当前时间 + (id)dateWithTimeIntervalSinceNow:(NSTimeInter ...
- python判断两个list包含关系
a = [1,2] b = [1,2,3] c = [0, 1] set(b) > set(a) set(b) > set(c)
- sersync+rsync同步
(一)目标服务器(rsync):10.60.50.192 1.安装rsync yum -y install rsync 2.创建rsyncd.conf配置文件 vi /etc/rsyncd.conf ...
- background是什么样式?
background是什么样式? 给标签添加背景图片 分为: background: url("图片路径"); #添加图片 background-position: xpx ...
- robotframework安装及入门指南
将很久之前自己在本地记录的一些笔记发表到随笔来,希望能够帮到一些童鞋~ robotframework安装及入门指南 本文主要介绍robotframework在windows环境的安装过程! 安装步骤 ...
- Linux 下 编译Xerces-c++
按照 doc/html 文件夹中的详细指导编译 Xerces-C++ 共享库. 下面的命令展示了如何用压缩的源文件编译 Xerces-C++ 库. 这里假定在像 /home/ 这样的目录中有 xerc ...