使用贪心法求解多机调度问题某工厂有n=12n个独立的作业由m=12m;台相同的机器进行加工处理。作业i所需的加工时间为1;lin每个作业可以在任何一台机器I加工处。任何作业在被处理时不能中断也不能进行拆分处理。现要求给出一种作业调度方案算出n个作业由m台机器加工处理的较短时间。例如n=7m-3作业号 作业的处理时间1 22 143
步骤:
-
首先,将m个机器初始化为空闲状态,即可用。
-
对作业按照加工时间从大到小进行排序,以便能够优先安排较长的作业。
-
对每个作业,遍历m个机器,选择最早完成的机器进行加工,即选择剩余加工时间最短的机器。
-
将当前作业分配给选中的机器,并更新该机器的剩余加工时间。
-
重复步骤3和4,直到所有作业都被分配完毕。
-
返回最后一台机器的剩余加工时间,即为多机调度的较短时间。
伪代码:
function scheduleJobs(jobs, machines):
sort jobs in descending order based on processing time
initialize an array of length machines to store remaining processing time for each machine
for i from 1 to n:
minTime = infinity
minMachine = -1
for j from 1 to machines:
if remainingTime[j] < minTime:
minTime = remainingTime[j]
minMachine = j
assign job i to minMachine
remainingTime[minMachine] += processingTime[i]
maxTime = -1
for i from 1 to machines:
if remainingTime[i] > maxTime:
maxTime = remainingTime[i]
return maxTime
注释:
-
对作业按照加工时间从大到小进行排序,以便能够优先安排较长的作业。
-
遍历m个机器,选择最早完成的机器进行加工,即选择剩余加工时间最短的机器。
-
将当前作业分配给选中的机器,并更新该机器的剩余加工时间。
-
返回最后一台机器的剩余加工时间,即为多机调度的较短时间
原文地址: https://www.cveoy.top/t/topic/hQ9G 著作权归作者所有。请勿转载和采集!