首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >贪婪分配算法的复杂性

贪婪分配算法的复杂性
EN

Stack Overflow用户
提问于 2016-03-17 22:08:17
回答 1查看 895关注 0票数 1

赋值问题要求在给定的n乘n矩阵的不同行和列中找到一组具有最大可能和的n元素。在O(n^3)中,匈牙利算法可以得到最优解。然而,让我们考虑以下次优贪婪算法:

  1. 选择剩余矩阵中的最大元素
  2. 将此元素添加到结果集,即将该元素的行与其列匹配,并从矩阵中删除这些行和列。
  3. 从第1步重复。

实现这种算法的有效数据结构是什么?如果只要求O(n^2 log(n))对所有元素进行排序,那么它的时间复杂度可以是O(n^2)吗?

EN

回答 1

Stack Overflow用户

发布于 2016-03-18 04:04:30

一旦对元素进行了排序,就可以使用两个数组来跟踪已删除的行和列。在未经测试的Python中:

代码语言:javascript
复制
def greedy_max_match(weight):
    n = len(weight)
    row_deleted = [False] * n
    col_deleted = [False] * n
    sorted_weights = sorted(((weight[i][j], i, j)
                             for i in range(n) for j in range(n)),
                            reverse=True)
    for w, i, j in sorted_weights:
        if not row_deleted[i] and not col_deleted[j]:
            yield (i, j)
            row_deleted[i] = True
            col_deleted[j] = True
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36072577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档