找到最大顶点不相交的路径覆盖

时间:2016-11-18 05:22:24

标签: algorithm path np cover

假设我有一个在每个节点上都有权重的有向图。任意两个节点之间的路径权重定义如下:路径中所有节点的总和,并乘以该路径中的节点数。

我们希望找到一个顶点不相交的路径覆盖,它具有该覆盖中所有路径的最大权重总和。

我知道这是一个NP问题。有没有解决这个问题的算法?或者是否有任何问题可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

有一个O(3 ^ n poly(n)) - 时间算法。步骤是

  1. 查找可以在路径中排列的所有顶点集。
  2. 解决最终的套装问题。
  3. 步骤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).