【第22期】观点:IT 行业加班,到底有没有价值?

最短作业优先(SJF)

原创 2016年08月29日 17:10:43

最短作业优先(SJF)是一种调度任务请求的调度策略。每个任务请求包含有请求时间(即向系统提交的请求的时间)和持续时间(即完成任务所需时间)。当前任务完成后,SJF策略会选择最短持续时间执行任务,若最短持续时间相同,则选择最早请求时间的任务。任务等待时间为请求时间和实际开始时间之差。假设系统一直执行任务,从未空闲。设计程序,输入请求时间表和对应的持续时间表,以及任务数量,计算平均等待时间。


输入例子:

[0,1,3,9],[2,1,7,5],4

输出例子:

0.5


解题思路:

按照持续时间长短排序,只要请求时刻<=当前时刻就执行,否则找满足请求时刻<=当前时刻,持续时间次短的执行。

vector可以定义出变长数组,但是只能用push_back压值,不能直接vec[i]=进行赋值。


#include <iostream>
#include <vector>
using namespace std;

void sortDuration(int *arr1, int *arr2,int n){		//arr1为排序数列,arr2为跟随变化数列,第一行不参加排序
	for(int i=0;i<n;i++)
		for(int j=1;j<n-1-i;j++)
			if(arr1[j]>arr1[j+1]){
				int temp1=arr1[j];
				int temp2=arr2[j];
				arr1[j]=arr1[j+1];
				arr2[j]=arr2[j+1];
				arr1[j+1]=temp1;
				arr2[j+1]=temp2;
			}
}

int main(){
	int request[4]={0,1,3,9};
	int duration[4]={2,1,7,5};
	int n=4;
	int time=duration[0];
	double wait=0;
	vector<bool> book;
	
	for(int i=0;i<n;i++)
		book.push_back(0);
	sortDuration(duration, request, n);
	for(int i=0;i<n;i++)<span style="white-space:pre">			</span>//计算n次
		for(int j=1;j<n;j++)
			if(book[j]==0 && request[j]<=time){
				book[j]=1;
				wait+=time-request[j];
				time+=duration[j];
				break;
			}
	wait=wait/n;
	cout << wait <<endl;
	//getchar();
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

最短作业优先调度算法(SJF算法)的C++实现

题目要求: 在作业调度中,该算法每次从后备作业队列中挑选估计服务时间最短的一个或几个作业,将他们调入内存,分配必要的资源,创建进程并放入就绪队列。与在进程调度中的原理类似。假设有n项作业位于就绪队列中...

进程调度

PCB 进程控制块 <span styl

最短作业优先算法代码,求平均等待时间(SJF_ALG)

操作系统 ,最短作业优先算法代码实现

java面试题

1.谈谈Spring 依赖注入的几种方式?      依赖注入只要有三种方式            1.通过setter方法注入 <p sty
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)