我在定向加权图中遇到最短路径问题。我知道Dijkstra
,BFS
,DFS
。但是,我有a set of vertices S
作为起点和a set of vertices E to end
。 S和E不重叠。那么如何找到边缘权重最小的边缘集合?边集不必包括S中的所有顶点,但必须包含reach all vertices in E
。我应该从Dijkstra开始{Si,Ei}的所有排列并优化或者我会错过任何我应该知道的重要算法吗?甚至我过度思考......
答案 0 :(得分:3)
如果我理解正确,你想在图中找到包含E的所有顶点和S中至少一个顶点的最小权重树。
这个问题被称为general Steiner tree,它是NP难的。因此,您可能希望的最好的是指数时间算法或某种近似(可能会在删除一些不需要的子树之后想到整个图的minimum spanning tree)。
有一个简单的DP解决方案在O(2 ^ n *(n + m))中工作:设f(S)是图中跨越S中所有节点的最小树的成本。它可以可以看出,存在这样一个树T,使得对于某些 x ,T \ {x}的权重为f(S \ {x}),因此转换可以在O(n +)中完成米)。