【离散数学】求解传递闭包的Warshall算法

定义

∣ X ∣ = n |X|=n ∣X∣=n, R ⊆ X × X R⊆X\times{X} R⊆X×X,令 M R = A M_{R}=A MR​=A, R 2 R^{2} R2的矩阵为 A ( 2 ) A^{(2)} A(2),……, R k R^{k} Rk的矩阵为 A ( k ) A^{(k)} A(k), t ( R ) t(R) t(R)的矩阵记作为 M R + = A + A ( 2 ) + . . . + A ( k ) + . . . M_{R+}=A+A^{(2)}+...+A^{(k)}+... MR+​=A+A(2)+...+A(k)+...(此处 + + +表示逻辑加)。

算法步骤

  1. 置新矩阵 A : = M R A:=M_{R} A:=MR​
  2. 置 i = 1 i=1 i=1
  3. 对所有的 j j j,如果 A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,则对 k = 1 , 2 , . . . , n k=1,2,...,n k=1,2,...,n, A [ j , k ] : = A [ j , k ] + A [ i , k ] A[j,k]:=A[j,k]+A[i,k] A[j,k]:=A[j,k]+A[i,k]
  4. i : = i + 1 i:=i+1 i:=i+1
  5. 如果 i ≤ n i≤n i≤n,回到第3步,否则停止。

注意此处矩阵元素的加法是逻辑加。

实例

令 X = 1 , 2 , 3 , 4 X={1,2,3,4} X=1,2,3,4, X X X中关系 R R R图如下所示,用Warshall算法求 t ( R ) t(R) t(R)的矩阵。
【离散数学】求解传递闭包的Warshall算法

  • n = 4 n=4 n=4,下面的下标索引值从 1 1 1开始
  • i = 1 i=1 i=1, [ 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 1 ] \begin{bmatrix} 0 & 1 & 0 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1100​0101​1001​⎦⎥⎥⎤​, j = 4 j=4 j=4符合要求
    • j = 4 j=4 j=4, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 1 1 1行加到第 4 4 4行, [ 0 1 0 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 0 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​0101​1001​⎦⎥⎥⎤​
  • i = 2 i=2 i=2, [ 0 1 0 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 0 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​0101​1001​⎦⎥⎥⎤​, j = 1 j=1 j=1、 j = 2 j=2 j=2、 j = 4 j=4 j=4符合要求
    • j = 1 j=1 j=1, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 2 2 2行加到第 1 1 1行, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​
    • j = 2 j=2 j=2, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 2 2 2行加到第 2 2 2行, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​,不变
    • j = 4 j=4 j=4, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 2 2 2行加到第 4 4 4行, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​,不变
  • i = 3 i=3 i=3, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​, j = 1 j=1 j=1、 j = 2 j=2 j=2、 j = 4 j=4 j=4符合要求
    • j = 1 j=1 j=1, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 3 3 3行加到第 1 1 1行, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​,不变
    • j = 2 j=2 j=2, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 3 3 3行加到第 2 2 2行, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​,不变
    • j = 4 j=4 j=4, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 3 3 3行加到第 4 4 4行, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​,不变
  • i = 4 i=4 i=4, [ 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​0001​1101​1101​1001​⎦⎥⎥⎤​, j = 1 j=1 j=1、 j = 4 j=4 j=4符合要求
    • j = 1 j=1 j=1, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 4 4 4行加到第 1 1 1行, [ 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​1001​1101​1101​1001​⎦⎥⎥⎤​
    • j = 4 j=4 j=4, A [ j , i ] = 1 A[j,i]=1 A[j,i]=1,第 4 4 4行加到第 4 4 4行, [ 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​1001​1101​1101​1001​⎦⎥⎥⎤​,不变
  • 结束,得到矩阵 [ 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 ] \begin{bmatrix} 1 & 1 & 1 & 1 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 \end{bmatrix} ⎣⎢⎢⎡​1001​1101​1101​1001​⎦⎥⎥⎤​

得到下面的有向关系图:

【离散数学】求解传递闭包的Warshall算法

上一篇:Java集合中hashset经典面试题


下一篇:Linux 用户管理 5 之用户属性属性