Algorithm 找到一组要删除的边,使每个顶点的阶数不超过K,且边权重之和最大化

Algorithm 找到一组要删除的边,使每个顶点的阶数不超过K,且边权重之和最大化,algorithm,graph,mathematical-optimization,linear-programming,Algorithm,Graph,Mathematical Optimization,Linear Programming,我有一个无向图,每条边上都有权重。我想删除一组边,这样每个顶点的阶数最多为K,但我想保留边的最大可能加权和。我已经想出了一个整数程序,应该能得到正确的解 我的问题是: 这个问题有名字吗?如果是,是什么 有没有已知的多项式时间算法来解决这个问题?到目前为止,我还没能想出任何办法。也许我错过了一些明显的东西 为了好玩,这里是我的整数程序。如果我犯了任何错误,请告诉我: # given (graph, K): # Let x[e] be 1 if we keep an edge e and 0 i

我有一个无向图,每条边上都有权重。我想删除一组边,这样每个顶点的阶数最多为K,但我想保留边的最大可能加权和。我已经想出了一个整数程序,应该能得到正确的解

我的问题是:

  • 这个问题有名字吗?如果是,是什么
  • 有没有已知的多项式时间算法来解决这个问题?到目前为止,我还没能想出任何办法。也许我错过了一些明显的东西
为了好玩,这里是我的整数程序。如果我犯了任何错误,请告诉我:

# 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()
    )
#给定(图K):
#设x[e]为1,如果我们保持边e,则为0,如果我们切割它
#为每个节点保留最佳边集
最大化
总和(d[‘重量’]*x[(u,v)]
对于graph.nodes()中的u
对于图中的v,d.node[u].items())
#每个节点的阶数必须小于K
从属于
全部(

图中v的和(x[(u,v)]。节点[u])显然,这被称为b-匹配问题,事实上可以在多项式时间内解决。参见此理论答案:

显然,这被称为b-匹配问题,事实上可以在多项式时间内解决。参见此理论答案:

特例k=1是最大权一般匹配,可以在多项式时间内解决。My直觉是,如果有一个多项式时间算法,那么你可以通过推广增广路径引理,然后应用原始对偶框架来解决未加权问题。特例k=1是最大权广义匹配,它在多项式时间内是可解的。我的直觉是,如果有多项式一般来说,通过推广增广路径引理,然后应用原始-对偶框架来解决未加权问题,就可以得到它。