给出需要安排的重叠作业列表。确定所需的最小机器数量。
例如,输入为:{{1,6},{2,3},{4,5}}。
我们可以有两台机器:M1可用于{1,6}。和M2在{2,3}和{4,5}上工作。
我最初的看法是使用堆栈向量,每个堆栈代表一台机器。但这需要太多空间。我的另一个猜测是使用动态编程...
任何帮助?
Java或C ++。
答案 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台机器。