组合数学真是太棒了

$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. mysql中配置ssl_key、ssl-cert、ssl-ca的路径及建立ssl连接

    1.创建 CA 私钥和 CA 证书 (1)下载并安装openssl,将bin目录配置到环境变量: (2)设置openssl.cfg路径(若不设置会报错,找不到openssl配置文件) \bin\ope ...

  2. [国嵌攻略][067][tftp协议分析]

    TFTP作用 用于网络下载,TFTP客户机在TFTP服务器中下载文件. TFTP交换过程 1.配置TFTP服务器 vim /etc/xinetd.d/tftp 2.交换过程 客户端发请求包到服务器 服 ...

  3. vue.js打包后,接口安全问题

    后面有一位朋友回答后台origin判断,但另一个朋友说可以通过代理请求就绕过跨域. 想想也对,代理的话origin就无效了,页面还是可以跑起来. 不知道有没有人想过这个问题,还是我想的方向有误,请各位 ...

  4. 最强PostMan使用教程(1)

    最近需要测试产品中的REST API,无意中发现了PostMan这个chrome插件,把玩了一下,发现postman秉承了一贯以来google工具强大,易用的特质.独乐乐不如众乐乐,特此共享出来给大伙 ...

  5. Red Hat

    同义词 REDHAT一般指Red Hat Red Hat(红帽)公司(NYSE:RHT)是一家开源解决方案供应商,也是标准普尔500指数成员.总部位于美国北卡罗来纳州的罗利市,截止2015年3月3日, ...

  6. Linux apache的运行用户和用户组

    我们在安装apache后,有时在上传文件的时候,提示没有权限或者是不可写,我们都会去查文件夹的权限. 通过ls -l /var/www/html/website可以很直观的看出我们文件和文件夹的权限, ...

  7. Python3 的注释

    单行注释 # 这是一个注释 print("Hello, World!") 多行注释 1:3个单引号 ''' 这是多行注释,用三个单引号 这是多行注释,用三个单引号 这是多行注释,用 ...

  8. Moogoose Constructor小坑

    注意! exports 出来的 Model名字,必须和 Constructor的名字不一样!!! 不然Constructor会被覆盖,报错 这个是修改之后的.修改前,是var account = ne ...

  9. Oracle实战笔记(第六天)之PL/SQL基础

    一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...

  10. SpringMVC的filter怎么使用Autowired依赖注入bean

      有的时候根据我们业务的需要,我们需要在web项目中定义一个自己的filter,并想在这个filter中使用@Autowired注入bean供我们使用.如果直接使用的话是不行的,需要我们在xml文件 ...