• 【ZX笔试】短作业优先算法


    时间复杂度为O(n*n),空间复杂度为O(n)的解法

     1 // ShortJobFirst.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 #include <vector>
     7 
     8 using namespace std;
     9 
    10 /*
    11   每一步都计算当前时间和总的等待时间,根据当前时间(cpu_time)找到已经就绪的作业下标,
    12   保存到vec_ready中,遍历vec_ready,时间最小的为下一个作业
    13 */
    14 float waitTimeSJF(int* requestTimes,int* durations,int len)
    15 {
    16     int cpu_time = 0;
    17     float waitTime = 0.0;
    18 
    19     vector<int> vec_flag;
    20     vec_flag.resize(len);
    21     for(int i = 0 ; i < len; i++)//用于标记已完成作业
    22         vec_flag[i] = 0;
    23 
    24     vector<int> vec_ready(len);//保存就绪作业的下标、
    25     int vec_ready_num = 0;
    26 
    27     int cur = 0;
    28     int next = 0;
    29     int minNum = 0x7FFFFFFF;
    30     for(int i = 0; i < len ;i++)
    31     {
    32         waitTime += cpu_time - requestTimes[cur];
    33         cpu_time += durations[cur];
    34         vec_flag[cur] = 1;
    35 
    36         vec_ready_num = 0;
    37         for(int j= 0;j < len; j++)
    38         {
    39             if(vec_flag[j] == 0 && requestTimes[j] < cpu_time)
    40                 vec_ready[vec_ready_num++] = j;
    41         }
    42 
    43         minNum = 0x7FFFFFFF;
    44         for(int k = 0; k < vec_ready_num;k++)//找到最小的请求时间
    45         {
    46             if(durations[vec_ready[k]] < minNum)
    47             {
    48                 minNum = durations[vec_ready[k]];
    49                 next = vec_ready[k];
    50             }            
    51         }
    52         cur = next;
    53     }
    54     return waitTime/len;
    55 }
    56 
    57 int _tmain(int argc, _TCHAR* argv[])
    58 {
    59     int requestTimes[4] = {0,2,4,5};
    60     int durations[4] = {7,4,1,4};
    61     int len = 4;
    62     cout<<waitTimeSJF(requestTimes,durations,len)<<endl;
    63     system("pause");
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    Tsql 获取服务器信息
    数据字典生成脚本 【转载】
    c# winform文本框数字,数值校验
    ReentrantLock和AbstractQueuedSynchronizer的分析
    多线程
    前缀和与差分数组
    链表
    堆(优先队列)
    排序算法
    二分查找(递归和非递归)
  • 原文地址:https://www.cnblogs.com/lp3318/p/5816265.html
Copyright © 2020-2023  润新知