是否存在针对此问题的贪心算法。 我已经为它制定了一个DP算法,但我不确定它的贪心算法。 请解释是否存在贪婪算法。
对于那些不熟悉问题的人:
有' n'从a1到a的活动。每个活动ai具有相关的开始时间si和结束时间fi,即[si,fi)。每个活动ai也具有与其相关联的值vi。没有两个活动可以同时发生。任务是选择相互兼容的活动,以便最大化总价值,即计划的所有活动的总和。 相互兼容意味着它们的运行时间不会重叠。
答案 0 :(得分:0)
要找到问题的贪婪解决方案,我们必须找到它背后的直觉。此问题类似于CLRS(section 16.1
)文本中的活动选择问题。在那个问题中,我们要找到一个具有最大尺寸的集合,其中每个活动都是相互兼容的。但是这个问题有另一个目标,它希望我们找到一个最大化覆盖范围或资源使用的集合。
在我看来,解决这个问题的方法是首先根据开始时间对所有活动进行排序。它背后的直觉是我们希望尽可能快地使用时间/价值/资源而不浪费任何东西。然后,我们开始挑选最长的活动,并检查它是否与目前为止选择的其他活动兼容。然后你继续坚持到最后。如果您将此应用于本书中的示例,则会为您提供包含活动{3, 7, 11}
的集合。
对于所有活动集合可能不正确。例如,一组两项活动:activity(1) = <0, 2>
和activity(2) = <1, 5>
。
正如您所看到的,这个想法在这种情况下并不起作用。所以你必须再次应用它,但是从右到左。 (根据他们的完成时间对它们进行排序,然后选择先完成并持续更长时间的那些!)最后,您将选择覆盖范围最广的集合!
我可能还没有产生最好的结果。如果我们添加其他活动activity(3)=<4, 6>
,则这些方法不是答案。因此,根据长度按降序排序活动可能就是答案。
最后,这三种方法中的一种应该给出答案。