让我们假设我们只有整数,其值在1
到N
的范围内。接下来,我们将它们分成K-element
个多组。您如何找到包含这些多组最小可能数量的集合,但此多集合的总和包含1
到N
的所有数字?如果不明确,答案将是符合条件(首先找到)的任何集合。
例如,我们有N = 9
,K = 3
(1,2,3)(4,5,6)(7,8,8)(8,7,6)(1,9,2)(4,4,3)
包含1
到9
中所有数字的最小数量的多套数等于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)
但正如我所说,算法找到任何最小集合都没问题。
答案 0 :(得分:3)
您的问题是经典Set Covering problem的受限制版本,但仍然很容易证明它是NP-Hard。
这个问题的任何近似技术都是合理的。特别是,选择覆盖最多未覆盖项目的下一个子集的greedy solution - 尤其是。易于实施。
答案 1 :(得分:1)
正如@Ami Tavroy所说,这个问题通过简化为3-dimensional matching(here)来实现NP难度。
要进行缩小,请注意三维匹配的限制决策变体,当它缩小为精确的封面时(here):
...给定一个T和一个整数k,决定是否存在 三维匹配M⊆T与| M | ≥k。 ... 问题是 即使在k = | X |的特殊情况下,NP完全= | Y | = | Z |。1 [4] [5]在这种情况下,三维(支配)匹配是 不仅是一个固定的包装,而且还有一个精确的封面:套装M覆盖每个 X,Y和Z的元素恰好一次。[6]
如果您可以在P中解决其他问题,则可以在P中解决此变体 - 您可以在O(N ^ 3)
时间内生成所有三元组,然后设置封面,并检查是否K = N / 3
。因此,通过简化,原始问题也是NP难的。