类似地,传递闭包,是在原关系基础上,补充符合传递性要求的关系。
对称闭包,是在原关系基础上,补充符合对称性要求的关系。
传递闭包,最简单的技术是采用 【弗洛伊德算法】Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。
Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。
Floyd-Warshall算法的原理是动态规划。
设Di,j,k为从i到j的只以(1..k)集合中的节点为中间节点的最短路径的长度。
1.若最短路径经过点k,则Di,j,k = Di,k,k − 1 + Dk,j,k − 1;
2.若最短路径不经过点k,则Di,j,k = Di,j,k − 1。
因此,Di,j,k = min(Di,k,k − 1 + Dk,j,k − 1,Di,j,k − 1)。
在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维。
代码请见:
关系的闭包 设R是非空集合A上的二元关系,在关系R中,添加最少的有序对,新关系用R¢表示,使得R¢具有关系的自反(对称、传递)性质,R¢就是R的自反(对称、传递)闭包,记作r(R) ,s(R)和t(R)。: Kenneth H.Rosen 第6版离散数学的定义:设R是非空集合A上的关系,在关系R中,可能有或无性质P,如自反(r),对称(s),传递(t),若存在包含R,满足性质P的关系S,使得S是所有包含R,满足P的关系的子集,那么称S是R关于P的闭包(有时这样的闭包不存在)