矩阵运算以枚举通过n-partite图的所有路径

时间:2009-02-25 20:10:34

标签: math matrix graph-theory

我有一个n-partite(无向)图,作为邻接矩阵给出,例如这个:

  a b c d
a 0 1 1 0
b 0 0 0 1
c 0 0 0 1
d 0 0 0 0

我想知道是否有一组矩阵运算可以应用于此矩阵,这将产生一个矩阵,该矩阵“列出”此图中所有路径(长度为n,即通过所有分区) 。对于以上示例,存在路径a-> b-> d和a-> c-> d。因此,我想得到以下矩阵:

a b c d
1 1 0 1
1 0 1 1

第一个路径包含节点a,b,d,第二个路径包含节点a,c,d。如有必要,结果矩阵可能有一些全0行,如下所示:

a b c d
1 1 0 1
0 0 0 0
1 0 1 1
0 0 0 0

谢谢!

P.S。我已经研究了用于计算传递闭包的算法,但这些算法通常只能说明两个节点之间是否存在路径,而不是直接指向该路径上的哪些节点。

2 个答案:

答案 0 :(得分:4)

你可以做的一件事是计算矩阵A的n次方。结果将告诉你从任何一个顶点到任何其他顶点的长度为n的路径数。

现在,如果你有兴趣了解路径上的所有顶点,我认为使用纯矩阵运算是不可取的。请记住,您有一个n-partite图表,我将建立一个如下数据结构:(请记住,除了小值之外,所有空间成本都是昂贵的。)

每列中的每个节点都有一个条目。如果此节点在我们指定的起始顶点或起始集合的第n次迭代中可到达,则第n列将包含1 in,否则为0。每个列条目还将包含一个指向n-1列中顶点的后向指针列表,这些顶点指向第n列中的此顶点。 (这就像维特比算法一样,除了我们必须为每个条目维护一个后向列表而不仅仅是一个。)这样做的复杂性是(m ^ 2)* n,其中m是顶点的数量。图表,n是所需路径的长度。

我对你的顶部矩阵感到有点困惑:使用未校正的图形,我希望邻接矩阵是对称的。

答案 1 :(得分:2)

不,没有纯矩阵方式来生成所有路径。请使用纯组合算法。

'你能做的一件事就是计算矩阵A的n次方。结果将告诉你从任何一个顶点到任何一个顶点的长度为n的路径数。'

matriax的力量产生的不是路径。