您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

给定N组元素,找到M组的最小并集

给定N组元素,找到M组的最小并集

这个问题被称为MINIMUM k -UNION,它是NP-hard,如下所示:

因此,没有人知道有什么算法可以解决输入时间为多项式的时间运行算法。

在您的情况下,您可能会乐于接受一个近似的解决方案:即包含少量成分的配方的集合,但不一定是最小的此类集合。因此,我建议您尝试使用 贪婪算法 :通过在每个阶段添加最小化并集的配方来迭代地构建配方集合。这是Python中的一个简单的实现:

def small_union(sets, k):
    """
    Choose `k` elements from `sets` and return their union.  Attempt
    to return a fairly small union using a greedy approach.

    >>> small_union([{1,2}, {2,3}, {1,2,3}, {1}, {2}], 3)
    set([1, 2])
    >>> small_union([{1,2}, {2,3}, {3,4}, {1,4}], 3)
    set([1, 2, 3, 4])
    """
    union = set()
    for _ in xrange(k):
        s = min(sets, key = lambda s: len(s | union))
        sets.remove(s)
        union |= s
    return union
其他 2022/1/1 18:15:36 有580人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶