[计算机类试卷]软件水平考试中级软件设计师下午应用技术(算法设计和分析)历年真题试卷汇编1及答案与解析.doc
《[计算机类试卷]软件水平考试中级软件设计师下午应用技术(算法设计和分析)历年真题试卷汇编1及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试中级软件设计师下午应用技术(算法设计和分析)历年真题试卷汇编1及答案与解析.doc(12页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试中级软件设计师下午应用技术(算法设计和分析)历年真题试卷汇编 1及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 (2013年下半年下午试题四 )阅读下列说明和 C代码,回答问题 1至问题 3,将解答写在答题纸的对应栏内。 【说明】 某工程计算中要完成多个矩阵相乘 (链乘 )的计算任务。 两个矩阵相乘要求第一个矩阵的列数等于第二个矩阵的行数,计算量主要由进行乘法运算的次数决定。采用标准的矩阵相乘算法,计算 Amn*Bnp,需要 m*n*p次乘法运算。 矩阵相乘满足结合律,多个矩阵相乘,不同的计算 顺序会产生不同的计算量。以矩阵 A110100, A21005, A35
2、50三个矩阵相乘为例,若按(A1*A2)*A3计算,则需要进行 10*100*5+10*5*50=7500次乘法运算;若按A1*(A2*A3)计算,则需要进行 100*5*50+10*100*50=75000次乘法运算。可见不同的计算顺序对计算量有很大的影响。 矩阵链乘问题可描述为:给定 n个矩阵A1, A2, , An,矩阵 Ai的维数为 pi-1p i,其中 i=1, 2, , n。确定一种乘法顺序,使得这 n个矩阵相乘时进行乘法的运算次数最少。 由 于可能的计算顺序数量非常庞大,对较大的 n,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若 A1*
3、A2*An 的一个最优计算顺序从第 k个矩阵处断开,即分为 A1*A2*Ak 和 Ak+1*Ak+2*An 两个子问题,则该最优解应该包含 A1*A2*Ak 的一个最优计算顺序和 Ak+1*Ak+2*An 的一个最优计算顺序。据此构造递归式式中,costij表示 Ai+1*Ai+2*Aj+1 的最优计算的计算代价。最终需要求解 cost0n-1。 【 C代码】 算法实现采用自底向上的计算过程。首先计算两个矩阵相乘的计算量,然后依次计算 3个矩阵、 4个矩阵、 、 n个矩阵相乘的最小计算量及最优计算顺序。下面是该算法的 C语言实现。 (1)主要变量说明 n:矩阵数 seq:矩阵维数序列 cost
4、:二维数组,长度为 n*n,其中元素 costij表示Ai+1*Ai+2*Aj+1 的最优计算的计算代价 trace:二维数组,长度为 n*n,其中元素 traceij表示 Ai+1*Ai+2*Aj+1 的最优计算对应的划分位置,即 k (2)函数 cmm#define N 100int costNN; int traceNN; int cmm(int n, int seq) int tempCost; int tempTrace; int i, j, k, p; int temp; for(i=0; i n;i+) costii=0; for(p=1; p n; p+) for(i=0; _
5、(1); i+) _(2); tempCost=-1; for(k=i; k j; k+) temp=_(3); if(tempCost=-1 tempCost temp) tempCost=temp; _(4); costij=tempCost; traceij=tempTrace; return cost0n-1; 1 根据以上说明和 C代码,填充 C代码中的空 (1) (4)。 2 根据以上说明和 C代码,该问题采用了 _(5)算法设计策略,时间复杂度为_(6)(用 O符号表示 )。 3 考虑实例 n=6,各个矩阵的维数: A1为 5*10, A2为 10*3, A3为 3*12, A4
6、为12*5, A5为 5*50, A6为 50*6,即维数序列为 5, 10, 3, 12, 5, 50, 6。则根据上述 C代码得到的一个最优计算顺序为 _(7)(用加括号方式表示计算顺序 ),所需要的乘法运算次数为 _(8)。 3 (2013年上半年下午试题四 )阅读下列说明和 C代码,回答问题 1至问题 3,将解答写在答题纸的对应栏内。 【说明】 设有 m台完全相同的机器运行 n个独立的任务,运行任务 i所需要的时间为 tI,要求确定一个调度方案,使得完成所有任务所需要的时间最短。 假 设任务已经按照其运行时间从大到小排序,算法基于最长运行时间作业优先的策略;按顺序先把每个任务分配到一台
7、机器上,然后将剩余的任务一次放入最先空闲的机器。 【 C代码】 下面是算法的 C语言实现。 (1)常量和变量说明 m:机器数 n:任务数 t:输入数组,长度为 n,其中每个元素表示任务的运行时间,下标从 0开始 S:二维数组,长度为 mn,下标从 0开始,其中元素 siD表示机器 i运行的任务 j的编号 d:数组,长度为 m,其中元素 di表示机器 i的运行时间,下标从 0开始 count:数组,长 度为 m,下标从 0开始,其中元素 counti表示机器 i运行的任务数 i:循环变量 j:循环变量 k:临时变量 max:完成所有任务的时间 min:临时变量 (2)函数 schedule vo
8、id Schedule() int i,j, k,max=0; for(i=0;i m;i+) di=0; for(j=0; j n; j+) sij=0; for(i=0; im;i+) 分配前 m个任务 si0=i; _(1) counti=1; for(_(2); in; i+) 分配后 n-m个任务 int min=d0; k=0; for(j=1; j m; j+) 确定空闲机器 if(min dj) min=dj; k=j; 机器 k空闲 _(3); countk=countk+1; dk=dk+ti; for(i=0; i m; i+) 确定完成所有任务所需要的时间 if(_(4
9、) max=di; 4 根据说明和 C代码,填充 C代码中的空 (1) (4)。 5 根据说明和 C代码,该问题采用了 _(5)算法设计策略,时间复杂度为_()(用 O符号表示 )。 6 考虑实例 m=3(编号 0 2), n=7(编号 0 6),各任务的运行时间为 16, 14, 6,5, 4, 3, 2。则在机器 0、 1和 2上运行的任务分别为 _(7)、 _(8)和_(9)(给出任务编号 )。从任务开始运行到完成所需要的时间为 _(10)。 6 (2021年下半年下午试题四 )阅读下列说明和 C代码,回答问题 1至问题 3,将解答写在答题纸的对应栏 内。 【说明】 设有 n个货物要装入
10、若干个容重为 C的集装箱以便运输,这 n个货物的体积分别为 s1, s2, , sn,且有 siC(1in)。为节省运输成本,用尽可能少的集装箱来装运这 n个货物。 下面分别采用最先适宜策略和最优适宜策略来求解该问题。 最先适宜策略 (firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。 最优适宜策略 (bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且 目前剩余容重最小的集装箱,使得该箱子装入货物后闲置空间最小。 【 C代码】 下面是这两个算法的 C语言核心代码。 (1)变量说明 n:货物数 C:集装箱
11、容量 s:数组,长度为 n,其中每个元素表示货物的体积,下标从 0开始 b:数组,长度为 n, bi表示第 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+) bi=0; for(i=0; i n; i+) _(1); while(C-bj si) j+; _(2); k=k (j+1)?k: (j+1); return k
12、; (3)函数 bestfit int bestfit() int i, j, min, m, temp; k=0; for(i=0; i n; i+) bi=0; for(i=0; i n; i+) min=C; m=k+1; for(j=0; j k+1;j+) temp=C-bj-si; if(temp 0 temp min) _(3); m=j; _(4); k=k (j+1)?k: (j+1); return k; 7 根据【说明】和【 C代码】,填充 C代码中的空 (1) (4)。 8 根据【说明】和【 C代码】,该问题在最先适宜和最优适宜策略下分别采用了_(5)和 _(6)算法设
13、计策略,时间复杂度分别为 _(7)和盟 (用 O符号表示 )。 9 考虑实例 n=10, C=10,各个货物的体积为 4, 2, 7, 3, 5, 4, 2, 3, 6, 2。该实例在最先适宜和最优适宜策略下所需的集装箱分别为 _(9)和 _(10)。考虑一般的情况,这两种求解策略能否确保得到最优解 ?_(11)(能或 否 ) 9 (2012年上半年下午试题四 )阅读下列说明和 C代码,回答问题 1至问题 3,将解答写在答题纸的对应栏内。 【说明】 用两台处理机 A和 B处理 n个作业。设 A和B处理第 i个作业的时间分别为 ai和 bi。由于各个作业的特点和机器性能的关系,对某些作业,在 A
14、上处理时间长,而对某些作业,在 B上处理时间长。一台处理机在某个时刻只能处理一个作业,而且作业处理是不可中断的,每个作业只能被处理一次。现要找出一个最优调度方案,使得 n个作业被这两台处理机处理完毕的时间 (所有作业被处理的时间之和 )最少。 算法步骤: (1)确定 候选解上界为 R短的单台处理机处理所有作业的完成时间 m,有 (2)用 p(x, y, k)=1表示前 k个作业可以在 A用时不超过 x且在 B用时不超过 y时间内处理完成,则p(x, y, k)=p(x-ak, y, k-1) p(x, y-bk, k-1)(表示逻辑或操作 )。 (3)得到最短处理时间为 min(max(x,
15、y)。【 C代码】下面是该算法的 C语言实现。 (1)常量和变量说明 n:作业数 m:候选解上界 a:数组,长度为 n,记录 n个作业在 A上的处理时间,下标从 0开始 b:数组,长度为 n,记录 n个作业在 B上的处理时间,下标从 0开 始 k:循环变量 p:三维数组,长度为 (m+1)(m+1)(n+1)temp:临时变量 max:最短处理时间 (2)C代码 #include stdio h int n, m;int a60,b60, p10010060;void read() *输入 n、 a、 b,求出 m,代码略 * void schedule() *求解过程 * int x, y,
16、 k; for(x=0; x =m; x+) for(y=0; y m;y+) _(1) for(k=1;k n; k+) pxyk=0; for(k=1; kn;k+) for(x=0; x =m; x+) for(y=0;y =m;y+) if(x-ak-1 =0)_(2); if(_(3)pxyk=(pxyk pxy-bk-1k-1); void write() *确定最优解并输出 * int X, Y, temp, max=m; for(x=0; x =m; x+) for(y=0; y =m; y+) if(_(4) temp=_(5); if(temp 10 根据以上说明和 C代码
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 中级 设计师 下午 应用技术 算法 设计 分析 历年 汇编 答案 解析 DOC

链接地址:http://www.mydoc123.com/p-506733.html