【问题标题】:Activity selection with two resources具有两种资源的活动选择
【发布时间】:2017-09-29 22:37:45
【问题描述】:

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

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

我的想法

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

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

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: algorithm dynamic-programming greedy


    【解决方案1】:

    根本不需要使用 DP,贪婪的解决方案就足够了,尽管它比 1-resource 问题稍微复杂一些。

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

    1. 如果 x.start 在我们两个资源中的两个结束时间之前,请跳过 x 并且不要分配它,因为 x 不适合
    2. 否则,让 x 覆盖其端点为 最新 且仍在 x.start 之前的资源

    规则 2 中的贪心策略是这里的关键点:我们要替换 latest 结尾的已用资源,因为这样可以最大化我们在 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)。最后,取 (11,18),它适合资源 1。

    因此,我们已经能够使用贪婪策略来拟合所有四个区间。

    【讨论】:

      【解决方案2】:

      Activity selection problem 可以通过 Greedy-Iterative-Activity-Selector 算法解决。

      基本思想是始终在剩余活动中选择完成时间最短且开始时间大于或等于先前选择的活动的完成时间的下一个活动。我们可以根据完成时间对活动进行排序,以便我们始终将下一个活动视为最短完成时间的活动。

      Wikipedia上查看更多信息。

      【讨论】:

      • 这个答案是错误的;这是使用 one 资源的活动选择。该问题要求两个资源
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多