(2021年下半年下午试题四)阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 设有n个货物要装入若干个容重为C的集装箱以便运输,这n个货物的体积分别为{s1,s2,…,sn},且有si≤C(1≤i≤n)。为

admin2018-07-27  47

问题 (2021年下半年下午试题四)阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
    【说明】
    设有n个货物要装入若干个容重为C的集装箱以便运输,这n个货物的体积分别为{s1,s2,…,sn},且有si≤C(1≤i≤n)。为节省运输成本,用尽可能少的集装箱来装运这n个货物。
    下面分别采用最先适宜策略和最优适宜策略来求解该问题。
    最先适宜策略(firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。
    最优适宜策略(bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容重最小的集装箱,使得该箱子装入货物后闲置空间最小。
【C代码】
下面是这两个算法的C语言核心代码。
(1)变量说明
n:货物数
C:集装箱容量
s:数组,长度为n,其中每个元素表示货物的体积,下标从0开始
b:数组,长度为n,b表示第n+i个集装箱当前已经装入货物的体积,下标从0开始
i,j:循环变量
k:所需的集装箱数
min:当前所用的各集装箱装入了第i个货物后的最小剩余容量
m:当前所需的集装箱数
temp:临时变量
(2)函数firstfit
int firstfit(){
    int  i,j;
    k=0;
    for(i=0;i<n;i++){
    b=0;
    }
    for(i=0;i<n;i++){
    _____(1);
    while(C-b[j]<s){
    j++;
    }
    _______(2);
    k=k>(j+1)?k:(j+1);
    }
    return k;
}
(3)函数bestfit
int bestfit(){
    int i,j,min,m,temp;
    k=0;
    for(i=0;i<n;i++){
       b=0;
    }
    for(i=0;i<n;i++){
    min=C;
    m=k+1;
    for(j=0;j<k+1;j++){
    temp=C-b[j]-s
    if(temp>0  &&temp<min){
    ______(3);
    m=j;
      }
    }
    ______(4);
    k=k>(j+1)?k:(j+1);
    }
    return k;
}
考虑实例n=10,C=10,各个货物的体积为{4,2,7,3,5,4,2,3,6,2}。该实例在最先适宜和最优适宜策略下所需的集装箱分别为_____(9)和_____(10)。考虑一般的情况,这两种求解策略能否确保得到最优解?_____(11)(能或否)

选项

答案(9)5 (10)4 (11)否

解析 本问题考查对程序的具体理解和应用。
    对firstfit函数进行遍历的结果如表9.4所示。

    因此,该实例在最先适宜策略下所需的集装箱数为5。同理可对bestfit函数进行遍历,可得到该实例在最优适宜策略下所需的集装箱数为4,遍历过程可由考生自己进行,以增强对整个算法的理解。
    由于贪心算法在解决最优化问题上是仅根据当前已有的信息做出选择,即不是从整体最优考虑,它所做出的选择只是力求局部最优,因此这两种求解策略都不能确保得到最优解。
转载请注明原文地址:https://kaotiyun.com/show/q7DZ777K
0

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