组合数学真是太棒了

$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分治]【学习笔记】的更多相关文章

  1. 初学cdq分治学习笔记(可能有第二次的学习笔记)

    前言骚话 本人蒟蒻,一开始看到模板题就非常的懵逼,链接,学到后面就越来越清楚了. 吐槽,cdq,超短裙分治....(尴尬) 正片开始 思想 和普通的分治,还是分而治之,但是有一点不一样的是一般的分治在 ...

  2. CDQ分治学习笔记

    数据结构中的一块内容:$CDQ$分治算法. $CDQ$显然是一个人的名字,陈丹琪(NOI2008金牌女选手) 这种离线分治算法被算法界称为"cdq分治" 我们知道,一个动态的问题一 ...

  3. [摸鱼]cdq分治 && 学习笔记

    待我玩会游戏整理下思绪(分明是想摸鱼 cdq分治是一种用于降维和处理对不同子区间有贡献的离线分治算法 对于常见的操作查询题目而言,时间总是有序的,而cdq分治则是耗费\(O(logq)\)的代价使动态 ...

  4. CDQ分治学习笔记(三维偏序题解)

    首先肯定是要膜拜CDQ大佬的. 题目背景 这是一道模板题 可以使用bitset,CDQ分治,K-DTree等方式解决. 题目描述 有 nn 个元素,第 ii 个元素有 a_iai​.b_ibi​.c_ ...

  5. 三维偏序[cdq分治学习笔记]

    三维偏序 就是让第一维有序 然后归并+树状数组求两维 cdq+cdq不会 告辞 #include <bits/stdc++.h> // #define int long long #def ...

  6. CDQ分治学习思考

    先挂上个大佬讲解,sunyutian1998学长给我推荐的mlystdcall大佬的[教程]简易CDQ分治教程&学习笔记 还有个B站小姐姐讲解的概念https://www.bilibili.c ...

  7. cdq分治学习

    看了stdcall大佬的博客 传送门: http://www.cnblogs.com/mlystdcall/p/6219421.html 感觉cdq分治似乎很多时候都要用到归并的思想

  8. [Updating]点分治学习笔记

    Upd \(2020/2/15\),又补了一题 LuoguP2664 树上游戏 \(2020/2/14\),补了一道例题 LuoguP3085 [USACO13OPEN]阴和阳Yin and Yang ...

  9. 点分治&&动态点分治学习笔记

    突然发现网上关于点分和动态点分的教程好像很少……蒟蒻开篇blog记录一下吧……因为这是个大傻逼,可能有很多地方写错,欢迎在下面提出 参考文献:https://www.cnblogs.com/LadyL ...

随机推荐

  1. [国嵌笔记][025][ARM指令分类学习]

    算术和逻辑指令 1.mov 格式:mov {条件}{s} <dest>, <op> 作用:把一个值从一个地方移动到另一个地方,<dest>必须是寄存器 示例: @m ...

  2. python 模块中的 __init__.py __main__.py

    python中文件夹想作为一个模块被引用,则在文件夹内必须要包含 __init__.py 文件,即使此文件为空. 如果此模块想要运行则必须要包含 __main__.py 文件.接下来说下两个文件起到的 ...

  3. 如何节省 1TB 图片带宽?解密极致图像压缩

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:Gophery 本文由 腾讯技术工程官方号 发布在云+社区 图像已经发展成人类沟通的视觉语言.无论传统互联网还是移动互联网,图像一直占据着 ...

  4. SDP(3):ScalikeJDBC- JDBC-Engine:Fetching

    ScalikeJDBC在覆盖JDBC基本功能上是比较完整的,而且实现这些功能的方式比较简洁,运算效率方面自然会稍高一筹了.理论上用ScalikeJDBC作为一种JDBC-Engine还是比较理想的:让 ...

  5. mysql 性能优化常见命令

    mysql 性能优化常见命令: 一: 当发现mysql程序运行缓慢时,在排除sql主机问题之后,可以尝试在schema,table,和sql上进一步进行考查: 1:mysql> show ful ...

  6. Java数据持久层框架 MyBatis之背景知识一

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  7. 数据存储之Web存储(sessionStorage localStorage globalStorage )

    Web Storage 两个目标 提供一种在cookie之外的存储会话守数据的途径 提供一种存储大量可以跨会话存在的数据机制 最初的Web Storage规范包含两个对象 sessionStorage ...

  8. 使用Recovery Services备份Azure ARM模式虚拟机

    1.需要事先准备好要备份的虚拟机,如"hlmcent73n" 2.创建一个恢复服务保管库 3.选择虚拟机类型的备份 4.可以选择默认备份策略,也可以选择新建备份策略,以下演示为新建 ...

  9. JAR包数字签名与验证

    经签名的Jar包内包含了以下内容: 原Jar包内的class文件和资源文件 签名文件 META-INF/*.SF:这是一个文本文件,包含原Jar包内的class文件和资源文件的Hash 签名block ...

  10. maven多模块搭建

    此时你会发现父模块含有如下内容 这是因为创建的maven项目都带有样例,比如上图的这张图片 各种artifact都是做什么的呢,@参考文章中给出了答案 怎么创建不带这些呢? 那就创建simple pr ...