Algorithm 最小化覆盖给定间隔集的框的数量
这是算法大师们的一个问题:-) 设Algorithm 最小化覆盖给定间隔集的框的数量,algorithm,language-agnostic,set,intervals,Algorithm,Language Agnostic,Set,Intervals,这是算法大师们的一个问题:-) 设S为一组可能重叠的自然数间隔,b为一个方框大小。假设对于每个间隔,范围严格小于b 我想找到大小为b(我们称之为M)的最小间隔集,因此s中的所有间隔都包含在M的间隔中 简单的例子: S = {[1..4], [2..7], [3..5], [8..15], [9..13]} b = 10 M = {[1..10], [8..18]} // so ([1..4], [2..7], [3..5]) are inside [1..10] and ([8..15], [9
S
为一组可能重叠的自然数间隔,b
为一个方框大小。假设对于每个间隔,范围严格小于b
我想找到大小为b
(我们称之为M
)的最小间隔集,因此s
中的所有间隔都包含在M
的间隔中
简单的例子:
S = {[1..4], [2..7], [3..5], [8..15], [9..13]}
b = 10
M = {[1..10], [8..18]}
// so ([1..4], [2..7], [3..5]) are inside [1..10] and ([8..15], [9..13]) are inside [8..18]
我认为贪婪算法可能并不总是有效的,所以如果有人知道这个问题的解决方案(或者可以转换成类似的解决方案),那就太好了
谢谢
更新我一直在思考这个问题,也许我的第一直觉是错误的,贪婪算法正是解决这个问题的方法,因为最终所有的间隔都需要覆盖,超级间隔的选择也不会有任何区别。。。我应该删除这个问题还是有人可以断言这个问题?算法可能如下
算法可能如下所示
是的,贪婪算法是最优的。非正式地,考虑任意的解决方案M。我们将在不增加间隔数的情况下将其转化为贪婪解M的超集。反复考虑M′m中最左边的区间i。设s为s中最左边的区间,其中I为M中包含s的最左边区间。从左到右贪婪算法选择一个区间I',其左边缘与s对齐。我首先声称I'在I的右边,因为I'是包含s的最右边的区间,其次,M-{I}U{I'}是一个有效的解,因为I'包含的唯一区间而不是I'在s的左边,因此已经包含在其他区间中。不在贪婪解中的区间数减少,因此我们最终得到贪婪解。是的,贪婪算法是最优的。非正式地,考虑任意的解决方案M。我们将在不增加间隔数的情况下将其转化为贪婪解M的超集。反复考虑M′m中最左边的区间i。设s为s中最左边的区间,其中I为M中包含s的最左边区间。从左到右贪婪算法选择一个区间I',其左边缘与s对齐。我首先声称I'在I的右边,因为I'是包含s的最右边的区间,其次,M-{I}U{I'}是一个有效的解,因为I'包含的唯一区间而不是I'在s的左边,因此已经包含在其他区间中。不在贪婪解中的区间数减少了,所以我们最终得到了贪婪解