【问题标题】:Smallest set of multi-sets that together contains all numbers from 1 to N最小的多集集合,它们一起包含从 1 到 N 的所有数字
【发布时间】:2015-06-12 03:01:53
【问题描述】:

假设我们只有整数,其值在1N 的范围内。接下来我们将它们分成K-element 多组。你如何找到这样的集合,它包含尽可能少的多集合,而这个多集合的总和包含从1N 的所有数字?如果有歧义,答案将是任何符合条件的集合(首先找到)。

例如,我们有N = 9K = 3

(1,2,3)(4,5,6)(7,8,8)(8,7,6)(1,9,2)(4,4,3)

包含从19 的所有数字的最小多集数等于4,可以是(1,2,3)(4,5,6)(7,8,8)(1,9,2)(1,2,3)(4,5,6)(8,7,6)(1,9,2)

有什么有效的算法可以找到这样的集合吗?

PS 写完答案后,我发现了另一个 4 元素集:(4,5,6)(1,9,2)(4,4,3)(7,8,8)(4,5,6)(1,9,2)(4,4,3)(8,7,6) 但正如我所说的算法找到任何最小集都可以。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    您的问题是经典的Set Covering problem 的限制版本,但仍然很容易证明它是NP-Hard

    这个问题的任何近似技术在这里都是合理的。特别是,选择覆盖最多未发现项目的下一个子集的greedy solution 是 esp。易于实施。

    【讨论】:

    • 哦,谢谢你的链接。实际上我的数据“非常小” N
    【解决方案2】:

    正如@Ami Tavroy 所说,这个问题通过简化为3-dimensional matching (here) 是NP-hard。

    要进行归约,请注意 3 维匹配的受限决策变体,当它归约到精确覆盖时 (here):

    ...给定一个集合 T 和一个整数 k,判断是否存在一个 3 维匹配 M ⊆ T 与 |M| ≥k。 ... 问题是 即使在 k = |X| 的特殊情况下也是 NP 完全的= |Y| = |Z|.1[4][5] 在这种情况下,3 维(主导)匹配是 不仅是一套包装,而且是一个精确的封面:一套 M 涵盖了每个 X、Y 和 Z 的元素恰好一次。[6]

    如果你能解决 P 中的另一个问题,这个变体可以在 P 中解决 - 你可以在 O(N ^ 3) 时间内产生所有三元组,然后设置覆盖,并检查 K = N / 3 是否。因此,通过归约,原始问题也是 NP 难的。

    【讨论】:

    • +e^0(绕过 SO 的评论政策)用于编写精确的缩减。
    • @AmiTavory:谢谢,很好的记号 :-)
    猜你喜欢
    • 2011-03-07
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2019-06-01
    相关资源
    最近更新 更多