【发布时间】:2015-11-24 07:35:53
【问题描述】:
给定一组整数集合 S,找到最小的整数集合 X,使得 S 中的每个集合至少包含一个整数,也包含在 X 中。
最小集合是由具有最低基数(元素个数最少)的集合定义的,如果有多个具有相同最小基数的集合,那么最小集合就是字典序上最先出现的集合(例如, ( 1, 3, 6) 在 (1, 4, 5)) 之前
例如,如果 S 是:
{
(4,7)
(7,10)
(4, 15, 18)
(7, 10, 18)
(4, 7, 15, 18)
(7, 10, 18)
}
X 的最小可能基数是 2。X 的可能集合按字典顺序排序,基数为 2:(4,7), (4, 10), (7, 15), (7, 18)。由于 (4,7) 最早出现,它是 X 的解决方案。
应该使用什么算法在合理的时间内解决这个问题?
对输入数据的一些约束如下:
- 每个整数都在 1 到 20 之间
- S 最多包含 100 个集合
- 每个整数在 S 中至少有 2 个集合
- 整数集将始终按升序排列
【问题讨论】:
-
可能重复? (虽然技术上不在 SO..)cs.stackexchange.com/questions/3276/….
-
我们可以帮忙做作业;但不会为你做。尤其是,我们不会解决您参与程度是复制粘贴的任务。请在任务中发布一些合理的尝试,确定阻止您执行它的特定障碍或问题。 (请注意,链接的问题实际上是一个问题,与您的不同:“这个问题有一个通用名称吗?是否有一个公认的“最佳”算法来寻找集合 M?”)
-
例如,在 RDBMS 中,您只需按基数排列集合,或许还可以按字典顺序排列 group_concatenated 结果,然后选择第一个
-
看我之前的评论,这是Hitting Set的问题。
-
@shapiroyaacov 这看起来就是我想要的。我必须通读它以确保,但我认为这就是我所需要的。谢谢,我找不到正确的算法名称,所以我可以查一下。
标签: algorithm