【集合論】關係閉包 ( 關係閉包求法 | 關係圖求閉包 | 關係矩陣求閉包 | 閉包運算與關係性質 | 閉包複合運算 )
一、閉包求法
R R R 關係是 A A A 集合上的二元關係 , R ⊆ A R \subseteq A R⊆A , 且 A A A 集合不為空集 , A ≠ ∅ A \not= \varnothing A=∅
求自反閉包 : r ( R ) = R ∪ I A r(R) = R \cup I_A r(R)=R∪IA , 給每個頂點新增環 ;
- 如果 R R R 關係是自反的 , 當且僅當 , I A ⊆ R I_A \subseteq R IA⊆R
求對稱閉包 : s ( R ) = R ∪ R − 1 s(R) = R \cup R^{-1} s(R)=R∪R−1
- 原來 沒有有向邊 ( 有序對 ) , 自然也沒有對應的逆 , 此時不新增邊
- 原來 有一條有向邊 ( 有序對 ) , 再新增一個反向的有向邊 , 組成 關係圖中的 頂點間的 雙向有向邊
- 原來 有兩條有向邊 ( 有序對 ) , 此時就不用新增其它邊
- 如果 R R R 關係是對稱的 , 當且僅當 , R = R − 1 R = R^{-1} R=R−1
求傳遞閉包 : t ( R ) = R ∪ R 2 ∪ R 3 ∪ ⋯ t(R) = R \cup R^2 \cup R^3 \cup \cdots t(R)=R∪R2∪R3∪⋯
將 R R R 關係所有的冪運算值並起來 , 就是其傳遞閉包 , R R R 關係的 1 1 1 次冪 , R R R 關係的 2 2 2 次冪 , R R R 關係的 3 3 3 次冪 , ⋯ \cdots ⋯ , R R R 關係的 n n n 次冪 , 並起來 , 就是其傳遞閉包 ;
如果 A A A 是有窮集 , 其關係也是有窮的 , 求出其所有的 n n n 次冪 , 不用求出很多冪運算 , 因為關係的冪運算後面都是迴圈的 , 求出已知的所有 n n n 次冪 取 並集即可 ;
如果 R R R 關係是傳遞的 , 當且僅當 , R 2 ⊆ R R^2 \subseteq R R2⊆R
二、求閉包示例 ( 關係圖角度 )
集合 A = { a , b , c , d } A = \{ a, b, c , d \} A={a,b,c,d}
關係 R = { < a , b > , < b , a > , < b , c > , < c , d > } R = \{ <a,b> , <b,a> , <b,c> , <c,d> \} R={<a,b>,<b,a>,<b,c>,<c,d>}
求關係 R R R 的自反閉包 r ( R ) r(R) r(R) , 對稱閉包 s ( R ) s(R) s(R) , 傳遞閉包 t ( R ) t(R) t(R)
求自反閉包 : 就是給每個頂點加上環 :
求對稱閉包 : 將 頂點間 單向邊改成雙向邊 , 不管 頂點間雙向邊 和 頂點間沒有邊 的情況 ;
求傳遞閉包 : 將能到的點直接連起來 ;
- a 可以到 b , 路徑 a -> b ; a 可以到 c , 路徑是 a -> b -> c ; a 可以到 d , 路徑是 a -> b -> c -> d ; 因此新增 a 到 c , d 的有向邊 ;
- b 可以到 a , 路徑 b -> a ; b 可以到 c , 路徑是 b -> c ; b 可以到 d , 路徑是 b -> c -> d ; 因此新增 b 到 d 的有向邊 ;
- c 可以到 d , 路徑 c -> d ; 沒有可連線的邊 ;
- d 哪都到不了 , 沒有可連線的邊 ;
- 另外出現雙向邊時 , 兩個頂點必須加環 ;
三、求閉包示例 ( 關係矩陣角度 )
關係 R = { < a , b > , < b , a > , < b , c > , < c , d > } R = \{ <a, b> , <b,a> , <b,c> , <c,d> \} R={<a,b>,<b,a>,<b,c>,<c,d>}
使用關係矩陣方法求其 自反閉包 , 對稱閉包 , 傳遞閉包 ;
將上述關係寫成矩陣形式為 :
M ( R ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] M(R) = \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(R)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100100001000010⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
自反閉包 : 將主對角線值 , 全部改成 1 1 1 , 左上角到右下角為主對角線 ;
M ( r ( R ) ) = [ 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 1 ] M(r(R)) = \begin{bmatrix} 1 & 1 & 0 & 0 \\\\ 1 & 1 & 1 & 0 \\\\ 0 & 0 & 1 & 1 \\\\ 0 & 0 & 0 & 1 \end{bmatrix} M(r(R))=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡1100110001100011⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
對稱閉包 : 主對角線兩端要對稱 , 以對角線為基準 , 使對角線兩邊的值對稱 ;
M ( s ( R ) ) = [ 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 ] M(s(R)) = \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 1 & 0 \end{bmatrix} M(s(R))=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100101001010010⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
傳遞閉包 : 求該關係矩陣的 二次冪 , 三次冪 , 四次冪 , ⋯ \cdots ⋯ , 直到出現相同的迴圈的值為止 ;
將上述所有的不同的 矩陣冪運算 進行邏輯相加 ( 或 ) 操作 , 就是其傳遞閉包對應的矩陣 , 計算機演算法適合使用該方法 , 如果人計算 , 還是關係圖比較形象 ;
參考 : 【集合論】關係表示 ( 關係矩陣 | 關係矩陣示例 | 關係矩陣性質 | 關係矩陣運算 | 關係圖 | 關係圖示例 | 關係表示相關性質 ) 四、關係矩陣運算
注意逆序合成
M ( R 2 ) = M ( R ∘ R ) = M ( R ) ∙ M ( R ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] ∙ [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] = [ 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 ] M(R^2) = M(R \circ R) = M(R) \bullet M(R) =\begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(R2)=M(R∘R)=M(R)∙M(R)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100100001000010⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤∙⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100100001000010⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡1000010010000100⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
M ( R 3 ) = M ( R 2 ∘ R ) = M ( R ) ∙ M ( R 2 ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] ∙ [ 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 ] = [ 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 ] M(R^3) = M(R^2 \circ R) = M(R) \bullet M(R^2) = \begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 1 & 0 & 1 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(R3)=M(R2∘R)=M(R)∙M(R2)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100100001000010⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤∙⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡1000010010000100⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100100001001000⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
M ( R 4 ) = M ( R 3 ∘ R ) = M ( R ) ∙ M ( R 3 ) = [ 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 ] ∙ [ 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 ] = [ 1 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 ] = M ( R 2 ) M(R^4) = M(R^3 \circ R) = M(R) \bullet M(R^3) =\begin{bmatrix} 0 & 1 & 0 & 0 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 0 & 1 & 0 & 1 \\\\ 1 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 & 0 \\\\ 0 & 1 & 0 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} = M(R^2) M(R4)=M(R3∘R)=M(R)∙M(R3)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100100001000010⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤∙⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡0100100001001000⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡1000010010000100⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=M(R2)
因此其 R 4 R^4 R4 之後的冪運算值 , 偶數次冪關係矩陣與 M ( R 2 ) M(R^2) M(R2) 值相同 , 奇數次冪關係矩陣與 M ( R 3 ) M(R^3) M(R3) 值相同 ;
M ( t ( R ) ) = M ( R ) ∨ M ( R 2 ) ∨ M ( R 3 ) = [ 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 ] M(t(R)) = M(R) \lor M(R^2) \lor M(R^3) =\begin{bmatrix} 1 & 1 & 1 & 1 \\\\ 1 & 1 & 1 & 1 \\\\ 0 & 0 & 0 & 0 \\\\ 0 & 0 & 0 & 0 \end{bmatrix} M(t(R))=M(R)∨M(R2)∨M(R3)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡1100110011001100⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
四、閉包運算與關係性質
自反性 | 對稱性 | 傳遞性 | |
---|---|---|---|
r ( R ) r(R) r(R) | 1 1 1 ( 本身性質 ) | 1 1 1 | 1 1 1 |
r ( R ) r(R) r(R) | 1 1 1 | 1 1 1 ( 本身性質 ) | |
r ( R ) r(R) r(R) | 1 1 1 | 1 1 1 | 1 1 1 ( 本身性質 ) |
上述表格中值為 1 1 1 , 說明原來存在該性質 , 求對應的 自反/對稱/傳遞 閉包後 , 仍具有該性質 , 反之不具有該性質 ;
表格第二行含義 : r ( R ) r(R) r(R) 對應的行 ;
- 自反性 : 假如 R R R 原來是自反的 , 那麼 r ( R ) r(R) r(R) 也是自反的 ;
- 對稱性 : 假如 R R R 原來是對稱的 , 那麼 r ( R ) r(R) r(R) 也是對稱的 ; 求自反閉包 , 只是給頂點加環 , 不影響對稱性 ;
- 傳遞性 : 假如 R R R 原來是傳遞的 , 那麼 r ( R ) r(R) r(R) 也是傳遞的 ; 求自反閉包 , 只是給頂點加環 , 不影響傳遞性 ;
僅有一個特例 : 原來 R R R 是傳遞的 , 如果求對稱閉包 , 其對稱閉包的傳遞性就不存在了 ;
表格第二列說明 ( 自反性 ) : 如果 R R R 關係是自反的 , 那麼其 對稱閉包 s ( R ) s(R) s(R) 和 傳遞閉包 t ( R ) t(R) t(R) 也是自反的 ;
R 自 反 ⇒ s ( R ) 和 t ( R ) 自 反 R 自反 \Rightarrow s(R) 和 t(R) 自反 R自反⇒s(R)和t(R)自反
表格第三列說明 ( 對稱性 ) : 如果 R R R 關係是對稱的 , 那麼其 自反閉包 r ( R ) r(R) r(R) 和 傳遞閉包 t ( R ) t(R) t(R) 也是對稱的 ;
R 對 稱 ⇒ r ( R ) 和 t ( R ) 對 稱 R 對稱 \Rightarrow r(R) 和 t(R) 對稱 R對稱⇒r(R)和t(R)對稱
表格第四列說明 ( 傳遞性 ) : 如果 R R R 關係是傳遞的 , 那麼其 自反閉包 r ( R ) r(R) r(R) 也是傳遞的 ;
R 傳 遞 ⇒ r ( R ) 傳 遞 R 傳遞 \Rightarrow r(R) 傳遞 R傳遞⇒r(R)傳遞
五、閉包複合運算
R R R 關係是 A A A 集合上的二元關係 , R ⊆ A R \subseteq A R⊆A , 且 A A A 集合不為空集 , A ≠ ∅ A \not= \varnothing A=∅
1. r s ( R ) = s r ( R ) rs(R) = sr(R) rs(R)=sr(R) :
- rs( R ) : 先求 R R R 關係的 自反閉包 , 然後再求自反閉包的 對稱閉包
- sr( R ) : 先求 R R R 關係的對稱閉包 , 然後再求對稱閉包的自反閉包
- 上述兩個閉包運算的 結果相同
2. r t ( R ) = t r ( R ) rt(R) = tr(R) rt(R)=tr(R)
- rt( R ) : 先求 R R R 關係的 自反閉包 , 然後再求自反閉包的 傳遞閉包
- tr( R ) : 先求 R R R 關係的傳遞閉包 , 然後再求傳遞閉包的自反閉包
- 上述兩個閉包運算的 結果相同
3. s t ( R ) ⊆ t s ( R ) st(R) \subseteq ts(R) st(R)⊆ts(R)
- st( R ) : 先求 R R R 關係的 對稱閉包 , 然後再求對稱閉包的 傳遞閉包
- ts( R ) : 先求 R R R 關係的傳遞閉包 , 然後再求傳遞閉包的對稱閉包
- 上述兩個閉包運算的結果 , t s ( R ) ts(R) ts(R) 關係 包含 t s ( R ) ts(R) ts(R) 關係 ;
相關文章
- 閉包和一部電影的關係
- js中,函式的閉包、作用域跟[[Scopes]]的關係JS函式
- 【閉包概念】關於閉包概念不同解讀——你可以自己理解。
- python 關於 函式物件與閉包Python函式物件
- 閉包
- Swift-逃逸閉包、自動閉包Swift
- 閉包 | 淺談JavaScript閉包問題JavaScript
- 關於Python閉包的一切Python
- 好程式設計師前端教程之JavaScript閉包和匿名函式的關係詳解程式設計師前端JavaScript函式
- 【python】【安裝包依賴關係】Python
- 閉包是什麼?怎麼形成一個閉包?為什麼使用閉包?
- JavaScript - 閉包JavaScript
- JavaScript 閉包JavaScript
- Golang閉包Golang
- 理解“閉包”
- PHP 閉包PHP
- JavaScript閉包JavaScript
- Swift 閉包Swift
- golang 閉包Golang
- 「閉包」攻略
- 什麼是閉包,閉包的優缺點?
- Python提高:關於閉包和裝飾器Python
- html包裝器如何關閉顯示警告訊息?animate關閉警告模式的方法HTML模式
- js閉包及閉包的經典使用場景JS
- [JavaScript閉包]Javascript閉包的判別,作用和示例JavaScript
- 什麼是閉包?閉包的作用是什麼?
- Groovy閉包理解
- 閉包作用域
- 閉包問題
- C#閉包C#
- 筆記:閉包筆記
- 亂談閉包
- 閉包的起源
- 再讀閉包
- 函式閉包函式
- JavaScript-閉包JavaScript
- JS閉包ClosureJS
- JavaScript 的閉包JavaScript