阅读下列说明和C代码,回答以下问题,将解答写在答题纸的对应栏内。 【说明】 设有m台完全相同的机器运行n个独立的任务,运行任务i所需要的时间为ti,要求确定一个调度方案,是的完成所有任务所需要的时间最短。 假设任务已经按照其运行时间

admin2013-07-09  39

问题 阅读下列说明和C代码,回答以下问题,将解答写在答题纸的对应栏内。
    【说明】
    设有m台完全相同的机器运行n个独立的任务,运行任务i所需要的时间为ti,要求确定一个调度方案,是的完成所有任务所需要的时间最短。
    假设任务已经按照其运行时间从大到小排序,算法基于最长运行时间作业优先的策略;按顺序先把每个任务分配到一台机器上,然后将剩余的任务一次放入最先空闲的机器。
    【C代码】
    下面是算法的C语言实现。
    (1)常量和变量说明
    m:机器数。
    n:任务数。
    t[]:输入数组,长度为n,其中每个元素表示任务的运行时间,下标从0开始。
    s[][]:二维数组,长度为m*n,下标从0开始,其中元素s[j]表示机器i运行的任务j的编号。
    d[]:数组,长度为m其中元素d表示机器i的运行时间,下标从0开始。
    count[]:数组,长度为m,下标从0开始,其中元素count表示机器i运行的任务数。
    i:循环变量。
    j:循环变量。
    k:临时变量。
    max:完成所有任务的时间。
    min:临时变量。
    (2)函数schedule
    void  schedule(){
          int i,j,k max=0;
          for(i=0;i<m;i++){
          d=0;
               for(j=0;j<n;j++){
                s[j]=0;
          }
    }
    for(i=0;i<m;i++){    //分配前m个任务
        s[0]=i;
       (1)   
    count=1;
    }
   for(   (2)    ;i<n;i++)(    //分配后n-m个任务
    int min=d[0];
    k=0:
    for(j=1;j<m;j++){    //确定空闲机器
    if(min>d[j]){
       min=d[j];
       k=j;    //机器k空闲
    }
    }
       (3)   
    count[k]=count[k]+1;
    d[k]=d[k]+t
    for(i=0;i<m;i++){    //确定完成所有任务所需要的时间
             if(   (4)    ){
       max=d
    }
         }
      }
  }
根据说明和C代码,填充C代码中的空(1)~(4)。

选项

答案(1)d[i]=d[i]+t[i] (2)i=m (3)s[k][0]=i(4)Max<d[i]

解析 根据上述思想和题中的说明,首先将是s[][]和d[]数组初始化为0,然后将前m个运行时间最长的任务分给m个机器,(1)中需要表示此时每个机器运行的时间,即当前已经运行的时间加上此时所运行任务的时间,可以推断(1)处为d=d+t,此后需将剩下的n—m个任务按顺序分配给空闲的机器,故(2)处将i初始化为以m为起始的任务,即i=m,(3)处根据空闲的机器分配任务,所以需记录第k个空闲机器所运行任务的编号,即s[k][0]=i,(4)处已经完成了任务的运行,此处需要统计所有机器所运行任务的最长时间,对于每个机器i的运行时间为d,存在d大于当前的最大时间Max,就将当前机器的运行时间d赋给Max,即Max<d
转载请注明原文地址:https://jikaoti.com/ti/Zji7FFFM
0

相关试题推荐
最新回复(0)