阅读下列说明和C代码,回答问题1~问题3,将解答写在答题纸的对应栏内。 【说明】 设有n个货物要装入若干个容量为C的集装箱以便运输,这n个货物的体积分别为{S1,S2,…,Sn},且有si≤C(1≤i≤n)。为节省运输成本,用尽可能少的集装箱来装运这n个货

admin2017-08-31  26

问题 阅读下列说明和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表示第i+1个集装箱当前已经装入货物的体积,下标从0。
    i,j:循环变量。
    k:所需的集装箱数。
    min:当前所用的各集装箱装入了第i个货物后的最小剩余容量。
    m:当前所需要的集装箱数。
    temp:临时变量。
    (2)函数firstfit。
    int  firstfit(){
    inti,j;
    k=0:  ;
    for(i=0;i    b=0;
    }
    for(i=0;i    (1)  ,
    while(C—b[j]){
    j++;
    }
    (2);
    k=k>(j+1)?k:(j+1);
    }
    returnk
    }
    (3)函数bestfit。
    int bestfit(){
    int i , j f min t m t temp;
    k=0;
    for(i=0;i    b=0;
    }
    for(i=0;i    min=C;
    m=k+1;
    for(j=0;j    temp=C—b[j]一S
    if(temp>O&&temp    (3)  ;
    m=j;
    }
    }
    (4) ;
    k=k>(m+1)?k:(m+1);
    }
    return k:
    }
根据【说明】和【C代码】,该问题在最先适宜和最优适宜策略下分别采用了(5)和  (6)算法设计策略,时间复杂度分别为(7)和  (8) (用0符号表示)。

选项

答案(5)贪心。 (6)贪心。 (7)O(n2)。 (8)O(n2)。

解析
转载请注明原文地址:https://kaotiyun.com/show/cODZ777K
0

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