试题四(共15分)
阅读下列说明和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]表示第i+1个集装箱当前已经装入货物的体积,下标从0开始
i,j:循环变量
k:所需的集装箱数
min:当前所用的各集装箱装入了第i个货物后的最小剩余容量
m:当前所需要的集装箱数
temp:临时变量
(2)函数firstfit
int firstfit(){
inti,j;
k=0:
for(i=0;i<n;i++){
b[i]=0;
}
for(i=0;i<n;i++){
(1);
while(C-b[j]<s[i]){
j++;
}
(2);
k=k>(j+1)?k:(j+1);
}
returnk;
}
(3)函数bestfit
int bestfit() {
int i,j,min,m,temp;
k=0;
for(i=0;i<n;i++){
b[i]=0;
}
For (i=0;i<n;i++){
min=C;
m=k+l;
for(j=O;j< k+l;j++){
temp=C- b[j] - s[i];
if(temp>0&&temp< min){
(3) ;
m=j,
}
}
(4);
k=k>(m+1)?k:(m+1);
}
return k;
}
【问题1】(8分)
根据【说明】和【C代码】,填充C代码中的空(1)~(4)。
【问题2】(4分)
根据【说明】和【C代码】,该问题在最先适宜和最优适宜策略下分别采用了(5) 和(6)算法设计策略,时间复杂度分别为 (7) 和 (8)(用O符号表示)。
【问题3】(3分)
考虑实例n= 10,C= 10,各个货物的体积为{4,2,7,3,5,4,2,3,6,2}。该实例在最先适宜和最优适宜策略下所需的集装箱数分别为(9)和(10)。考虑一般的情况,这两种求解策略能否确保得到最优解?(11) (能或否)
A.金融市场是企业筹资和投资的场所
B.企业通过金融市场可以根据自身运营的需要将长短期资金进行相互转化
C.金融市场为企业的财务管理活动提供各种金融服务,降低了企业理财的成本
D.为企业在相应空间内自主经营提供了法律上的保护
E.金融市场可以为企业理财提供相关的信息
在非空二叉树的中序遍历序列中,二叉树的根结点的左边应该 _______。
A.只有左子树上的所有结点
B.只有左子树上的部分结点
C.只有右子树上的所有结点
D.只有右子树上的部分结点
判断下列叙述正确与否。
①顺序存储方式只能用于存储线性结构。
②顺序存储方式的优点是存储密度大,且插入、删除运用算效率高。
③链表的每个结点中都恰好包含一个指针。
④散列法存储的基本思想是由关键码的值决定数据的存储地址。
⑤散列表的结点中只包含数据元素自身的信息,不包含任何指针。
⑥负载因子(装填因子)是散列法的一个重要参数,它反映散列表的装满程度。
⑦栈和队列的存储方式既可是顺序方式,也可是链接方式。
⑧用二叉链表法(llink-rlink法)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。
⑨用相邻矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。
⑩邻接表法只能用于有向图的存储,而相邻矩阵法对于有向图和无向图的存储都适用。
在Windows环境下,若资源管理器左边文件夹中的某文件夹左边标有“+”标记,则表示(50)。
A.该文件夹为空
B.该文件夹中含有子文件夹
C.该文件夹中只包含有可执行文件
D.该文件夹中包含系统文件