Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 包含从1到N的所有数字的最小集合_Algorithm - Fatal编程技术网

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:谢谢,伟大的注释:-)