带加权边的最大分布

时间:2014-05-18 15:33:20

标签: algorithm greedy

想象一个图表,其中每个顶点都有一个值(例如,石头数量)并通过边连接,表示在石头中穿过该边缘的成本。我想找到最大可能数量的宝石,这样每个顶点Vn> =这个值。顶点可以将石头交换给其他人,但交换的值会被距离或连接它们的边缘的重量减去

我需要将其解决为贪婪算法和O(n)复杂度,其中n是顶点数量,但我在识别子问题/贪婪选择时遇到问题。我希望有人可以提供踩踏石头或一些提示如何实现这一点,非常感谢

1 个答案:

答案 0 :(得分:1)

问题摘要

我不确定我是否正确理解了这个问题,所以首先我要总结一下我的理解。

  1. 我们有一个顶点为v1,v2,..,vn和加权边的图。让vi和vj之间的权重为W [i,j]

  2. 每个顶点都以一些石头开头,让我们称顶点vi上的石头数量等于A [i]

  3. 您希望执行多次转移以最大化min的值(A [i]为i = 1..n)

  4. x stone可以在vi和vj之间传输,如果x> w [i,j],此操作会将值转换为:

  5.  A[i] -= x
     A[j] += x-W[i,j]  # Note fewer stones arrive than leave
    

    这是对的吗?

    响应

    我认为这个问题是NP难的,因为它可以用来解决3-SAT,这是一个已知的NP完全问题。

    对于带有M子句的3-sat示例,例如:

    (A+B+!C).(B+C+D)
    

    构造一个有向图,其中每个子句都有一个节点(没有宝石),每个变量的节点有3M + 1个宝石,每个变量有两个辅助节点,一个石头(一个代表具有正值的变量) ,一个代表具有负值的变量。

    然后按如下所示连接节点:

    enter image description here

    当且仅当3-sat可溶时,此图将具有所有顶点具有值> = 1的解决方案。

    关键是每个红色节点(例如变量A)只能向A = 1或A = 0发送石头,但不能同时发送两者。如果我们为绿色节点A = 1提供石块,那么这个节点可以为所有使用该变量的蓝色条款提供宝石。

    (您的原始问题不涉及有向图,但我怀疑这个额外的更改会对问题的复杂性产生重大影响。)

    摘要

    我担心找到这个问题的O(n)解决方案会非常困难。