复合关系
定义
设R是集合A到B的二元关系,S是集合B到C的二元关系,R和S的复合记作:R∘S,它是集合A到C的二元关系,仅当(a,b)∈R且(b,c)∈R时,(a,c)∈R∘S。
复合关系的矩阵表示
表示方法
设A={a1,a2,a3,...,an},B={b1,b2,b3,...,bm},C={c1,c2,c3,...,cp},R时A到B的二元关系,R的关系矩阵为:
MR=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
其中:
xij=⎩⎪⎪⎨⎪⎪⎧10(ai,bj)∈R(ai,bj)∈/R
S是B到C的二元关系,S的关系矩阵为:
Ms=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡y11y21⋮ym1y12y22⋮ym2⋯⋯⋱⋯y1py2p⋮ymp⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
令MR×MS=[zij],即有:
MR×MS=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1pz2p⋮znp⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
由矩阵乘法规则的:
zij=xi1×y1j+xi2×y2j+⋯+xim×ymj=k=1∑mxik×ykj
对于式中的xik×yik,当且仅当,xik,ykj同时为1时,计算结果才为1。又由于只有当(a_i,b_k) \in R \and (b_k,c_j) \in S时,才有x_{ik} \neq 0 \and y_{kj} \neq 0,故,由复合运算的定义可得,此时的R∘S中应该包含(ai,cj),即zij=0。
故以此法就能通过矩阵乘法去确定一个复合关系的关系矩阵,而在计算矩阵乘法的过程中,我们只关注k=1∑mxik×ykj中是否有1出现,故我们可以将此处的加法替换为布尔加
(即 0+0 = 0,1+0 = 0+1 = 1,1+1 = 1),这样在编程实现中,就能使用与
运算来代替10进制的加法运算,众所周知,代码的世界里,位运算要比10进制运算来的快。
我们用MR∘MS来表示使用布尔加
的矩阵乘法,于是可以得到如下定理
定理4.1:设R时A到B的二元关系,其关系矩阵为MR,S时B到C的二元关系,其关系矩阵为MS,则MR∘S=MR∘MS
特征
复合关系具有如下特征:
- 满足结合律
- Ri∘Rj=Ri+j(i,j为正整数);R0定义为{(a1,b1),(a2,b2),…,(an,bn)},即关系矩阵为单位矩阵
逆关系
定义
设R是A到B的二元关系,如果把R中的每一个有序对中的元素顺序互换,所得B到A的二元关系称为R的逆关系,记作R−1或R~
矩阵表示
若二元关系R的的关系矩阵为MR,则MR的转置MRT,就是关系R−1的关系矩阵
特征
有矩阵转置的运算规则可知:
(A×B)T=BT×AT
由此可得以下定理
定理4.2:设R是A到B的二元关系,S是B到C的二元关系,则(R∘S)−1=S−1∘R−1
定理4.3: 设R是A上的二元关系,R−1 是其逆关系,于是有:若R是 1. 自反的 2. 反自反的 3. 对称的 4. 反对称的 5. 可传递的 则R−1也是
关系的闭包运算
闭包运算的定义
在给定的二元关系中,添加最少量的有序对后,使其称为自反的,或对称的,或传递的二元关系,则这样的操作称为关系的闭包运算
自反、对称、传递闭包
设R是A上的二元关系,R的自反(对称、传递)闭包R′也是A上的二元关系,且满足:
- R′是自反的(对称的,传递的)
- R′⊇R
- 对于任何A上的自反的(对称的、传递的)二元关系R′′,如果R′′⊇R,则必有R′′⊇R′
通常R的自反闭包记作r®,对称闭包记作s®,传递闭包记作t®
求闭包
对于自反闭包和对称闭包,通过简单的添加“缺啥补啥”的原则即可求出
但在求传递闭包时,补充的元素可能会和已有的元素再次构成隐含的传递关系,那么处理起来就比较麻烦,下面介绍Warchall提出的求传递闭包的算法:
- 置矩阵M=MR(MR 是关系矩阵)
- 置 j = 1
- 对所有i,如果mij=1,则对k=1,2,…,n,置mik=mik+mjk,即把第j行加到第i行
- j = j + 1
- 如果$ j \leq n$,则跳转到步骤3,否则停止