【问题标题】:Maximize resource usage during job scheduling algorithm?在作业调度算法期间最大化资源使用率?
【发布时间】:2018-04-10 21:42:08
【问题描述】:
我正在尝试为作业调度问题创建动态编程算法。我有一组n 工作,每个工作i 有一个开始时间s(i) 和结束时间f(i)。开始总是在结束之前,您可以同时拥有两个工作。我将如何创建一个算法来最大化资源繁忙的时间?
【问题讨论】:
标签:
algorithm
dynamic-programming
【解决方案1】:
您必须决定在每个点上跟踪什么状态。一种选择是跟踪当前正在运行的作业的完成时间,在这种情况下,您可以大致如下计算可能的最大繁忙时间。
创建从一组完成时间到目前为止的繁忙时间的地图。将其初始化为 {null set} -> 0.
对于每个作业按开始时间升序排列:
- 创建一个新映射并将旧映射的所有条目插入其中
两个完成时间都大于当前开始时间的地图
时间。
- 对于旧映射中的每个剩余条目,从集合中删除
完成时间小于或等于开始时间的时间
目前的工作。如果新地图没有该集合的条目
完成时间,或者如果与条目相关联的值
旧地图大于该集合的新地图中的值,
将生成的条目插入新地图。现在插入饰面
当前作业进入集合的时间并将时间添加到其值
接受新工作。如果新地图没有
结果集完成时间,或者如果该条目具有较低的值
比刚刚计算的值,为该集合和值添加一个条目
到新地图。
- 新地图变成旧地图
最后,地图中的最大值是最大可能的繁忙时间。如果您一直回溯我没有提到的信息,您可以回溯以找出所选择的工作是什么。