假设我有一个在每个节点上都有权重的有向图。任意两个节点之间的路径权重定义如下:路径中所有节点的总和,并乘以该路径中的节点数。
我们希望找到一个顶点不相交的路径覆盖,它具有该覆盖中所有路径的最大权重总和。
我知道这是一个NP问题。有没有解决这个问题的算法?或者是否有任何问题可以解决这个问题?
答案 0 :(得分:0)
有一个O(3 ^ n poly(n)) - 时间算法。步骤是
步骤1由动态程序完成,动态程序的表由(a)路径中的顶点集合(b)路径中的第一个顶点组成。第2步也是通过动态程序完成的,其中一个表将顶点集映射到该子图上不相交路径可达到的最大值。
步骤1的重复发生是
IsPath({v}, v) = true (for all vertices v)
IsPath(S, v) = exists w in S - {v} such that v->w is an arc and IsPath(S - {v}, w) (for all sets of vertices S, for all v in S).
现在收集所有集合P,使得在P中存在v,使得IsPath(P,v)。计算每条路径的分数。
BestCover({}) = 0
BestCover(S) = max Score(P) + BestCover(S - P) over all P subset of S such that P is a path (for all nonempty S).