1. 程式人生 > >最短作業優先(SJF)

最短作業優先(SJF)

cin abs ios ont logs vector cal get 變化

1. 最短作業優先:

最短作業優先(SJF)是一種調度任務請求的調度策略。每個任務請求包含有請求時間(即向系統提交的請求的時間)和持續時間(即完成任務所需時間)。

當前任務完成後,SJF策略會選擇最短持續時間執行任務,若最短持續時間相同,則選擇最早請求時間的任務。任務等待時間為請求時間和實際開始時間之差。

短作業優先”=“最短剩余時間優先”

2. 實例:

假設系統一直執行任務,從未空閑。設計程序,輸入請求時間表和對應的持續時間表,以及任務數量,計算平均等待時間。

輸入例子:

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

輸出例子:

0.5

解題思路:

按照持續時間長短排序,只要請求時刻<=當前時刻就執行,否則找滿足請求時刻<=當前時刻,持續時間次短的執行。

#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++) 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)