引言
信息學競賽中有個很經典的問題——偏序問題。
可能很多人並沒有聽說過什么是偏序問題,但大多應該都聽說過逆序對和最長上升子序列問題。這兩個問題都是偏序問題的一種。
先來理解下偏序關系的定義。
定義
偏序關系
設R是集合A上的一個二元關系,若R滿足:
則稱R為A上的偏序關系,通常記作≼。
給定集合S,“<”是S上的二元關系,若“<”滿足:
則稱“<”是S上的嚴格偏序或反自反偏序。
與非嚴格的偏序關系不同的地方就是沒有反對稱性,取而代之的是非對稱性。上面寫的包含關系是一種偏序關系,更准確的說,包含關系是非嚴格的偏序關系,而真包含是嚴格的偏序關系。
全序關系
偏序和全序是公里集合論中的概念,全序關系是偏序關系的一個子集,如果是全序關系那必然是偏序關系,全序關系在全序關系上增加了一個完全性。
設R是集合 A上的一個 二元關系,若R滿足:- R是集合A上的一個偏序關系。
- 完全性:對任意x∈A,y∈A,存在 (x,y)∈R或(y,x)∈R
在實數集上的大於小於號等大小關系,更准確的說應該屬於一種全序關系,因為實數集上所有的數都能比較。但如果將數域擴展到復數域,復數域中的部分數是不能比較的,所以復數域中的大於小於號等大小關系是偏序關系而不是全序關系。同樣的,集合之間的包含關系也不是全序關系,因為兩集合可以處於不包含也不被包含的互相獨立的狀態。
正文
偏序問題
給定序列A,其中有序對(Ai,Aj),滿足 i<j 且 Ai<Aj這樣的有序對我們稱之為逆序對,
信息學競賽中的逆序對問題,一般是要我們計數給出序列的逆序對個數的總和。
其實可以把它看成一個特殊的二維偏序問題,或者說是離散化x坐標的二維偏序問題。
我們把給定的序列A ,加上一個編號,變成一個二元組,即A1-->(A1,1) ,A2-->(A2,2) Ai-->(Ai,i)。存在兩個二元組(a,b),(c,d),滿足 a > c 且 b < d 的個數。我們將二元組放在一個二維空間中,二元組(x,y)表示坐標為(x,y)的點,此時我們就會發現實際上逆序對問題,就是一種二維偏序問題。
何為二維偏序問題? 在二元組中定義一種偏序關系R,統計R集合中元素的個數。
比如逆序對問題,定義的關系就是:兩個二元組(a,b),(c,d),滿足 a > c 且 b < d 。易知它滿足偏序關系的3個定義,並且任意的兩個二元組也不都有關系,所以就不是全序,當然由於逆序對問題一般不會出現重復的數字,所以前兩個定義需要特別判斷,但它可以滿足最后的也是最重要的一條性質——傳遞性。也正是因為傳遞性我們才能使用各種算法來解決它們。
在信息學競賽中我們解決逆序對使用的是,線段樹或歸並排序,實際上這里的歸並排序就是cdq分治,實際上都是使用的分治法。
這兩種方法本質上相同,都是通過排序解決一個維度的問題,然后再使用分治快速處理另外一個維度的問題。
特別的最長上升子序列問題也是一種偏序問題,實際上可以轉換為,給出n個元素的二元組集合S,其中有二元組(A1,1),(A2,2)...(An,n),在二元組中有關系R,定義為 二元組A (a,b)R B(c,d)當且僅當b<d 且 a<c,求集合S的一個最大子集滿足,子集中的關系R為全序關系。