重叠作业的最小机器数量

时间:2014-02-22 05:13:41

标签: java c++ dynamic-programming

给出需要安排的重叠作业列表。确定所需的最小机器数量。

例如,输入为:{{1,6},{2,3},{4,5}}。

我们可以有两台机器:M1可用于{1,6}。和M2在{2,3}和{4,5}上工作。

我最初的看法是使用堆栈向量,每个堆栈代表一台机器。但这需要太多空间。我的另一个猜测是使用动态编程...

任何帮助?

Java或C ++。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,则工作由其开始和结束时间{a,b}定义。

{{7,8},{2,11},{7,8},{1,7},{2,3},{2,7},{1,9}}

按作业开始时间对作业进行排序。

{{1,7},{1,9},{2,11},{2,3},{2,7},{7,8},{7,8}}

当一项工作即将开始时,可​​能有几台机器免费。 WLOG,假设机器具有“等级”,因此所有免费机器中排名最高的机器都可以胜任。 (如果同时启动多个作业,则排名最高的机器占哪个作业并不重要。)

现在,我们可以看到排名最高的计算机所占用的作业,并将其从池中删除。重复排名第二的机器,依此类推,直到找到所有工作。

{ {1,7} ,{1,9},{2,11},{2,3},{2,7}, {7,8} < / strong>,{7,8}}
{ {1,9} ,{2,11},{2,3},{2,7},{7,8}}
{ {2,11} ,{2,3},{2,7},{7,8}}
{ {2,3} ,{2,7}, {7,8} }
{的 {2,7} }

在这种情况下,需要5台机器。