【离散数学】求解传递闭包的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)+...(此处 + + +表示逻辑加)。
算法步骤
- 置新矩阵 A : = M R A:=M_{R} A:=MR
- 置 i = 1 i=1 i=1
- 对所有的 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]
- i : = i + 1 i:=i+1 i:=i+1
- 如果 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)的矩阵。
- 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}
⎣⎢⎢⎡0001110001011001⎦⎥⎥⎤,
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} ⎣⎢⎢⎡0001110101011001⎦⎥⎥⎤
-
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}
⎣⎢⎢⎡0001110101011001⎦⎥⎥⎤,
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} ⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤
- 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} ⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤,不变
- 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} ⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤,不变
-
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}
⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤,
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} ⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤,不变
- 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} ⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤,不变
- 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} ⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤,不变
-
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}
⎣⎢⎢⎡0001110111011001⎦⎥⎥⎤,
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} ⎣⎢⎢⎡1001110111011001⎦⎥⎥⎤
- 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} ⎣⎢⎢⎡1001110111011001⎦⎥⎥⎤,不变
- 结束,得到矩阵 [ 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} ⎣⎢⎢⎡1001110111011001⎦⎥⎥⎤
得到下面的有向关系图:
标签:闭包,begin,end,0001,Warshall,离散数学,bmatrix,1101,1001 来源: https://blog.csdn.net/weixin_43896318/article/details/113791915