从邻接矩阵计算路径矩阵

时间:2013-07-25 14:04:29

标签: graph adjacency-matrix

我正在学习从邻接矩阵(比如AM1)计算路径矩阵的方法。

具有n个顶点的图G的路径矩阵是布尔n * n矩阵,其元素可以定义为:

  p[i][j]=1(if there is a path from i to j)
  p[i][j]=0(otherwise)

我学到的步骤如下:

如果我们将邻接矩阵A [] []自身相乘,我们得到A ^ 2(比如AM2),其每个顶点A [i] [j]基本上表示从i到j的路径长度2的路径数。

类似地,如果我们将邻接矩阵乘以3次,即我们得到A ^ 3(比如AM3),其每个顶点A [i] [j]基本上表示从i到j的路径长度3的路径数。等等。

现在我们定义一个Matrix X,以便:

  

X = AM1 + AM2 + AM3 ... AMn(其中n是顶点数)

从这个X矩阵中,我们通过将所有非零顶点替换为1来计算路径/到达能力矩阵

我无法理解的是如何将所有非零顶点替换为1给出了路径矩阵。 为什么我们计算或添加所有矩阵到AMn。?。

据我所知,X [i] [j]表示路径长度n或小于n的路径数,从i到j,但为什么我们只计算直到n,而不是更多或更少?

请解释一下!

1 个答案:

答案 0 :(得分:3)

  

我无法掌握的是如何将所有非零顶点替换为1给出了路径矩阵?

如果A^ki->j步之后从k给出了路径数,则非零数字表示路径矩阵中的相应条目应为True,因为至少存在一条路径。现在,k=1(循环),k=2k=3 ......一直到k=N ...

  

但为什么我们只计算到n,而不是更多或更少?

如果在只有N个顶点的图上有i->j的路径,最坏的情况是有一个路径占用每个中间顶点,即N-1步,因此需要计算A^N

请注意,还有其他更便宜的方法来计算所谓的路径矩阵。基本上(对于无向图),您正在寻找图的connected components,这可以通过深度优先搜索在线性时间内完成。要计算所有A^k,每次乘法需要大约O(N^3)次,N次,总共大约O(N^4)。这可以通过矩阵的对角化O(N^3)来避免,其特征值和特征向量可以对图的结构有所了解(远远超过路径矩阵本身!)。