网站大量收购独家精品文档,联系QQ:2885784924

传递闭包及WARSHALL算法-Read.PPT

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
传递闭包及WARSHALL算法-Read

§3.4 传递闭包及WARSHALL算法 设S是一个含有n个元素 a1,a2,…,an 的集合。S上的二元关系A是笛卡儿积S×S的子集。 如(ai,aj) ∈ A,则ai与aj有A关系。 关系A可用n阶方矩阵M表示,矩阵M的第i行,第j列元素Mij定义为 1 (TRUE), 如果(ai,aj) ∈ A 0 (FALSE), else 称M为关系矩阵 图G是有序对(V,E),其中非空集合V是图G的节点集合,E是图的边集合。 图G的邻接关系A定义为:如从节点i到节点j有一条边,则 (i,j) ∈ A 否则 (i, j) !∈ A 显然关系A可用方矩阵M表示,其阶数为图的节点数|V|, Mij为T当且仅当节点i到节点j有一条边。 这样的矩阵称为图G的邻接矩阵。 设R是一个关系,其传递闭包R’也是关系,定义为: (ai,aj) ∈ R’当且仅当存在序列 ak1,ak2,…,akp , 且 ak1= ai , akp= aj , (aks,aks+1 ) ∈ R (s=l,2 ,…, p-1) 相应于传递闭包的关系矩阵称为传递闭包矩阵。 图G=(V,E)的邻接关系A的传递闭包A*的含意为, 若(i, j ) ∈ A*,则有一条从节点i到节点j的路径, 因而邻接关系的传递闭包也称为图的连通关系, 相应的矩阵M*称为G的连通矩阵。 矩阵M及矩阵M*的元素都是逻辑值真(T)或假(F), 所以M和M*都是逻辑矩阵。 矩阵M的乘方 M2=M×M 也是n阶方矩阵,其元素定义为 n M2ij=∑Mis×Msj s=1 其中的乘法、加法分别是逻辑乘(AND),逻辑加(OR).显而易见M2ij为T,则从节点i到 节点j有一条长度为2的路径。 同样可以定义关系矩阵的幂 Mk=Mk-1×M (K1) 其元素 n Mkij=∑Mk-1is×Msj s=1 显而易见Mkij为T,则从节点i到节点j有一条长度为k的路径。 因此若(i,j) ∈A*,则存在Kn使得 Mkij =T 从而 n-1 M*=M+M2+ · · · +Mn-1=∑Mk s=1 其中加法是逻辑加(OR). 如果认为每个节点与其本身邻接,即 (i,i) ∈ A 则Mij =T表示从节点i到节点j有一条边或i=j,此即从i到j有一条长度不超过1的路径, M2ij=T则表示从i到j有一条长度不大于2的路径,同样地,Mkij=T表示从i到j有一条长度不大于k的路径,因此有 M*=Mn-1 · M*=Mk · (k=n一1) 为计算传递闭包矩阵只须计算M矩阵的n一1次幂Mn-1即可。如已知关系矩阵M, 计算传递闭包矩阵M*的方法为:将矩阵M连续平方 log 2 (n一1)次。 矩阵平方运算的时间复杂度为0(n3),从而计算M*的时间复杂度为0(n3 log(n-1)). 下面给出的WARSHALL算法的输出也是传递闭包矩阵,其复杂度为O(n3)。 void WARSHALL 输入:M,关系R的关系矩阵 输出:M*,R的传递闭包矩阵 for (i=1; i= n; i++ ) for (j=1; j= n; j++ ) if(M [j,i]=T) for (k=1; i= n; i++ ) m [j,k] + =m [i,k]; (4) 上述算法必定会在有限时间内结束运行。 整个算法是三重嵌套的循环语句, 易知WARSHALL算法的时间复杂度为O(n3)。 在证明算法的正确性之前, 先看一下算法是如何运行的. 当i和j固定时, 内层for循环一次就是把m矩阵的第j行的元素从左到右地更新一遍. 当i固定时, 中间层for循环一次, 就是把m矩阵的所有行从上到下地更新一遍. 因此, 整个算法就是把m矩阵的所有元素更新n遍. 定理 WARSHALL算法的输出矩阵是输入关系矩阵的传递闭包矩阵。 证 注意到算法的输入、输出矩阵都存储在M中,与M相应的关系用A表示。 输入关

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档