【发布时间】:2017-10-27 19:37:46
【问题描述】:
有N 数字列表。从每个列表中选择k 数字并返回可以以这种方式形成的最大集合(无重复)。如果可能有多个相同大小的集合,则返回其中任何一个都是可以接受的。
例如,如果 N = 3,k = 2,
l1: [1, 2, 3]
l2: [2, 7]
l3: [3]
那么最优结果是[1, 3, 2, 7]。从l1 中选择[1, 3],从l2 中选择[2, 7],从l3 中选择[3]。 (虽然还有其他选择,但结果集中的元素数量少于这个,所以这个是最佳选择。)
我认为这是一个 NP-complete 问题,唯一的方法是枚举。
请解释一下。提前致谢!
【问题讨论】:
-
也许我不太了解这个问题,但似乎您可以将所有列表中的所有元素添加到一个集合中,并在线性时间内获得最大结果,不是吗? (然后您可以从结果集中随机选择
k数字) -
@alfasin 那么它不会被授予
k号码被选中。如果 l1 = [1,2], l2 = [3,4,5,6,7], 如果 k = 2, 那么从 [1,2,3,4,5,6,7] 中随机选择 4 可能会返回[4,5,6,7] 不包括 l1 中的 1,2。所以在这种情况下,最终结果必须包含来自 l1 的 [1, 2]。有意义吗? -
但是如果你正在寻找
max解决方案,你真的不能随意做任何事情...... -
@alfasin,感谢您的跟进。在这种情况下,我的意思是最终结果可以是 [1,2,3,4] 或 [1,2,4,7],两者都被接受。我希望我的算法具有这种随机性。
-
很抱歉没有很好地解释自己:如果你想要最大的结果,在你的最后一个例子中 - 答案必须包含
1,2。既然你有这个限制,它就不再是“随机的”了。
标签: algorithm np-complete