栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

  • Staal A.Vinterbo(2002年)。关于 k- 歧义问题的难点的一个注记。DSG技术报告2002-006。

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

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号