让
S
成为可能重叠的自然数的一组区间(包含n个区间),N是一个数字列表(包含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]}
我找到了解决此问题的方法,如下所示
N = MergeSort (N)
upper, lower = infinity, -1
P = empty set
for each q in N do
if (q>=lower and q<=upper)=False
max_interval = [-infinity, infinity]
for each r in S do
if q in r then
if r.rightEndPoint > max_interval.rightEndPoint
max_interval = r
P.append(max_interval)
lower = max_interval.leftEndPoint
upper = max_interval.rightEndPoint
S.remove(max_interval)
我找到了这个解决方案,但我并不完全确定如何证明贪婪算法的最优性(证明,这将始终给出最佳结果)。
我的问题:如何证明这种贪婪解决方案的最优性?
提前致谢。
答案 0 :(得分:0)
是的,您的算法达到最佳解决方案。我对正式证据不满意,但希望以下论点应该令人信服。