我想要一个算法或指针来进一步研究如何在加权无向图中找到两个节点之间的固定长度路径。
答案 0 :(得分:0)
查找从给定节点到给定节点的给定长度的简单路径是NP-complete:Hamiltonian cycle problem是此类的问题,并且它是NP完全的。
如果边缘是加权的,那么subset sum problem就是这个问题的一个特例,所以我们仍然是NP完全的
在这两种情况下,您都可以枚举路径,修剪不简单的路径或theta(b^len)
预期时间过长的路径,其中b
是分支因子(平均outdegree)。< / p>
找到允许重复边(有时称为步行)的路径可以在[长度]矩阵乘法中完成,总计O(v^3 * len)
时间复杂度or better。
让A
表示图的邻接矩阵。然后A^len
保持每对顶点之间的长度为len的路径数。您可以在乘法过程中使用1+1 = 1
(布尔加法 - 不确定它如何与高级矩阵乘法算法一起使用),然后您只能获得这样的路径,但同时避免整数溢出。
准备A^1..A^len
(O(n^3 len)
)。然后,对于d
中的每个距离1..len
,找到一个顶点v[d]
,它是v[d-1]
的子项,并且具有len-d
- 到目标的长路径(O(n len)
)。
如果您只需要知道这样的路径是否存在,那么您不需要A..A^len
,只需要A^len
。您可以使用square-and-multiply算法在O(n^3 log(len))
时间内计算,或者与Coppersmith-Winograd matrix multiplication algorithm结合使用时计算O(n^2.37 log(len))
。
或者,您只需搜索[node x distance]
状态空间,然后在O(n*b*len)
中完成。