Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 贪心算法,用于寻找与所有其他区间重叠的最小区间集_Algorithm_Data Structures_Minimum_Greedy - Fatal编程技术网

Algorithm 贪心算法,用于寻找与所有其他区间重叠的最小区间集

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贪婪算法是一种重复选择最佳

我正在学习贪婪算法,遇到了一个我不知道如何解决的问题。给定一组开始时间为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贪婪算法是一种重复选择最佳增量改进的算法,即使从长远来看它可能是次优的

    我觉得你的算法并不贪婪。这个问题的贪婪算法是:

  • 从输入集中查找包含在最大间隔数中的间隔
  • 从包含间隔的输入集中删除间隔
  • 重复此操作,直到输入集为空
  • 对于本例,它将首先生成(7,8),因为它包含在3个输入间隔中,然后将输入集减少到(1,4)(2,3),然后生成(2,3)

    请注意,此算法不会为输入集生成最佳输出: (0,4)(1,2)(1,4)(3,6)(3,7)(5,6)


    它首先产生(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中,您缩小了候选间隔,但是(如果我正确理解了约束条件),这永远无法改进解决方案,而且可能会使问题变得更糟!(如果我们只关心最小化间隔的数量,而不关心它们的总大小,那么我们应该始终使用尽可能宽的间隔。)