Algorithm 包含从1到N的所有数字的最小集合
让我们假设只有值在Algorithm 包含从1到N的所有数字的最小集合,algorithm,Algorithm,让我们假设只有值在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,
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)
,但正如我所说的,找到任何最小集的算法都很好。你的问题是经典的受限版本,但很容易证明它是经典的
对于这个问题,任何近似技术在这里都是合理的。特别是,选择下一个子集覆盖最未覆盖的项目的方法——特别是易于实现。您的问题是一个经典的受限版本,但仍然很容易证明它是
对于这个问题,任何近似技术在这里都是合理的。特别是,选择下一个子集覆盖大部分未覆盖项的方法——特别是容易实现。正如@Ami Tavroy所说,这个问题通过简化为()是NP难的 要进行缩减,请注意三维匹配的受限决策变量,当它缩减到精确覆盖()时: …给定一个集合T和一个整数k,确定是否存在 三维匹配⊆ T与| M |≥ K问题是 即使在k=| X |=| Y |的特殊情况下也是NP完全的= |Z |[4][5]在这种情况下,三维(主要)匹配是 不仅是一套包装,而且还有一个精确的封套:M套涵盖了每种包装 X、Y和Z的元素正好有一次。[6]
如果你能解决p中的另一个问题,这个变量可以在p中解决-你可以在
O(N^3)
时间中生成所有三元组,然后设置覆盖,并检查K=N/3
与否。因此,通过简化,原始问题也是NP难的。正如@Ami Tavroy所说,这个问题通过简化为()是NP难的
要进行缩减,请注意三维匹配的受限决策变量,当它缩减到精确覆盖()时:
…给定一个集合T和一个整数k,确定是否存在
三维匹配⊆ T与| M |≥ K问题是
即使在k=| X |=| Y |的特殊情况下也是NP完全的=
|Z |[4][5]在这种情况下,三维(主要)匹配是
不仅是一套包装,而且还有一个精确的封套:M套涵盖了每种包装
X、Y和Z的元素正好有一次。[6]
如果你能解决p中的另一个问题,这个变量可以在p中解决-你可以在
O(N^3)
时间中生成所有三元组,然后设置覆盖,并检查K=N/3
与否。因此,通过简化,原来的问题也是NP难的。哦,谢谢链接。实际上,我的数据“非常小”,N<64,集合的数量不能超过500,所以我想我会尝试维基百科上的线性规划方法+1并接受。哦,谢谢你的链接。实际上,我的数据“非常小”,N<64,集合的数量不能超过500,所以我想我会尝试维基百科上的线性规划方法+1并接受。+e^0(绕过SO的评论策略)用于编写精确的缩减。@AmiTavory:谢谢,伟大的注释:-)+e^0(绕过SO的评论策略)用于编写精确的缩减。@AmiTavory:谢谢,伟大的注释:-)