在无间隙调度中最小化重叠

时间:2018-01-01 14:37:16

标签: algorithm graph

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

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

我想知道:这类问题是否有通用名称,我可以用它来找到一些参考资料?

1 个答案:

答案 0 :(得分:1)

搜索字词

可能有助于搜索"最低费用间隔时间"基于这样的想法:如果我们为每个医生分配相当于花费的时间的成本,那么最小化总成本相当于最小化重叠,因为重叠量将等于总医生时间"减去"所涵盖的总时间"。

但是,搜索这个实际上似乎没有用处。

算法

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

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

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

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

  2. 对于其中每一项,请考虑开始时间a_k和结束时间b_k之间的所有时间。 t将代表其他医生已经涵盖的时间,因此重叠量等于t - a_k。因此,使用该医生的费用(即重叠的总量)等于f(t) + (t-a_k)

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

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