给定n个具有开始时间(Si)和结束时间(Fi)以及2个资源的活动。
选择活动以完成最大活动数量。
我的想法
我试图用DP来解决它,但是无法用DP解决任何问题。所以尝试使用贪婪的
方法:首先贪婪地填充资源-1,然后贪婪地填充资源-2(最少结束时间首先)。但这不适用于这种情况T1(1,4)T2(5,10)T3(6,12)T4(11,15)
方法2:贪婪地选择任务并以循环方式分配。 这也行不通。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
完全不需要使用DP,尽管贪婪的解决方案比1-resource问题要复杂一些,但它足以解决问题。
在这里,我们首先按照结束时间对时间间隔进行排序,首先是较早的时间。然后,在资源中放置两个“前哨”间隔,两个间隔的结束时间均为-∞。然后,以最小的x.end抓住间隔x,并遵循以下规则:
规则2中的贪婪策略是这里的重点:我们要替换最新结尾的已用资源,因为这将最大化我们在 other 中的“空间” em>资源可以在较早的开始时间适应某个将来的时间间隔,从而使将来的时间间隔很可能能够适应。
让我们看一下问题中的示例,其中间隔(1,4),(5,10),(6,12)和(11,18)已按排序顺序排列。我们从两个资源都以(-∞,-∞)作为“前哨”间隔开始。现在取第一个间隔(1,4),然后看是否合适,所以现在我们有资源1(1,4)和资源2(-∞,-∞)。接下来,取(5,10),它可以同时适合两种资源,因此我们选择资源1,因为它最晚结束,现在资源1具有(5,10)。接下来,我们采用(6,12),它仅适合资源2,因此资源2具有(6,12)。最后,采用适合资源1的(11,18)。
因此,我们已经能够使用贪婪策略来拟合所有四个间隔。
答案 1 :(得分:-1)
Activity selection problem可以通过 Greedy-Iterative-Activity-Selector 算法解决。
基本思路是始终选择剩余活动中完成时间最短的下一个活动,并且开始时间大于或等于先前所选活动的结束时间。我们可以根据完成时间对活动进行排序,以便我们始终将下一个活动视为最小完成时间活动。
有关Wikipedia的更多信息,请参阅