2009-2010学年第二学期《计算机算法设计与分析》试卷A--参考答案(软07级)

2009—2010 学年第二学期《计算机算法设计与分析》试卷(A)
(院系:软件学院专业:软件工程年级:07级考核形式:开卷)
参考答案
一、简答题(共3小题,第1,2小题3分,第3小题4分,总计10分)
1.(3分) 请用英文写出三种以上能求解0-1背包问题的设计算法策略。

答:
Dynamic Programming
Backtrack
Branch-and-Bound
(每答对一条给一分)
2.(3分) 请说明动态规划方法为什么需要最优子结构性质。

答:
最优子结构性质是指大问题的最优解包含子问题的最优解。

动态规划方法是自底向上计算各个子问题的最优解,即先计算子问题的最优解,然后再利用子问题的最优解构造大问题的最优解,因此需要最优子结构3. (4分) 请说明:(1)优先队列可用什么数据结构实现?(2)优先队列插入算法
基本思想?(3)优先队列插入算法时间复杂度?
答:(1)堆。

(1分)
(2)在小根堆中,将元素x插入到堆的末尾,
然后将元素x的关键字与其双亲的关键字比较,
若元素x的关键字小于其双亲的关键字,
则将元素x与其双亲交换,然后再将元素x与其新双亲的关键字相比,
直到元素x的关键字大于双亲的关键字,或元素x到根为止。

(3)O( log n)(1分)
二、填空题(共15个空,每空1分,总计15分)
1.递归的二分查找算法在divide阶段所花的时间是O(1) ,conquer 阶段所花的时间是T(n/2) ,算法的时间复杂度是O( log n)。

2.Prim算法利用贪心策略求解最小生成树问题,其时间复杂度是O(n2) 。

3.背包问题可用贪心法,回溯法等策略求解。

4.用动态规划算法计算矩阵连乘问题的最优值所花的时间是O(n3) ,子问题空间大小是O(n2) 。

5.图的m着色问题可用回溯法求解,其解空间树中叶子结点个数是m n,解空间树中每个内结点的孩子数是m 。

6.单源最短路径问题可用贪心法、分支限界等策略求解。

三、计算题(共4小题,第1,2,3小题10分,第4小题15分, 总计45分) 1.用动态规划策略求解最长公共子序列问题: (1)给出计算最优值的递归方程。

(3分)
(2)给定两个序列X={B,C,D,A},Y={A,B,C,B},请采用动态规划策略求出
其最长公共子序列,要求给出过程。

(7分)
答:
(1)(3分)
⎪⎩
⎪
⎨⎧≠>--=>+--===时y 0且x j 当i,)j]1,c[i 1],j max(c[i,时y 0且x j 当i,11]j 1,c[i 0时0或j 当i 0
j]c[i,i i i i
(2)
Y A B C B
X 0 0 0 0 B 0 0 1 1 1 C 0 0 1 2 2 D 0 0 1 2 2
A 0 1 1 2 2 最长公共子序列:{BC} (矩阵部分5分,最长公共子序列2分,共7分。

)
2.(10分)对下列各组函数f (n) 和g (n),确定f (n) = O (g (n)) 或f (n) =Ω(g (n))
或f(n) =θ(g(n)),并简要说明理由。

(1) f(n)=2n
; g(n)=n! (2) f(n)=n ; g (n)=log n 2 (3) f(n)=100; g(n)=log100 (4) f(n)=n 3; g(n)= 3
n
(5) f(n)=3n ; g(n)=2n 答:(每小题2分,共10分。

)
(1) f(n) = O(g(n)) 因为g(n)的阶比f(n)的阶高。

(2) f(n) = Ω(g(n)) 因为g(n)的阶比f(n)的阶低。

(3) f(n) = θ(g(n)) 因为g(n)与f(n)同阶。

(4)f(n) = O(g(n)) 因为g(n)的阶比f(n)的阶高。

(5)f(n) = Ω(g(n)) 因为g(n)的阶比f(n)的阶低。

3.(10分)对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。

说明该算法的贪心策略和算法的基本思想,并简要分析算法的时间复杂度。

答:
TE={(3,4), (2,3),(1,5),(4,6)(4,5)} (5分)
贪心策略是每次都在连接两个不同连通分量的边中选权值最小的边。

基本思想:首先将图中所有顶点都放到生成树中,然后每次都在连接两个不
同连通分量的边中选权值最小的边,将其放入生成树中,直到生成树中有n-1
条边。

(4分)
时间复杂度为:O(eloge) (1分)
4.(15分)考虑n=3的批处理作业调度实例:
其中t ji是作业J i需要在机器j上处理的时间。

对于给定的3个作业,制定一
个最佳作业调度方案,使其完成时间和达到最小。

要求:
(1)画出该问题的解空间树;(5分)(2)写出该问题的剪枝策略(即限界条件),要求只保留第一个最优解;
(2分)(3)按优先队列式分支限界法搜索解空间树,并用剪枝策略对解空间树中该剪枝的位置打 ;(5分)(4)给出最优解及最优值。

(3分)
答:
(1)
(2)若当前代价f >= 当前最优解代价bestf ,则剪枝。

(3)见(1)中所画的图。

(4)最优解为{3,1,2},最优值为25。

四、算法题(共2小题,每小题15分,总计30分) 1.(15分)请用分治策略设计递归的归并排序算法,并分析其时间复杂性(要求:分别给出divide 、conquer 、combine 这三个阶段所花的时间,并在此基础上列出递归方程,最后用套用公式法求出其解的渐进阶)。

答 : Template <class Type>
void MergeSort (Type a[ ], int left, int right) (1分) { if (left<right) (1分) { int i=(left+right )/2; (1分) MergeSort (a, left, i ); (1分) MergeSort (a, i+1, right ); (1分) Merge(a, b, left, right); (1分) Copy(a, b, left, right); (1分) }
}
Divide 阶段的时间复杂性: O(1) (1分) Conquer 阶段的时间复杂性: 2T(n) (1分) Combine 阶段的时间复杂性: Θ(n) (1分)
(2分)
用套用公式法:a=2, b=2, n log b a = n , f(n)=n, 因为f(n)与n log b a 同阶,(2分) ∴T(n) =Θ(nlogn) (1分)
⎩⎨⎧
>+==1当n θ(n)2T(n/2)
1当n θ(1)T(n)
2.(15分)设n后问题的显约束条件是两个皇后不能在同一行及同一列,求解n 后问题的递归的回溯算法如下。

它计算可行解的个数,并将所有可行解输出。

请给算法填空(包括部分循环语句和条件判断语句后面的注释)。

设x[i]的初值为i(1≤i≤n),sum的初值为0。

bool Queen :: Place(int k)
{for (int j=1;j<k; j++)
if( abs(k-j)==abs(x[j]-x[k]) ) // 判断两个皇后是否在同一斜线
return false;
return true ;
}
void Queen::Backtrack(int t)
{if (t>n) // 得到一个可行解
{sum++; // 可行解个数加1
for( int i=1; i<=n; i++ ) //输出可行解
count<<x[i]<< ‘‘;
}
else for ((int j= t ;j<=n;j++)
{Swap(x[t] ,x[j]);
if (Place(t)) // 检查第t个皇后与前t-1个皇后是否在同一斜线
Backtrack( t+1 );
Swap(x[t] ,x[j] );
}
}。

合集下载

《计算机算法设计与分析》答案

《计算机算法设计与分析》答案

《计算机算法设计与分析》试卷 考试时间120分钟2002年-2003年第二学期学号 姓名 成绩一、阐述题1. 请说明算法的五个基本特性,并进行简要的分析(5分) 答:算法的五个基本特性如下:① 确定性 算法的每一种运算必须要有确切的定义,即每一种运算应该执行何种动作必须是相当清楚的、无二义性的。

② 能行性 一个算法是能行的是指算法中有待实现的运算都是基本的运算,每种运算至少在原理上能由人用纸和笔在有限时间内完成。

③ 输入 一个算法有0个或多个输人,这些输人是在算法开始之前给出的量,它取自特定的对象集合。

④ 输出 一个算法产生一个或多个输出,这些输出是同输人有某种特定关系的量。

⑤ 有穷性 一个算法总是在执行了有穷步的运算之后能够终止,且每一步都可在有穷时间内完成。

这里的有穷的概念不是纯数学的,而是在实际上是合理的,可以接受的。

凡是算法,都必须满足以上五条特性。

只满足前四条特性的一组规则不能称为算法,只能叫做计算过程。

2. 若森林非空,请按照森林和树相互递归的定义,阐述森林的两种遍历的方法。

(10分) 答:森林是由m(m ≥0)棵互不相交的树构成的集合。

对树中的每一个结点而言,其子树的集合即为森林。

所以,森林和树是可以相互递归定义的。

对于一个非空的森林F=(T 1,T 2,…,T m ),因为至少存在一棵树,不妨假设为T 1,则森林F 可以分解成T 1和由T 2,…,T m 构成的森林。

于是,可得到森林的两种遍历算法。

① 先序遍历森林若森林非空,则可按下述规则遍历这个森林: (1) 访问树中第一棵树的根结点;(2) 先序遍历第一棵中根结点的所有子树构成的森林; (3) 先序遍历除去第一棵树外剩下的树构成的森林。

② 中序遍历森林若森林非空,则可按下述规则遍历这个森林:(1) 中序遍历第一棵中根结点的所有子树构成的森林; (2) 访问树中第一棵树的根结点;(3) 中序遍历除去第一棵树外剩下的树构成的森林。

算法设计与分析A9卷答案

算法设计与分析A9卷答案

南阳理工学院试卷课程:算法设计与分析评卷人(签名):复核人(签名):一、选择题(每小题3分,共15分)1.算法分析是()。

A.将算法用某种程序设计语言恰当地表示出来B.在抽象数据集合上执行程序,以确定是否会产生错误的结果C.对算法需要多少计算时间和存储空间作定量分析D.证明算法对所有可能的合法输入都能算出正确的答案答案:C。

2.设A[1..60]={11,12,…,70}。

二分搜索算法在A 上搜索x=7、33、70、77 时执行的元素比较次数分别为a、b、c、d,则()。

A.a<b<c<d B.a>b=c=d C.a<b=c=d D.a<c<b=d答案:C。

3.背包问题:n=6,C=10,V(1:6)=(15,59,21,30,60,5),W(1:6)=(1,5,2,3,6,1)。

该问题的最大价值为()。

A.119 B.110 C.115 D.120答案:C4.矩阵连乘问题:M1(5×10), M2(10×4), M3(4×6)。

矩阵链乘M1M2M3需要的最少的乘法次数为()。

A.540 B.320 C.720 D.300答案:B。

5.用贪心法设计算法的关键是()。

A.将问题分解为多个子问题来分别处理 B.选好贪心策略C.获取各阶段间的递推关系式 D.满足最优性原理答案:B。

二填空题(每空4分,共20分)1.某算法的计算时间T(n)满足递归关系式:T(n)=2T(n/2)+1,n>1;T(1)=1。

则T(n)= 。

答案:nlogn。

2. 子集和数问题一般陈述如下:已知n+1个正数:w i(1≤i≤n)和M,要求找出w i的和数是M 的所有子集。

其解可以表示为n-元组(x1 , x2 ,⋯, x n),这里x i∈{0,1},1≤i≤n。

如果没有选择w i,则相应的x i=0;如果选择了w i,则x i=1。

考虑以下实例:n=6,M=20,W(1:6)=(3,7,10,12,13,15)。

计算机算法设计和分析习题及答案解析

计算机算法设计和分析习题及答案解析

计算机算法设计和分析习题及答案解析This manuscript was revised on November 28, 2020《计算机算法设计与分析》习题及答案一.选择题1、二分搜索算法是利用( A )实现的算法。

A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( A )。

A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是(A )的一搜索方式。

A、分支界限法B、动态规划法C、贪心法D、回溯法4. 回溯法解旅行售货员问题时的解空间树是( A )。

A、子集树B、排列树C、深度优先生成树D、广度优先生成树5.下列算法中通常以自底向上的方式求解最优解的是(B )。

A、备忘录法B、动态规划法C、贪心法D、回溯法6、衡量一个算法好坏的标准是( C )。

A 运行速度快B 占用空间少C 时间复杂度低D 代码短7、以下不可以使用分治法求解的是( D )。

A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题8. 实现循环赛日程表利用的算法是(A )。

A、分治策略B、动态规划法C、贪心法D、回溯法9.下面不是分支界限法搜索方式的是(D )。

A、广度优先B、最小耗费优先C、最大效益优先D、深度优先10.下列算法中通常以深度优先方式系统搜索问题解的是(D )。

A、备忘录法B、动态规划法C、贪心法D、回溯法11.备忘录方法是那种算法的变形。

( B )A、分治法B、动态规划法C、贪心法D、回溯法12.哈夫曼编码的贪心算法所需的计算时间为(B )。

A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)13.分支限界法解最大团问题时,活结点表的组织形式是(B )。

A、最小堆B、最大堆C、栈D、数组14.最长公共子序列算法利用的算法是(B)。

A、分支界限法B、动态规划法C、贪心法D、回溯法15.实现棋盘覆盖算法利用的算法是(A )。

A、分治法B、动态规划法C、贪心法D、回溯法16.下面是贪心算法的基本要素的是(C )。

【课后习题及答案】《计算机算法设计与分析(第三版)课后习题答案详解

【课后习题及答案】《计算机算法设计与分析(第三版)课后习题答案详解

精品课程 课后习题答案第 1 章 算 法 概 述习蹬 1- 1函数的渐近表达式求下列函数的渐近表达式:3, f + 10 n ; 1l 匀10·+·2'' ; 分析与解答: 3矿+10n 二. ( ) ( 4 ) ;,l / 10+ 2 擒 = 0 ( 2” ) ; 2.1-t- l 过 一( ){ 1 ) ;lo 耟. ; t = ( ) ( l (1g1.1) ; I O l og 守 =('i ?!), 21 + 1;, 1; l o g n ' ; 10lv g3飞习题 1- 21() . l )和() ( 2 )的区别试论 ( )( l ) 和 () ( 2 )的区别. 分析与觞答:根据符号()的定义易知0 (1 ) = 0( 2)。

用()(1) 或 0 ( 2 ) 表示同一个函数时 ,差别仅在于 其中的祜数因子。

习题 1- 4 按渐近阶排列表达式按照渐近阶从低到高的顺序排列以下表达式,4n \排在哪一位?分析与解答:l ()g n , 3入 20:ri, 2 . n 2/又 义叫 应该3飞 n!。

, 函 数 排列 顺 序 如 下 : 2 .l og t , n23 、20n, 4,i-, 按 浙 近 阶从 低到尚 习题 1- 5箕法效宇( l ) 假设某符法在椋人栽模为”时的计算时间为 T (,t) = 3 X 2又 在某 台计算机上实现井 完成该算 法的时间为1 秒.现有另一台计算机,其运行速度为第一台的 64 倍,那么在这台新 机器 十用 同 一 符 法在 t 秒 内 能 招 轮人规模为多大的间题?( 2) 若上述芬法的计算时间改进为 T ( n )=r/'能解轴入规枑为多大的问烦?( 3) 若 上述算法的计算时间进一步改进为 T (11) = 8 ,f 秒和可能解输人规筷 为多 大的问 题?分析与解答 :其余 条 件不 变 ,则 在新 机 器上用i 秒时间其 余 条 件 不 变 ,那么在新机器上用"赁法 在 t · 秒1引能 解输人规模 为 n l 的问题。

计算机二级2009-2010真题及答案(完全免费)

计算机二级2009-2010真题及答案(完全免费)

2009年全国计算机等级考试二级(笔试试卷)C语言程序设计(考试时间90分钟,满分100分)一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)(1)下列数据结构中,属于非线性结构的是A)循环队列B) 带链队列C) 二叉树D)带链栈(2)下列数据结果中,能够按照“先进后出”原则存取数据的是A) 循环队列B) 栈C)队列D)二叉树(3)对于循环队列,下列叙述中正确的是A)队头指针是固定不变的B)队头指针一定大于队尾指针C)队头指针一定小于队尾指针D)队头指针可以大于队尾指针,也可以小于队尾指针(4)算法的空间复杂度是指A)算法在执行过程中所需要的计算机存储空间B)算法所处理的数据量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的临时工作单元数(5)软件设计中划分模块的一个准则是A) 低内聚低耦合B) 高内聚低耦合C) 低内聚高耦合D) 高内聚高耦合(6)下列选项中不属于结构化程序设计原则的是A) 可封装D) 自顶向下C) 模块化D) 逐步求精(7)软件详细设计产生的图如下:该图是A) N-S图B) PAD图C) 程序流程图D) E-R图(8)数据库管理系统是A)操作系统的一部分B) 在操作系统支持下的系统软件C) 一种编译系统D) 一种操作系统(9)在E-R图中,用来表示实体联系的图形是A) 椭圆图B) 矩形C) 菱形D) 三角形(10)有三个关系R,S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为A) 选择B) 投影C) 交D) 并(11)以下叙述中正确的是A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整(12)以下选项中,能用作用户标识符的是A)voidB)8_8C)_0_D)unsigned(13)阅读以下程序#includemain(){ int case; float printF;printf(“请输入2个数:”);scanf(“%d %f”,&case,&pjrintF);printf(“%d %f\n”,case,printF);}该程序编译时产生错误,其出错原因是A)定义语句出错,case是关键字,不能用作用户自定义标识符 B)定义语句出错,printF不能用作用户自定义标识符C)定义语句无错,scanf不能作为输入函数使用D)定义语句无错,printf不能输出case的值(14)表达式:(int)((double)9/2)-(9)%2的值是A)0B)3C)4D)5(15)若有定义语句:int x=10;,则表达式x-=x+x的值为A)-20B)-10C)0D)10(16)有以下程序#includemain(){ int a=1,b=0;printf(“%d,”,b=a+b);printf(“%d\n”,a=2*b);}程序运行后的输出结果是A)0,0B)1,0C)3,2D)1,217)设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是 A)if(a>b) c=a,a=b,b=c;B)if(a>b) {c=a,a=b,b=c;}C)if(a>b) c=a;a=b;b=c;D)if(a>b) {c=a;a=b;b=c;}(18)有以下程序#includemain(){ int c=0,k;for (k=1;k<3;k++)switch (k){ default: c+=kcase 2: c++;break;case 4: c+=2;break;}printf(“%d\n”,c);}程序运行后的输出结果是A)3B)5C)7D)9(19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是A)if((a>b)&&(b>c)) k=1;else k=0;B)if((a>b)||(b>c) k=1;else k=0;C)if(a<=b) k=0;else if(b<=c) k=1;D)if(a>b) k=1;else if(b>c) k=1;else k=0;20)有以下程序main(){ char s[]={“012xy”};int i,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’a’&&s[i]<=’z’) n++;printf(“%d\n”,n);}程序运行后的输出结果是A)0B)2C)3D)5(21)有以下程序#includemain(){ int n=2,k=0;while(k++&&n++>2);printf(“%d %d\n”,k,n);}程序运行后的输出结果是A)0 2B)1 3C)5 7D)1 2(22)有以下定义语句,编译时会出现编译错误的是A)char a=’a’;B)char a=’\n’;C)char a=’aa’;D)char a=’\x2d’;(23)有以下程序#includemain(){ char c1,c2;c1=’A’+’8’-‘4’;c2=’A’+’8’-‘5’;printf(“%c,%d\n”,c1,c2);}已知字母A的ASCII码为65,程序运行后的输出结果是B)D,69C)E,DD)输出无定值(24)有以下程序#includevoid fun(int p){ int d=2;p=d++; printf(“%d”,p);}main(){ int a=1;fun(a); printf(“%d\n”,a);}程序运行后的输出结果是A)32B)12C)21D)22(25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能#define MIN -2147483647int findmax (int x[],int n){ int i,max;for(i=0;i<N;I++)< p="" />{ max=MIN;if(maxreturn max;}造成错误的原因是A)定义语句int i,max;中max未赋初值B)赋值语句max=MIN;中,不应给max赋MIN值C)语句if(maxD)赋值语句max=MIN;放错了位置(26)有以下程序#includemain(){ int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(“%d,%d,%d,%d\n”,m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,2(27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是 A)p=aB)q[i]=a[i]C)p=a[i]D)p=&a[2][1](28)有以下程序#include#includemain(){ char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];printf(“%d,”,strlen(p));printf(“%s\n”,p);}程序运行后的输出结果是A)9,One*WorldB)9,One*DreamC)10,One*DreamD)10,One*World(29)有以下程序#includemain(){ int a[ ]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){ case 0:switch(a[i]%2){case 0:a[i]++;break;case 1:a[i]--;}break;case 1:a[i[=0;}for(i=0;i<4;i++) printf(“%d”,a[i]); printf(“\n”);}A)3 3 4 4B)2 0 5 0C)3 0 4 0D)0 3 0 4(30)有以下程序#include#includemain(){ char a[10]=”abcd”;printf(“%d,%d\n”,strlen(a),sizeof(a));}程序运行后的输出结果是A)7,4B)4,10C)8,8D)10,10(31)下面是有关C语言字符数组的描述,其中错误的是 A)不可以用赋值语句给字符数组名赋字符串B)可以用输入语句把字符串整体输入给字符数组C)字符数组中的内容不一定是字符串D)字符数组只能存放字符串(32)下列函数的功能是fun(char * a,char * b){ while((*b=*a)!=’\0’) {a++,b++;} }A)将a所指字符串赋给b所指空间B)使指针b指向a所指字符串C)将a所指字符串和b所指字符串进行比较D)检查a和b所指字符串中是否有’\0’(33)设有以下函数void fun(int n,char * s) {……}则下面对函数指针的定义和赋值均是正确的是A)void (*pf)(); pf=fun;B)viod *pf(); pf=fun;C)void *pf(); *pf=fun;D)void (*pf)(int,char);pf=&fun;(34)有以下程序#includeint f(int n);main(){ int a=3,s;s=f(a);s=s+f(a);printf(“%d\n”,s);}int f(int n){ static int a=1;n+=a++;return n;}程序运行以后的输出结果是A)7B)8C)9D)10(35)有以下程序#include#define f(x) x*x*xmain(){ int a=3,s,t;s=f(a+1);t=f((a+1));printf(“%d,%d\n’,s,t);}程序运行后的输出结果是A)10,64B)10,10C)64,10D)64,64(36)下面结构体的定义语句中,错误的是A)struct ord {int x;int y;int z;}; struct ord a;B)struct ord {int x;int y;int z;} struct ord a;C)struct ord {int x;int y;int z;} a;D)struct {int x;int y;int z;} a;(37)设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是A)char str[ ]=”string”;c=str;B)scanf(“%s”,c);C)c=getchar();D)*c=”string”;(38)有以下程序#include#includestruct A{ int a; char b[10]; double c;};struct A f(struct A t);main(){ struct A a={1001,”ZhangDa”,1098.0};a=f(a);jprintf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);}struct A f(struct A t)( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )程序运行后的输出结果是A)1001,ZhangDa,1098.0B)1001,ZhangDa,1202.0C)1001,ChangRong,1098.0D)1001,ChangRong,1202.0(39)若有以下程序段int r=8;printf(“%d\n”,r>>1);输出结果是A)16B)8C)4D)2(40)下列关于C语言文件的叙述中正确的是A)文件由一系列数据依次排列组成,只能构成二进制文件B)文件由结构序列组成,可以构成二进制文件或文本文件C)文件由数据序列组成,可以构成二进制文件或文本文件D)文件由字符序列组成,其类型只能是文本文件二、填空题(每空2分,共30分)(1)某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有【1】个结点。

(整理)《计算机算法-设计与分析导论》课后习题答案.

(整理)《计算机算法-设计与分析导论》课后习题答案.

4.1:在我们所了解的早期排序算法之中有一种叫做Maxsort 的算法。

它的工作流程如下:首先在未排序序列(初始时为整个序列)中选择其中最大的元素max ,然后将该元素同未排序序列中的最后一个元素交换。

这时,max 元素就包含在由每次的最大元素组成的已排序序列之中了,也就说这时的max 已经不在未排序序列之中了。

重复上述过程直到完成整个序列的排序。

(a) 写出Maxsort 算法。

其中待排序序列为E ,含有n 个元素,脚标为范围为0,,1n -。

void Maxsort(Element[] E) { int maxID = 0;for (int i=E.length; i>1; i--) { for (int j=0; j<i; j++) {if (E[j] > E[maxID]) maxID = k; }E[i] <--> E[maxID]; } }最坏情况同平均情况是相同的都是11(1)()2n i n n C n i -=-==∑。

几遍浏览序列实现。

排序策略是顺序比较相邻元素,如果这两个元素未排序则交换这两个元素的位置。

也就说,首先比较第一个元素和第二个元素,如果第一个元素大于第二个元素,这交换这两个元素的位置;然后比较第二个元素与第三个元素,按照需要交换两个元素的位起泡排序的最坏情况为逆序输入,比较次数为11(1)()2n i n n C n i -=-==∑。

(b) 最好情况为已排序,需要(n-1)次比较。

4.3: (a)归纳法:当n=1时显然成立,当n=2时经过一次起泡后,也显然最大元素位于末尾;现假设当n=k-1是,命题也成立,则当n=k 时,对前k-1个元素经过一次起泡后,根据假设显然第k-1个元素是前k-1个元素中最大的,现在根据起泡定义它要同第k 个元素进行比较,当k元素大于k-1元素时,它为k个元素中最大的,命题成立;当k元素小于k-1元素时,它要同k-1交换,这时处于队列末尾的显然时队列中最大的元素。

(完整版)算法设计与分析考试题及答案

一、填空题(20分)1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。

2.算法的复杂性有_____________和___________之分,衡量一个算法好坏的标准是______________________。

3.某一问题可用动态规划算法求解的显著特征是____________________________________。

4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。

5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。

6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。

7.以深度优先方式系统搜索问题解的算法称为_____________。

8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。

9.动态规划算法的两个基本要素是___________和___________。

10.二分搜索算法是利用_______________实现的算法。

二、综合题(50分)1.写出设计动态规划算法的主要步骤。

2.流水作业调度问题的johnson算法的思想。

3.若n=4,在机器M1和M2上加工作业i所需的时间分别为a i和b i,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。

4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。

《计算机算法设计方案附分析》习题及答案解析

《计算机算法设计与剖析》习题及答案一.选择题1、二分搜寻算法是利用( A )实现的算法。

A、分治策略B、动向规划法C、贪婪法D、回溯法2、以下不是动向规划算法基本步骤的是( A )。

A、找出最优解的性质B、结构最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜寻方式。

A、分支界线法B、动向规划法C、贪婪法D、回溯法4. 回溯法解旅游售货员问题时的解空间树是( A )。

A、子集树B、摆列树C、深度优先生成树D、广度优先生成树5.以下算法中往常以自底向上的方式求解最优解的是( B )。

A、备忘录法B、动向规划法C、贪婪法D、回溯法6、权衡一个算法利害的标准是( C )。

A 运转速度快B 占用空间少C 时间复杂度低D 代码短7、以下不可以够使用分治法求解的是( D )。

A 棋盘覆盖问题B 选择问题C 合并排序D 0/1背包问题8. 实现循环赛日程表利用的算法是( A )。

A、分治策略B、动向规划法C、贪婪法D、回溯法9.下边不是分支界线法搜寻方式的是( D )。

A、广度优先B、最小耗资优先C、最大效益优先D、深度优先10.以下算法中往常以深度优先方式系统搜寻问题解的是( D )。

A、备忘录法B、动向规划法C、贪婪法D、回溯法11.备忘录方法是那种算法的变形。

( B )A、分治法B、动向规划法C、贪婪法D、回溯法12.哈夫曼编码的贪婪算法所需的计算时间为( B )。

A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)13.分支限界法解最大团问题时,活结点表的组织形式是( B )。

A、最小堆B、最大堆C、栈D、数组14.最长公共子序列算法利用的算法是( B )。

A、分支界线法B、动向规划法C、贪婪法D、回溯法15.实现棋盘覆盖算法利用的算法是( A )。

A、分治法B、动向规划法C、贪婪法D、回溯法( C )。

A、重叠子问题B、结构最优解C、贪婪选择性质D、定义最优解17.回溯法的效率不依靠于以下哪些因素( D )A.知足显拘束的值的个数B. 计算拘束函数的时间C.计算限界函数的时间D. 确立解空间的时间( B )A.递归函数 B.剪枝函数 C。

《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案一、简要回答下列问题:1.算法重要特性是什么?1. 确定性、可行性、输入、输出、有穷性2.2.算法分析的目的是什么?2. 分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。

3.3.算法的时间复杂性与问题的什么因素相关?3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。

4.算法的渐进时间复杂性的含义?4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。

时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。

5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。

最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6.简述二分检索(折半查找)算法的基本过程。

6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<x,则A[i:(i+j)/2-1]找x,否则在A[ (i+j)/2+1:j] 找x。

上述过程被反复递归调用。

7.背包问题的目标函数和贪心算法最优化量度相同吗?7. 不相同。

目标函数:获得最大利润。

最优量度:最大利润/重量比。

8.采用回溯法求解的问题,其解如何表示?有什么规定?8. 问题的解可以表示为n元组:(x1,x2,……x n),x i∈S i, S i为有穷集合,x i∈S i, (x1,x2,……x n)具备完备性,即(x1,x2,……x n)是合理的,则(x1,x2,……x i)(i<n)一定合理。

2009.1算法设计与分析课程期末试卷-A卷(含答案)

2009.1算法设计与分析课程期末试卷-A卷(含答案)华南农业大学期末考试试卷(A卷)2008学年第一学期考试科目:算法分析与设计考试类型:(闭卷)考试时间:120分钟学号姓名年级专业一、选择题(20分,每题2分)1.下述表达不正确的是。

DA.n2/2 + 2n的渐进表达式上界函数是O(2n)B.n2/2 + 2n的渐进表达式下界函数是Ω(2n)C.logn3的渐进表达式上界函数是O(logn)D.logn3的渐进表达式下界函数是Ω(n3)2.当输入规模为n时,算法增长率最大的是。

AA.5n B.20log2n C.2n2D.3nlog3n3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。

C A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2 C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog2n4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨牌的个数是。

AA.(4k– 1)/3 B.2k /3 C.4k D.2k5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?下面答案解释最合理。

D A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。

但不同方法,算法复杂度上界可能不同6.有9个村庄,其坐标位置如下表所示:个村庄服务,请问邮局应该盖在才能使到邮局到这9个村庄的总距离和最短。

CA.(4.5,0)B.(4.5,4.5)C.(5,5)D.(5,0)7.n个人拎着水桶在一个水龙头前面排队打水,水桶有大有小,水桶必须打满水,水流恒定。

如下说法不正确?AA.让水桶大的人先打水,可以使得每个人排队时间之和最小B.让水桶小的人先打水,可以使得每个人排队时间之和最小C.让水桶小的人先打水,在某个确定的时间t内,可以让尽可能多的人打上水D.若要在尽可能短的时间内,n个人都打完水,按照什么顺序其实都一样8.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档