使用两种资源选择活动

时间:2017-09-29 22:37:45

标签: algorithm dynamic-programming greedy

给定n个具有开始时间(Si)和结束时间(Fi)以及2个资源的活动。

选择活动以完成最大活动数量。

我的想法

我试图用DP来解决它,但是无法用DP解决任何问题。所以尝试使用贪婪的

方法:首先贪婪地填充资源-1,然后贪婪地填充资源-2(最少结束时间首先)。但这不适用于这种情况T1(1,4)T2(5,10)T3(6,12)T4(11,15)

方法2:贪婪地选择任务并以循环方式分配。 这也行不通。

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

完全不需要使用DP,尽管贪婪的解决方案比1-resource问题要复杂一些,但它足以解决问题。

在这里,我们首先按照结束时间对时间间隔进行排序,首先是较早的时间。然后,在资源中放置两个“前哨”间隔,两个间隔的结束时间均为-∞。然后,以最小的x.end抓住间隔x,并遵循以下规则:

  1. 如果x.start在我们两个资源中的两个结束时间之前,请跳过x并不要分配它,因为x无法容纳
  2. 否则,让x覆盖端点为 latest 且仍在x.start
  3. 之前的资源。

规则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的更多信息,请参阅