Graph “这是什么意思?”;“路径矩阵”;及;传递闭包;图的方向(有向和无向)?

Graph “这是什么意思?”;“路径矩阵”;及;传递闭包;图的方向(有向和无向)?,graph,Graph,在讨论各种图算法时,我看到“路径矩阵”和“传递闭包”这两个术语在任何地方都没有很好的定义 在有向图和无向图的情况下,“路径矩阵”和“传递闭包”是什么意思?图论中的路径矩阵是一个矩阵大小n*n,其中n是图的顶点数。如果图中有从ith顶点到jth顶点的路径,则ith行和jth列上的元素为1,如果没有路径,则0 路径矩阵通常用于计算路径矩阵 这个定义没有区分有向图和无向图,但很明显,对于无向图,矩阵总是对称的 传递闭包是一个类似的概念,但它来自不同的领域。假设您有一组对象,对于其中一些对象,您知道其中

在讨论各种图算法时,我看到“路径矩阵”和“传递闭包”这两个术语在任何地方都没有很好的定义

在有向图和无向图的情况下,“路径矩阵”和“传递闭包”是什么意思?

图论中的路径矩阵是一个矩阵大小
n*n
,其中
n
是图的顶点数。如果图中有从
i
th顶点到
j
th顶点的路径,则
i
th行和
j
th列上的元素为
1
,如果没有路径,则
0

路径矩阵通常用于计算路径矩阵

这个定义没有区分有向图和无向图,但很明显,对于无向图,矩阵总是对称的

传递闭包是一个类似的概念,但它来自不同的领域。假设您有一组对象,对于其中一些对象,您知道其中一个肯定比另一个好,因此您可以编写
a>b
(“>”是“better”的缩写)。当然,你应该假设如果
a>b
b>c
那么
a>c
。这被称为及物性规则。然后,对于你想知道的任何两个对象,不管是其中一个比另一个好,还是未知。这就是闭包:首先,你有一个可能不可传递的关系,但是在假设了可传递性之后,你可以将它完成为一个可传递的关系

要解决这个问题,您需要构造一个有向图,其中一个顶点对应于所提到的每个对象(
a
b
c
,等等),其中有向边
u->v
存在当且仅当
u>v
。然后你可以构造第一段中定义的路径矩阵,它会给你答案:显然,两个顶点之间的路径的存在等同于一个关系链的存在,如
u>a>b>z>v
所以,根据及物性规则,
u>v


作为传递闭包的旁注,当您询问有向图和无向图时,给出的示例使用了非对称关系(>),此后该图是有向的,但情况并非总是如此。例如,任何等价关系总是满足传递性,但也必须满足对称性,所以对应的图是无向的。你可以找到对称关系(或图形)的传递闭包。

我认为unkulunkulu的答案相当完整,但考虑到JMSA的观点,我将进行另一次尝试

我们不要从路径矩阵开始,而是从开始。邻接矩阵是图的标准表示形式。如果adj是某些图的邻接矩阵G,那么adj[i][j]=1如果顶点i与顶点j相邻(即存在从ij的边),则0。换句话说,adj[i][j]==1当且仅当我们可以在一个“步骤”中从顶点i到顶点j

现在,让我们定义另一个矩阵,我称之为adj2adj2[I][j]==1当且仅当我们可以通过两个或更少的步骤从顶点I到顶点j。你可以称之为“两步邻接”矩阵。重要的是,adj2可以用adj来定义:

def adj2(i,j):
    if adj(i,j) == 1:
        return 1
    else:
        for k in range(0,n): # where n is the number of vertices in G
            if adj(i,k) == 1 and adj(k,j) == 1:
                return 1
    return 0
也就是说,如果ij相邻(即adj[i][j]=1),则adj[i][j]1)或者,如果存在其他一些顶点k,您可以从i步进到k,然后从k步进到j(即adj[i][j]==1和adj[k][j]==1

可以想象,您可以使用相同的逻辑定义“三步”邻接矩阵adj3adj4adj5,等等。如果继续足够长的时间(例如,到adjn,其中n是图中的顶点数),就会得到一个矩阵,告诉您从顶点i到顶点j是否有任何长度的路径。当然,这也是图的路径矩阵:adjn[i][j]==path[i][j]表示所有i,j。(注意:不要将路径矩阵与路径矩阵混淆。)

数学家会说,路径[i][j]是图Gadj[i][j]的传递闭包

传递闭包独立于图论而存在adj不是唯一具有传递闭包的事物。粗略地说,它们都有一个传递闭包

等式(=)和不等式(,=)运算符是此类函数的常见示例。然而,它们与adj的不同之处在于它们本身。“f(i,j)是可传递的”意思是如果f(i,j)==true,并且f(j,k)==true,那么f(i,k)==true。你知道这个属性适用于“小于”关系:从ab,你可以推断a。传递函数f的传递闭包就是f

adj通常不及物。考虑图表:

v1---v2---v3
在该图中,adj可能表示函数busBetween(city1,city2)。这里有一条从v1到v2的巴士(adj[1][2]==1),还有一条从v2到v3的巴士(adj[2][3]==1),但没有从v2到v3的巴士
v1---v2---v3
 \        /
   \----/