【发布时间】:2015-04-07 09:45:04
【问题描述】:
我有一组整数,我想找到其中元素不以特定方式相互关联的最大子集。例如一个子集,如果其中任何元素乘以 13,则结果不在该子集中。
我的第一个想法是遍历所有可能的子集,过滤掉那些不满足条件的,然后找到最大的一个,但这太慢了,我不知道如何生成所有可能的子集。
【问题讨论】:
-
答案在很大程度上取决于您所说的“相关”。一个明显的例子是
sum{subset} = sum{set}/2的关系,这是分区问题,它没有已知的有效(多项式时间)。 (如果是整数,则存在伪多项式) -
但是,如果问题只是“如何创建所有可能的子集” - 这将是一个骗局,这里有很多关于它的问题。 (简单的解释,使用递归,并且对于每个元素“猜测”它是否在子集中并递归,当从递归返回时,“猜测”另一个选项。
-
问题是如何求最大子集中的元素个数。
-
那要看具体关系了。
-
1,2,26 不正确,因为 2*13=26。删除所有重叠也会删除 26,并且您只会得到 [1,2] - 这是次优的。
标签: algorithm