集合論雜記——關係的性質

Ofnoname發表於2022-02-08

“函式”是高中課本就有的概念,“關係”是大學離散數學裡研究集合元素的聯絡時出現的更常見的概念。上課的時候其實大部分內容沒有難度,給人“廢話”的感覺,但是還是有些東西超出了高中的認知,還有些與程式設計結合起來後認識更深了。

什麼是關係

關係(relation):有集合\(A,B\),那麼\(A\times B\)(直積)的任意子集都是一個\(A\to B\)的關係。關係相當於一個可以一對多的函式,每個A中元素可對應B中多個元素,每個B中元素可以對應A中任意元素。任取A中一個元素x和B中一個元素y,x和y要麼是“有關係”,要麼是“沒有關係”。用\(xRy\)表示存在關係\(\langle x,y\rangle\)也可以選擇用謂詞\(f(x,y)\)表示x和y是否有關係,有則為真,無則為假。

關係可以用“連線圖”來表示,也可以用矩陣來表示,比如\(\{1,2,3\}\to\{1,2,3,4\}\)上的小於關係:

image

關係的逆很好理解,將箭頭倒轉就可以,關係的複合就是在右側加上第二列連線到第三列,那麼能從第一列連到第三列的所有元素對就是複合關係,這與函式的理論是基本一致的。

自反,對稱與傳遞

對於一個自身上的對映(即\(A\times A\)上),幾個耳熟但不能詳的名詞:

  • 自反(reflexive):任意\(x\in A\)都有\(xRx\),那麼A就是自反關係,即每個元素都有到自己的關係。
  • 非自反(inreflexive):任意\(x\in A\)都有\(x/ \hspace{-0.6em}Rx\),那麼A就是非自反關係,即每個元素都不存在到自己的關係。顯然集合只能是自反,非自反,和兩者都不是中的一種。
  • 對稱(symmetric):任意\(xRy\),則必有\(yRx\),那麼A就是對稱關係,對稱關係也可以用“逆關係等於自身”來描述。
  • 反對稱(antisymmetric):任意\(xRy\),若有\(yRx\),則必有\(x=y\),即不存在兩個不同元素有互相的對稱關係。但是可以指向自身,因此有些關係可以既對稱又反對稱。
  • 傳遞(transitive):任意\(xRy\)\(yRz\),則必有\(xRz\),那麼A就是傳遞關係,傳遞關係也可以用\(R^2\subseteq R\)來表述(\(R^2\)表示R與R的複合\(R\cdot R\))。

構造關係閉包

關係閉包提出的問題是:給定任意關係\(R\),並在\(R\)基礎上新增最少的關係,如何把\(R\)變成具有給定性質的關係?

建立一個自反閉包很簡單,把所有\(xRx\)加上就可以;建立對稱閉包也很簡單,對於每個\(xRy\),如果\(yRx\)不存在,加上就可以。

那麼傳遞閉包呢?傳遞閉包的結論是:構造\(R_t=R\cup R^2 \cup R^3\cup...\),得到的\(R_t\)即為包含R的傳遞閉包關係。

證明兩邊相等:先證右屬於左,用歸納法證明,右側\(R^1\subseteq R_t\)顯然;假設\(R^n\subseteq R_t\),那麼任意\(\langle x,y\rangle\in R^{n+1}=R^n\cdot R\),都應該存在\(z\)使\(\langle x,z\rangle\in R\wedge \langle z,y\rangle\in R^n\),而\(R,R^n\subseteq R_t\),所以\(\langle x,z\rangle,\langle z,y\rangle\)都是\(R_t\)的元素,由傳遞集合性質\(\langle x,y\rangle\in R_t\)

再證左屬於右,任意\(R\cup R^2 \cup R^3\cup...\)中的元素一定在某一個\(R^i\)中,設有\(\langle x,z\rangle\in R_s\)\(\langle z,y\rangle\in R_t\),顯然有\(\langle x,y\rangle\in R_{s+t}\)也在集合中,因此\(R\cup R^2 \cup R^3\cup...\)就是傳遞的,它比最小閉包\(R_t\)大或相等。因此等式成立。

這個結論是正確的,同時也是可計算的,含有n個元素的集合,最多有\(2^{n^2}\)種可能的關係,所以右邊的集合一定會出現重複,數量是有限的。

傳遞關係與Warshell演算法

傳遞關係要求\(f((x,y)\wedge f(y,z))\to f(x,z)\)\(R\)相當於x直接走到z,\(R^2\)相當於x走兩步到z,以此類推,只要最終x能走到z,就有\(f(x,z)=1\),我們用下面的流程計算\(R\cup R^2 \cup R^3\cup...\)(假設有n個元素):

  1. \(k = 1\)
  2. 列舉所有\(\langle i,j\rangle\in n\times n\),若\(f_{k-1}(i,k)\wedge f_{k-1}(k,j)\),則令\(f_k(i,j)=1\)。(這裡的\(f_k\)指不超過k步能走到)
  3. 遞增k,重複運算到k大於n。

每一次k取A的列舉解出\(R\cup...R^A\),代表求解i能否在A步以內走到j,由於A步以下的答案都已經求解,若i能在A-1步內走到k,k能在A-1步內走到j,那麼i就可以走到j。複雜度為\(O(n^3)\)

剛剛一直在用“走到”來描述一次關係變換,其實這個問題是可以抽象為一個圖論問題的,關係就是一張有向圖,每個圖能走到的所有點全部加起來就是傳遞閉包。在實際程式設計中,上述演算法的第一維可以省略,這樣就變成了Floyed演算法。

//Floyed
for (int k = 1; k <= n; k++)
	for (int i = 1; i <= n; i++)
	for (int j = 1; j <= n; j++)
		f[i][j] = f[i][k] | f[k][j];

img

等價,偏序與擬序

介紹了自反,對稱與傳遞,下面得說說他們存在的意義了。

等價關係(equivelance):滿足自反,對稱,傳遞的關係即為等價關係。自然數的“等於”是典型的等價關係。假設有集合\(\{1,2,3,4,5,6,7,8\}\),顯然只有\(eq(x,x)=1, eq(x,y)=0\)每個元素只和自己相等。“模3等於”也是等價關係,此時模3得1的數互相關係,模3得2的數互相關係,模3得0的數互相關係,他們之間卻都沒有關係。

容易發現,等價關係將集合中的元素進行了“分組”,組內是全聯通的,任意兩元素都等價,而組間都沒有關係,數的等於是等價關係,矩陣的相似等一樣是等價關係,都是按照性質分類帶來的結果。

img

偏序關係(partial order):滿足自反,反對稱,傳遞的關係即為偏序關係,自然數的“小於等於”是典型的偏序關係,整數的整除關係也是典型的偏序關係。

擬序關係(quasi order):滿足非自反和傳遞的關係即為擬序關係(顯然是反對稱的),“小於”是典型的擬序關係。

偏序和擬序的差別在於有無自反。省略到自己的關係,在偏序或擬序關係下,由於反對稱性,元素會形成一張有向無環圖。對於“小於”來說,所有元素形成了一條鏈,這就是排序的基礎。

img

關係的規則與程式設計

“自然數的等於”是等價關係的典型,“自然數的小於”是擬序關係的典型。這樣的規則一方面便於我們記憶,另一方面解釋了這些關係的本質。

而第三個方面,我們要確保使用小於和等於時滿足這些性質。比如在C++裡,使用map和set需要支援==號,使用sort需要一個小於號,如果你過載了自定義型別的比較運算子號,就一定要確保它滿足對應的性質。比如過載小於號的時候,一定要保證過載出的符號滿足非自反性和傳遞性,只有這樣才能把全體元素連成一條鏈,按鏈上的大小規則排序,否則(比如使用了小於等於號導致自反)將不能正確排序。

典型例題:洛谷 P2123 皇后遊戲

相關文章