比方说,我有一个有向图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中修改的内容。有什么想法吗?
答案 0 :(得分:1)
当您需要考虑其中边缘数量固定的路径时,动态编程通常会有所帮助(而其他方法通常会失败)。
我们将dp[v][j]
表示为从顶点i
(固定)到具有v
边的顶点j
的路径的最大开销。
对于初始值,可以设置j==1
的值:dp[v][1]
是从i
到v
(如果没有则为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 }}。)