给定顶点的所有长度为k的路径

时间:2019-01-31 17:55:44

标签: algorithm graph

比方说,我有一个有向图G(V,E),边成本(实数)∈(0,1)。对于给定的i,我需要找到所有从(i,j)开始的顶点对如果存在从i到j的有向路径,且长度恰好为k(k是一个给定的数字,相对较小,可以视为恒定),且成本> = C,则两个顶点(i,j)匹配。 (C是给定的数字)路径的成本是其边的乘积,例如,如果从i到长度2的j结束的路径包含边e1和e2,则CostOfpath = cost(e1)* cost (e2)。

这必须在O(E + V * k)中完成,所以我认为正在修改DFS算法,以更新从给定起始顶点i直到其达到k长度的距离。找不到匹配项。但是我很难找到我可以在DFS中修改的内容。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当您需要考虑其中边缘数量固定的路径时,动态编程通常会有所帮助(而其他方法通常会失败)。

我们将dp[v][j]表示为从顶点i(固定)到具有v边的顶点j的路径的最大开销。

对于初始值,可以设置j==1的值:dp[v][1]是从iv(如果没有则为0)的边成本这样的边缘存在)。或者,如果您考虑一下,显然可以为j==0而不是j==1设置值:dp[i][0]为1,而dp[v][0]可以为{ {1}}。

现在,如果您有一些v!=i的值,则很容易计算出j的值:

j+1

这与Ford-Bellman's algorithm非常相似,只是后者不需要跟踪边的数量,因此可以使用一维数组。

这为您提供了dp[v][j+1] = max( dp[v'][j] * cost((v', v)) ) 中的解决方案。并非完全符合您的要求,但我怀疑O((E+V)*k)中是否存在解决方案。

(在上述解决方案中,我假设常数O(E+V*k)为正,因此零成本路径等效于绝对不存在的路径。如果需要,您可以专门考虑{{1 }}。)