快速确定密集完整图中从A到B的k长度路径数的方法

时间:2014-04-14 23:05:47

标签: graph-algorithm

给定一个完整的密集图(超过250.000个节点),确定从节点A到B的k长度路径数的最快方法是什么?

2 个答案:

答案 0 :(得分:2)

我知道这是一个老帖子,但我有完全相同的问题,但找不到答案。

我喜欢把这个问题看作是“没有重复的排列”,因为访问的节点的顺序很重要(排列),我们不回溯(没有重复)。没有重复的排列数是:n!/(n-r)!

对于具有N个节点的完整图,在创建给定A和B之间的路径时,还有N-2个剩余节点可供选择。要创建长度为K的路径,必须从剩余的K-1节点中选择排除A和B之后的节点。因此,在这种情况下,n = N-2,并且r = k-1。

插入上述公式得出:

(N-2)!/(N-K-1)!

示例:对于N = 5,对于节点0,1,2,3,4,以下路径可以从0到1:

0 1

0 2 1

0 2 3 1

0 2 3 4 1

0 2 4 1

0 2 4 3 1

0 3 1

0 3 2 1

0 3 2 4 1

0 3 4 1

0 3 4 2 1

0 4 1

0 4 2 1

0 4 2 3 1

0 4 3 1

0 4 3 2 1

这产生1条长度为1的路径,3条长度为2的路径,6条长度为3的路径,以及6条长度为4的路径。

这似乎适用于任何N> = 2且K <= N-1。

答案 1 :(得分:0)

您可以使用基本上动态编程:对于每个节点Y和路径长度k,如果您知道路径长度为K-1的A到X的路径数,则可以计算从长度为k的A到Y的路径数对于所有节点X.总复杂度为O(KV),其中K是您尝试计算的总路径长度,V是顶点数。