我有一个无向图,每条边都有权重。我想删除一组边,使每个顶点的度数最多为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匹配问题(我还发现它被称为双向流)。
答案 0 :(得分:2)
显然这被称为b匹配问题,实际上在多项式时间内是可解的。请参阅此cstheory答案:https://cstheory.stackexchange.com/questions/17724/what-is-complexity-of-this-max-edge-subgraph-problem