[偏序關系與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$分治結束啦~\(≧▽≦)/~

雖然課件上還有一些題下個月再做吧

明天看一下整體二分然后就開始仔細研究組合數學了 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM