您好,这是一道与算法相关的问题,需要翻译如下内容:
空闲时间。假设一个并行机器处理N个作业。编写一个程序,给定作业开始和完成时间的列表,找到机器空闲的最长时间间隔和机器非空闲的最长时间间隔。
请问是否需要先解释一下问题,并提供伪代码?
您好,这是一道与算法相关的问题,需要翻译如下内容:
空闲时间。假设一个并行机器处理N个作业。编写一个程序,给定作业开始和完成时间的列表,找到机器空闲的最长时间间隔和机器非空闲的最长时间间隔。
请问是否需要先解释一下问题,并提供伪代码?
13:00 start
15:00 finish
8:30 start
10:00 finish
9:00 start
12:00 finish
8:30 start
9:00 start
10:00 finish
12:00 finish
13:00 start
15:00 finish
list.sort()
open_jobs = 0
state_changed_time = list[0].time;
max_idle_interval = -1;
max_not_idle_interval = -1;
for each (element in list)
{
if (element.type == start)
{
if(open_jobs == 0)
{
interval = element.time - state_changed_time;
if (interval > max_idle_interval) max_idle_interval = interval;
state_changed_time = element.time;
}
open_jobs +=1;
}
if (element.type == finish)
{
open_jobs -= 1;
if(open_jobs == 0)
{
interval = element.time - state_changed_time;
if (interval > max_not_idle_interval) max_not_idle_interval = interval;
state_changed_time = element.time;
}
}
}
busy = []
for each Job
find intervals in busy that overlap with job
if no overlapping intervals are found
add job interval to busy
else
remove overlapping intervals from busy
merge overlapping intervals with job interval
add new interval to busy
find longest busy interval
create non-busy intervals from busy intervals
find longest non-busy interval