【发布时间】:2014-10-28 09:16:39
【问题描述】:
这是算法大师的问题:-)
设S 是一组可能重叠的自然数区间,N 是一个数字列表。
我想找到 S 的最小子集(我们称之为 P),这样对于每个数字 在我们的列表 N 中,在 P 中至少存在一个包含它的区间。 P中的区间允许重叠。
简单的例子:
S = {[1..4], [2..7], [3..5], [8..15], [9..13]}
N = [1, 4, 5]
// so P = {[1..4], [2..7]}
我认为动态算法可能并不总是有效,所以如果有人知道这个问题的解决方案(或可以转换成的类似解决方案),那就太好了。
谢谢!
【问题讨论】:
-
W.l.o.g.您可以将 S 中的区间替换为包含正整数的离散有限集。那么它看起来很像一个“子集覆盖”问题(en.wikipedia.org/wiki/Set_cover_problem)。
标签: algorithm language-agnostic set intervals