Algorithm 循环的最大权重独立集问题(路径图修改)

Algorithm 循环的最大权重独立集问题(路径图修改),algorithm,dynamic-programming,graph-theory,Algorithm,Dynamic Programming,Graph Theory,问题:顶点上具有非负权重的图G=(V,E)。 所需输出:循环C中具有n个顶点的最大总重量的一组独立顶点(非相邻顶点)。vn(对于每个i

问题:顶点上具有非负权重的图G=(V,E)。 所需输出:循环C中具有n个顶点的最大总重量的一组独立顶点(非相邻顶点)。vn(对于每个i 此问题是此问题的修改:

我知道对于不包含循环的路径图的原始问题,解决方案是

a[i] = max(a[i - 1], a[i - 2] + w[i])
这是因为is可以是包含vn的,也可以是不包含vn的,在最坏的情况下,运行时间是O(n),因为每个子问题只占用n的一部分,并且由于它是分而治之的,所以减少了n的一部分

对于循环修改,这是我的方法:

  • IS包含v1但不包含vn
  • IS包含vn,但不包含v1
  • IS既不包含v1也不包含vn

  • 我不确定公式是否与循环修改的路径图(如上图所示)相同,也不确定如何编写它,也不确定运行时间是否仍然相同。请帮助。

    我们不需要这些案例不重叠。如果我们找到排除v1的解的最大值,以及排除vn的解的最大值,那么总的最大值必须与这两个候选解中的一个匹配,因为没有解同时包括v1和vn。对于这些子问题,路径DP非常有效。

    您的描述非常模糊,请提供更多上下文解释,因此递归关系仍然是:
    a[i]=max(a[i-1],a[i-2]+w[i])
    ?@RedApple是的,因为排除v1的解和由V\{v1},这是一个路径图;与vn类似。但我认为该等式允许同时包含v1和vi的场景,因为没有循环,但对于这种情况,该等式是否需要修改,以便在包含vi的情况下,我们确保排除vi-1和v1,因为它们都连接到vi。@RedApple you't running数组前n-1个元素和最后n-1个元素上的路径的算法。边界元素是“预移除的”。