假设我有一个有向图G(V,E),边成本∈(0,1)。对于给定的i,我需要找到从i开始的所有顶点对(i,j),“ “。如果存在从i到j的有向路径,且长度恰好为k(k是一个给定的数字,相对较小,可以视为恒定),且成本> = C(C是一个顶点,则两个顶点(i,j)匹配。给定的数字)。路径的成本是其边的乘积,例如,如果从i开始并以长度2的j结束的路径包含边e1和e2,则CostOfpath = cost(e1)* cost(e2)。
我考虑过找到所有长度为k的路径,然后检查这些路径的开销以查看它是否在边界之内。但是,我不确定如何实现这个想法(也许使用BFS或dijkstra),我还认为这是蛮力的,所以可能有一个更聪明的主意?
答案 0 :(得分:1)
首先,对图中的所有成本进行log
的计算,那样,在对它们进行求和时,就像乘以权重(自log a + log b = log a * b
起)。然后,您将能够使用所有已知的算法。
从这里我可以看到两种解决方案:
找到all pairs shortest paths,然后从它们中仅提取长度为k
的路径。这将需要O(V^3)
来查找路径。
使用this问题来查找所有长度为k
的路径。您将需要自己找到时间复杂度。
您可以随后遍历结果,并仅获取具有所需总和的结果。这将花费O(E)*O(V^2)
每个路径的长度*路径数。
更具逻辑性的选择是删除算法过程中不需要的路径。
别忘了在结尾处返回原始长度。
祝你好运。