离散数学中传递闭包怎么求 通俗一点

离散数学中传递闭包怎么求通俗一点... 离散数学中传递闭包怎么求 通俗一点 展开
 我来答
快乐传播者fd
2019-06-17 · TA获得超过1万个赞
知道答主
回答量:26
采纳率:100%
帮助的人:4214
展开全部

方法:warshall法,即运行n次,每次使得MR[n][i],MR[i][n]都为1时使得MR[i][j]为1,否则还是为MR[i][j]。

传递闭包的计算过程一般可以用Warshell算法描述: 

For 每个节点i Do
For 每个节点j Do
If j能到i Then
For 每个节点k Do
a[j, k] := a[j, k] Or ( a[j, i] And a[ i, k] ) 

其中a数组为布尔数组,用来描述两个节点是否相连,可以看做一个无权图的邻接矩阵。算法过程跟Floyd很相似,三重循环,枚举每个中间节点。不过传递闭包只需要求出两个节点是否相连,而不用求其间的最短路径长。

传递性:对于一个节点i,如果j能到i,i能到k,那么j就能到k。求传递闭包,就是把图中所有满足这样传递性的节点都弄出来,计算完成后,就知道任意两个节点之间是否相连。 

传递闭包的定义:R’是R(不具有传递性质)变动最少的步骤得到的具有传递性质的关系。

扩展资料

算法实例:

#include<stdio.h>

#define  N 10 

int judge(int k,int i,int j)

{

if(i==1 && j==1){

return 1;

}

return k;

}

void warShall(int MR[N][N],int n)

{

for(int k=0;k<n;k++){

for(int i=0;i<n;i++){

for(int j=0;j<n;j++){

if(i!=k || j!=k){

MR[i][j]=judge(MR[i][j],MR[k][j],MR[i][k]);

}

}

}

}

int main()

{

int MR[10][10];

int mul;

scanf("%d",&mul);

for(int i=0;i<mul;i++){

for(int j=0;j<mul;j++){

scanf("%d",&MR[i][j]);

}

}

printf("求传递闭包为:\n");

warShall(MR,mul);

for(int i=0;i<mul;i++){

for(int j=0;j<mul;j++){

printf("%d ",MR[i][j]);

}

printf("\n");

}

return 0;

}

运行结果:

参考资料:百度百科-传递闭包

zzllrr小乐
高粉答主

2015-12-27 · 小乐图客,小乐数学,小乐阅读等软件作者
zzllrr小乐
采纳数:20147 获赞数:78755

向TA提问 私信TA
展开全部
传递闭包就是反复求矩阵的幂,直到结果不再变化为止。
从矩阵上,如何观察和判断传递性,可以这样做:
http://jingyan.baidu.com/article/ea24bc399a9cbcda63b3316d.html
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-08-18
展开全部
因为∅∪∅=∅
所以∀n∅ⁿ=∅
t(∅)=∪∅ⁿ=∅

t(R)=∪Rⁿ
(t(R))²=∪R²ⁿ ⊆ ∪Rⁿ

(t(R))ⁿ=∪Rⁿⁿ ⊆ ∪Rⁿ
从而t(R)∪(t(R))²∪(t(R))³⋯
=∪Rⁿ
即t(t(R))=∪Rⁿ = t(R)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式