【问题标题】:Minimize overlap in no gap scheduling最小化无间隙调度中的重叠
【发布时间】:2018-01-01 14:37:16
【问题描述】:

假设我们应该始终至少有一名医生在医院值班。有n个医生(d1,d2,....,dn),从时间a_k到时间b_k,第k个医生可用。为简化问题,假设第 k 个医生总是在时间 a_k 到时间 b_k 工作,但我们可以选择哪些医生上班或不上班。目标是最小化工作时间的总重叠。这不是间隔调度问题,因为间隔之间不能有间隙(假设这是可以实现的),但间隔重叠必须最小化。

我正在尝试解决这个问题,将其更改为图形并使用最短路径算法:让源顶点是第一个上班的医生,终端是最晚离开医院的医生。让边缘加权与医生之间的时间重叠。

我想知道:这类问题是否有通用名称,可以用来查找参考?

【问题讨论】:

    标签: algorithm graph


    【解决方案1】:

    搜索词

    如果我们为每位医生分配与花费的时间相等的成本,那么最小化总成本等同于最小化重叠,因为重叠量将等于“总就医时间”减去“要承保的总时间”。

    然而,搜索这个实际上似乎并没有太大帮助。

    算法

    您可以使用动态编程来解决这个问题。这个想法是解决一个子问题 f(t),如果我们想覆盖从开始时间(让我们称之为时间 0)到精确时间 t 的所有时间,它给出的间隔量最小。

    显然 f(0) 为 0,因为不需要医生。

    现在假设我们已经计算出所有时间 t 小于或等于 n 的 f(t) 的值。我们可以通过一个简单的算法计算出 f(n+1):

    1. 考虑在时间 n+1 完成的所有医生。

    2. 对于其中的每一个,请考虑开始时间 a_k 和结束时间 b_k 之间的所有时间 t。 t 表示已经被其他医生覆盖的时间,所以重叠量等于t - a_k。因此使用这个医生的成本(即重叠总量)等于f(t) + (t-a_k)

    3. 设置 f(n+1) 等于找到的 f(t)+(t-a_k) 的最小值(如果此时没有医生完成,则设置为无穷大)

    从 n=0 开始,此过程允许我们计算 f(1)、f(2)、...,直到找到所有值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多