图表的“路径矩阵”和“传递闭包”是什么意思(定向和无向)?

时间:2011-07-20 04:31:44

标签: graph

我对各种图算法的讨论,我看到术语“路径矩阵”和“传递闭包”在任何地方都没有明确定义。

对于有向图和无向图,“Path Matrix”和“Transitive Closure”是什么意思?

2 个答案:

答案 0 :(得分:7)

我认为unkulunkulu的答案非常完整,但鉴于JMSA似乎unsatisfied,我会再次尝试。

让我们不要使用路径矩阵,而应使用 adjacency matrix 。邻接矩阵是图的标准表示。如果 adj 是某个图 G 的邻接矩阵,那么 adj [i] [j] == 1 如果顶点 i 与顶点 j 相邻(即从 i j 有一条边),并且<强> 0 否则。换句话说, adj [i] [j] == 1 当且仅当我们能够从顶点 i 到顶点 j 时才能到达< em> one “step”。

现在,让我们定义另一个矩阵,我将其称为 adj2 adj2 [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

adj2 [i] [j] 1 ,如果 i j 相邻(即 adj [i] [j] == 1 )或者是否存在其他顶点 k ,以便您可以从步进我 k 然后从 k j (即 adj [i] [j] == 1和adj [k] [j] == 1 )。

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

数学家会说 path [i] [j] 是图 G adj [i] [j] 的传递闭包强>

传递闭包独立于图论; adj 并不是唯一具有传递闭包的东西。粗略地说,所有functions (in the programming sense) that take two arguments and return a Boolean value都有一个传递闭包。

等式(==)和不等式(&lt;,&gt;,&lt; =,&gt; =)运算符是此类函数的常见示例。这些与 adj 不同,因为它们本身就是 transitive 。 “ f(i,j)是传递性的”意味着如果 f(i,j)== true ,并且 f(j,k)== true ,然后 f(i,k)== true 。你知道这个属性是,例如,“小于”关系:来自 a&lt; b b&lt; c ,你可以推断 a&lt; ç即可。传递函数 f 的传递闭包只是 f

adj 不是通常传递。考虑图表:

v1---v2---v3

在此图表中, adj 可能代表函数 busBetween(city1,city2)。在这里,您可以从v1到v2( adj [1] [2] == 1 )和从v2到v3的总线( adj [2] [3] = = 1 ),但是从v1直接到v3( adj [1] [2] == 0 )没有总线。从v1到v3有一条总线路径,但v1和v3不是总线相邻的。对于此图, adj 不具有传递性,因此路径 adj 的传递闭包)与 adj

如果我们在v1和v3之间添加边缘,

v1---v2---v3
 \        /
   \----/

然后 adj 变得具有传递性:在每种可能的情况下, adj [i] [j] == 1 adj [j] [k] == 1 暗示 adj [i] [k] == 1 。对于此图表,路径 adj 是相同的。图表是无向的,对应于“symmetry”属性。如果我们为每个顶点添加循环以使v1,v2和v3各自与它们相邻,则生成的图形将是可传递的,对称的,并且“reflexive”,可以说代表相等(==)在集合{1,2,3}。

这开始说明图表如何表示不同的函数,以及函数的属性如何反映在图的属性中。一般来说,如果你让 adj 代表某个函数 f ,那么路径 f 的传递闭包。< / p>

关于传递闭包的正式定义,我建议您Wikipedia。一旦你理解了所有的数学术语,这不是一个难题。

答案 1 :(得分:6)

图论中的

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

Floyd Algorithm通常用于计算路径矩阵。

该定义不区分有向图和无向图,但很明显,对于无向图,矩阵总是对称的。

Transitive Closure 是一个类似的概念,但它来自不同的领域。想象一下,你有一组对象,对于其中一些你知道一个对象肯定比另一个好,所以你可以写0(“&gt;”是“更好”的简写)。绝对应该假设a > b a > b然后b > c。这称为传递规则。然后对于你想知道的任何两个物体,它们中的一个是否比另一个好,或者它是未知的。这是闭包:首先你有一个可能不具有传递性的关系,但在假定传递性之后,你可以把它完成一个传递性的。

要解决此问题,您需要构建一个有向图,其中一个顶点对应于每个提到的对象(a > cab等),其中有一个有向边{当且仅当c时才存在{1}}。然后你可以构造第一段中定义的路径矩阵,它会给你答案:显然,两个顶点之间的路径的存在等同于u -> v的关系链的存在,所以,通过传递性规则,u > v

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