📜  贪心算法中的调度

📅  最后修改于: 2021-10-26 06:41:09             🧑  作者: Mango

在本文中,我们将讨论贪心算法的各种调度算法。许多调度问题可以使用贪心算法来解决。

问题陈述:给定N 个事件及其开始和结束时间,找出包含尽可能多事件的时间表。无法部分选择事件。考虑以下事件:

  • 在这种情况下,事件的最大数量是两个。作为选择的事件Bd如下:

  • 可以为该问题发明几种贪心算法。

适用于每种情况的算法:

算法 1

  • 第一个想法是选择尽可能短的事件。在示例中,此算法选择以下事件:

  • 然而,选择短期事件并不总是正确的策略。例如,算法在以下情况下失败:

  • 如果选择短事件,则只能选择一个事件。但是,可以选择两个长事件。

算法2

  • 另一个想法是始终选择尽可能早地开始的下一个可能事件。该算法选择以下事件:

  • 然而,给出了这个算法的反例。在这种情况下,算法只选择一个事件:

  • 如果选择了第一个事件,则无法选择任何其他事件。但是,可以选择其他两个事件。

算法 3

  • 第三个想法是始终选择尽可能早地结束的下一个可能事件。该算法选择以下事件:

  • 事实证明,这个算法总是会产生一个最优解。
  • 这样做的原因是首先选择尽可能早地结束的事件始终是最佳选择。
  • 在此之后,使用相同的策略等选择下一个事件是最佳选择,直到无法选择任何其他事件。
  • 算法工作的一种方式是考虑如果首先选择一个晚于尽可能早结束的事件结束的事件会发生什么。
  • 现在,最多有相同数量的选择,如何选择下一个事件。
  • 因此,选择较晚结束的事件永远不会产生更好的解决方案,贪心算法是正确的。

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。