Algorithm 贪心算法,用于寻找与所有其他区间重叠的最小区间集
我正在学习贪婪算法,遇到了一个我不知道如何解决的问题。给定一组开始时间为a,结束时间为b的区间(a,b),给出一个贪婪算法,该算法返回该集合中每隔一个区间重叠的最小区间数。例如,如果我有: (1,4)(2,3)(5,8)(6,9)(7,10) 我将返回(2,3)和(7,8),因为这两个区间覆盖了集合中的每个区间。我现在得到的是:Algorithm 贪心算法,用于寻找与所有其他区间重叠的最小区间集,algorithm,data-structures,minimum,greedy,Algorithm,Data Structures,Minimum,Greedy,我正在学习贪婪算法,遇到了一个我不知道如何解决的问题。给定一组开始时间为a,结束时间为b的区间(a,b),给出一个贪婪算法,该算法返回该集合中每隔一个区间重叠的最小区间数。例如,如果我有: (1,4)(2,3)(5,8)(6,9)(7,10) 我将返回(2,3)和(7,8),因为这两个区间覆盖了集合中的每个区间。我现在得到的是: 通过增加结束时间对间隔进行排序 将结束时间最小的间隔推到堆栈上 如果区间(a,b)与堆栈顶部的区间(c,d)重叠(因此a小于d),那么如果aa贪婪算法是一种重复选择最佳
它首先产生(3,4),因为它被4个输入区间覆盖,但最好的答案是(1,2)(5,6),每个区间覆盖3个区间你是如何得出(7,8)的?这不是一个原始的间隔,为此,为什么不选择(1,10)-涵盖所有内容的单个间隔。我应该更清楚。关键是重叠。因此,如果我选择4.5的时间,4.5不在任何间隔内(因此(1,10)不起作用,因为不是该间隔内的每一次都在每个间隔内)。但(7,8)中的任何时间都在(5,8)(6,9)(7,10)中,这就是为什么会创建间隔。与(2,3)相同,从2到3的任何时间都在(1,4)和(2,3)中。我建议使用给出一个贪婪算法,该算法返回一个最小大小的区间集X,不一定取自输入区间集,这样输入集中的每个区间都与X中的至少一个区间有重叠,并且X中的任何区间都不会覆盖输入中某个区间未覆盖的时间点这很复杂,但你目前的说法有点含糊不清,我想不出更简单的了。事实上,一张图表可以帮助澄清很多事情。另外,我不想在这里澄清实际问题,但我对您的算法有一个建议:在步骤3中,您缩小了候选间隔,但是(如果我正确理解了约束条件),这永远无法改进解决方案,而且可能会使问题变得更糟!(如果我们只关心最小化间隔的数量,而不关心它们的总大小,那么我们应该始终使用尽可能宽的间隔。)