找到要移除的一组边,使得每个顶点的度数不超过K并且边权重的总和最大化

时间:2016-11-08 02:48:54

标签: algorithm graph mathematical-optimization linear-programming

我有一个无向图,每条边都有权重。我想删除一组边,使每个顶点的度数最多为K,但我想保持最大可能的边加权和。我已经提出了一个应该达到正确解决方案的整数程序。

我的问题是:

  • 这个问题有名字吗?如果是这样的话是什么?
  • 是否有已知的多项式时间算法来解决这个问题?到目前为止,我还没有能够提出任何问题。也许我错过了一些明显的东西。

对于funzies来说,这是我的整数程序。如果我犯了任何错误,请告诉我:

# given (graph, K):
# Let x[e] be 1 if we keep an edge e and 0 if we cut it

# Keep the best set of edges for each node
maximize
    sum(d['weight'] * x[(u, v)]
        for u in graph.nodes()
        for v, d in graph.node[u].items())

# The degree of each node must be less than K
subject to
    all(
        sum(x[(u, v)] for v in graph.node[u]) <= K
        for u in graph.nodes()
    )

编辑:

感谢David Eisenstat的帮助,我能够在第2节

中找到多项式时间算法的详细描述 Matthias Muller Hannemann和Alexander Schwartz在WAE&#39; 98中发表了

Implementing Weighted b-Matching Algorithms: Towards a Flexible Software Design

该描述将Pulleyblank的Blossom算法的1匹配情况概括为b匹配问题(我还发现它被称为双向流)。

1 个答案:

答案 0 :(得分:2)

显然这被称为b匹配问题,实际上在多项式时间内是可解的。请参阅此cstheory答案:https://cstheory.stackexchange.com/questions/17724/what-is-complexity-of-this-max-edge-subgraph-problem