python实现短作业优先算法
由于是静态输入,一次性输入所有程序,所以该代码是不能实际应用的,肯定需要一些更改 上一篇文章说了程序调度算法的核心是排序,先来先调度算法排序很简单,只需要按到达时间这一个参数排序就行,但短作业优先相对就比较麻烦,因为确定下一个可运行的程序是在上一个程序运行完成的时候,在此之前是不能确定的,因为可能会有其他优先级更高的程序到来,所以具体的确定方式一定要联系上一个程序的到达时间、运行时间和在此程序运行期间内又到达的新程序和之前以及与上一个程序争夺cpu的程序的运行时间 初级想法是,首先选择第一个运行的程序,在第一个程序运行完成后,将所有到达的程序进行按运行时间排序,取最小的一个,然后在原列表中删去改程序,如此循环直到程序全部运行完毕,代码如下 time=0 def select_program(list_after,time): list_select=[i for i in list_after if i[1]<=time] while not list_select: time +=1 list_select=[i for i in list_after if i[1]<=time] program=sorted(list_select,key=lambda x:x[2])[0] list_after.remove(program) time+=program[2] return program,list_after,time list_sorted=[] while (len(list_all)): program,list_all,time=select_program(list_all,time) list_sorted.append(program) 该函数就是用来选择上cpu的程序的,用列表把每次运行的结果保存起来,最后该列表就是实际运行顺序 未简化代码如下 n=int(input()) list_name=input().split() list_time=list(map(int,input().split())) list_servicetime=list(map(int,input().split())) list_all=[] for i in range(n): list_all.append((list_name[i],list_time[i],list_servicetime[i])) time=0 def select_program(list_after,time): list_select=[i for i in list_after if i[1]<=time] while not list_select: time +=1 list_select=[i for i in list_after if i[1]<=time] program=sorted(list_select,key=lambda x:x[2])[0] list_after.remove(program) time+=program[2] return program,list_after,time list_sorted=[] while (len(list_all)): program,list_all,time=select_program(list_all,time) list_sorted.append(program) # list_sorted=[('A', 0, 4), ('C', 2, 1), ('D', 3, 2), ('B', 1, 3), ('E', 4, 4)] time=list_sorted[0][1] for i in range(len(list_sorted)): if list_sorted[i][1]>time: completely_time=list_sorted[i][1]+list_sorted[i][2] else: completely_time=time+list_sorted[i][2] twist_time=completely_time-list_sorted[i][1] _twist_time=twist_time/list_sorted[i][2] list_sorted[i]=list_sorted[i]+(completely_time,twist_time,_twist_time) time=completely_time list_sorted=sorted(list_sorted,key=lambda x:x[1]) list_cname=['作 业 名:','到达时间:','服务时间:','完成时间:','周转时间:','带权周转时间:'] for i in range(6): print(list_cname[i],end='') list_output=[] for j in range(n): if i==5: list_output.append(f'{list_sorted[j][i]:.2f}') continue list_output.append(list_sorted[j][i]) print(*list_output)