2015年算法分析与设计期末考试试卷A卷
2015年算法分析与设计期末考试试卷A卷

西南交通大学2015-2016学年第(一)学期考试试卷课程代码 3244152 课程名称 算法分析与设计 考试时间 120 分钟阅卷教师签字:一、 填空题(每空1分,共15分)1. 回溯法的求解目标是找出解空间树中满足约束条件的所有解,而 (1) 法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。
2. 分治算法的基本步骤包括:分解、解决和 (2) 。
3. 选择排序、插入排序和归并排序算法中, (3) 算法是分治算法。
4. 计算一个算法时间复杂度通常可以计算的 (4) 、基本操作的频度或计算步。
5. 贪心算法的基本要素是 (5) 性质和 (6) 性质 。
6. 以广度优先或以最小耗费方式搜索问题解的算法称为 (7) 。
7. 快速排序算法的性能取决于 (8) 。
8. 常见的减治策略分为三类: (9) , (10) ,减可变规模. 9. 堆的构建过程对于堆排序而言是一种 (11) 策略,属于变治思想中的实例化简类型。
10. 分支限界法主要有 (12) 分支限界法和 (13) 分支限界法. 11. 快速排序算法是基于 (14) 的一种排序算法。
12. 动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解 (15) ,然后从这些子问题的解得到原问题的解。
二、 选择题(每题2分,共20分)1、二分搜索算法是利用( )实现的算法.A 、分治策略B 、动态规划法C 、贪心法D 、回溯法 2。
衡量一个算法好坏的标准是( )。
班 级 学 号 姓 名密封装订线 密封装订线 密封装订线A、运行速度快B、占用空间少C、时间复杂度低D、代码短3. 以下关于渐进记号的性质是正确的有:( )A。
f(n)=Θ(g(n)),g(n)=Θ(h(n))⟹f(n)=Θ(h(n))B. f(n)=O(g(n)),g(n)=O(h(n))⟹ℎ(n)=O(f(n))C. O(f(n))+O(g(n))=O(min{f(n),g(n)})D. f(n)=O(g(n))⟺g(n)=O(f(n))4. 下面不是分支界限法搜索方式的是().A、广度优先B、最小耗费优先C、最大效益优先D、深度优先5。
算法设计与分析期末试卷A卷

算法设计与分析期末试卷A卷一、选择题1.二分搜索算法是利用(A)实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法解析:二分搜索是一种基于分治策略的算法。
2.回溯法解旅行售货员问题时的解空间树是(A)。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树解析:旅行售货员问题的解空间树是子集树,因为每个结点代表一个城市的集合。
3.下列算法中通常以自底向上的方式求解最优解的是(B)。
A、备忘录法B、动态规划法C、贪心法D、回溯法解析:动态规划法通常以自底向上的方式求解最优解。
4.下面不是分支界限法搜索方式的是(D)。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先解析:分支界限法搜索方式包括广度优先、最小耗费优先和最大效益优先,但不包括深度优先。
5.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为(B)。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)解析:最优装载问题采用贪心算法的主要计算量在于将集装箱依其重量从小到大排序,因此时间复杂度为O(nlogn)。
6.分支限界法解最大团问题时,活结点表的组织形式是(B)。
A、最小堆B、最大堆C、栈D、数组解析:分支限界法解最大团问题时,活结点表的组织形式是最大堆。
7、下面问题(B)不能使用贪心法解决。
A 单源最短路径问题C 最小花费生成树问题B N皇后问题D 背包问题解析:N皇后问题不能使用贪心法解决。
8.下列算法中不能解决0/1背包问题的是(A)A 贪心法B 动态规划C 回溯法D 分支限界法解析:贪心法不能解决0/1背包问题。
9.背包问题的贪心算法所需的计算时间为(B)A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)解析:背包问题的贪心算法所需的计算时间为O (nlogn)。
二、填空题1.算法的复杂性有时间复杂性和空间复杂性之分。
2.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有穷性四条性质。
《算法设计与分析》考试题目及答案(DOC)

6. 能采用贪心算法求最优解的问题,一般具有的重要性质为:(A) A. 最优子结构性质与贪心选择性质 B.重叠子问题性质与贪心选择性质
3. 所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最 优的选择,即贪心选择来达到)。
4. 所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。 5. 回溯法是指(具有限界函数的深度优先生成法)。 6. 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任 何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树 中 从根结点到叶结点的最长路径的长度为 h(n),则回溯法所需的计算空间通 常为(O(h(n)))。 7. 回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与
12. 用回溯法解图} 的 m 着色问题时,使用下面的函数 OK 检查当前扩展结点的
每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)(O(mn))。
Bool Color::OK(int k) {//
for(int j=1;j<=n;j++) if((a[k][j]= =1)&&(x[j]= =x[k])) return false;
f(n)个单位时间。用 T(n)表示该分治法解规模为|P|=n 的问题所需的计算时
间,则有:T (n)
kT (n
O(1) / m)
f
(n)
n 1 n 1
算法设计与分析a卷及答案

算法设计与分析试题A及答案一.填空题:(每题4分,共20分)1.算法是指(解决问题的)一种方法或一个过程,是(若干指令的)有穷序列。
2质。
3. 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到。
4.递归函数的两大基本要素是_递归方程和边界条件_ .5.在回溯法中,一个问题的解空间是指一个大的解决方案可以看作是由若干个小的决策组成。
很多时候它们构成一个决策序列。
解决一个问题的所有可能的决策序列构成该问题的解空间.二.简答题:(每题5分,共20分)1.简述分治法所能解决的问题一般应具有的特征。
1.)该问题的规模缩小到一定的程度就可以容易地解决;2.)该问题具有最优子结构性质;3.)利用该问题分解出的子问题的解可以合并为该问题的解;4.)该问题所分解出的各个子问题是相互独立的。
2.设有待安排的8个活动的开始时间和结束时间如下表。
请采用贪心算法给出活动安排序解:将待安排的8个活动的开始时间和结束时间按结束时间的非减序排列如下:用贪心算法给出活动安排序列:1,3,6,8。
贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。
3.请描述分治法的具体过程。
将原问题划分成k 个子问题。
对这k 个子问题分别求解。
如果子问题的规模仍然不够小,则再划分为k 个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。
将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
4. Fibonacci 数列如下定义:10()11(1)(2)1n F n n F n F n n =⎧⎪==⎨⎪-+->⎩1、 请设计一个递归算法,计算F(n)。
2、 分析算法的时间复杂性。
解 1、int fibonacci(int n) { if (n <= 1) return 1;return fibonacci(n-1)+fibonacci(n-2); }2、T(n)=T(n-1)+T(n-2)。
(完整版)算法设计与分析期末考试卷及答案a

flag=false
_
_
end if
_
__
end for
A[i] A[1]
w =i
return w, A end SPLIT
二.计算题和简答题(每小题
1.用O、、 表示函数f与g之间阶的关系,并分别指出下列函数中阶最低和最高 的函数:
(1)f (n)=100g(n)=100n
(2)f(n)=6n+nlog ng(n)=3n
算法EX1
输入:正整数n,n=2k。输出:⋯
ex1(n)
end EX1过程ex1(n) if n=1 then pro1(n)
else
栏
名姓
级年
_
_系
_院学
pro2(n)
ex1(n/2) end if
return
end ex1
3.用Floyd算法求下图每一对顶点之间的最短路径长度, 计算矩阵D0,D1,D2和D3,其中Dk[i, j]表示从顶点i到顶点j的不经过编号大于
i=find ( (1) )
if i>0 then output i
else output“no solution”
end SEARCH
过程find (low, high)
//求A[low..high]中使得A[i]=i的一个下标并返回,若不存在,
//则返回0。
if (2) then return 0
生专
_
订
马的周游问题:给出一个nxn棋盘,已知一个中国象棋马在
_
_
棋盘上的某个起点位置(x0, y0),求一条访问每个棋盘格点恰好
_
_
一次,最后回到起点的周游路线。 (设马走日字。)
算法设计与分析试卷试题(A)(附答案)

chengcheng算法分析考试试卷(A卷)课程名称算法分析编号题号一二三四总分得分评阅人一、填空题(每小题3分,共30分)1、一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
2、这种不断回头寻找目标的方法称为回溯法。
3、直接或间接地调用自身的算法称为递归算法。
4、 记号在算法复杂性的表示法中表示紧致界。
5、由分治法产生的子问题往往是原问题较小模式,这就为使用递归技术提供了方便。
6、建立计算模型的目的是为了使问题的计算复杂性分析有一个共同的客观尺度。
7、下列各步骤的先后顺序是②③④①。
①调试程序②分析问题③设计算法④编写程序。
8、最优子结构性质的含义是问题最优解包含其子问题最优解。
9、贪心算法从初始阶段开始,每一个阶段总是作一个使局部最优的贪心选择。
10、拉斯维加斯算法找到的解一定是正确的。
二、选择题(每小题2分,共20分)1、哈夫曼编码可利用( C )算法实现。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是基本计算模型的是( B )。
A、RAMB、ROMC、RASPD、TM3、下列算法中通常以自顶向下的方式求解最优解的是( C)。
A、分治法B、动态规划法C、贪心法D、回溯法chengcheng 4、在对问题的解空间树进行搜索的方法中,一个活结点有多次机会成为活结点的是( A )A、回溯法B、分支限界法C、回溯法和分支限界法D、动态规划5、秦始皇吞并六国使用的远交近攻,逐个击破的连横策略采用了以下哪种算法思想? BA、递归;B、分治;C、迭代;D、模拟。
6、FIFO是( A )的一搜索方式。
A、分支界限法B、动态规划法C、贪心法D、回溯法7、投点法是( B )的一种。
A、分支界限算法B、概率算法C、贪心算法D、回溯算法8、若线性规划问题存在最优解,它一定不在( C )A.可行域的某个顶点上 B.可行域的某条边上 C.可行域内部 D.以上都不对9、在一般输入数据的程序里,输入多多少少会影响到算法的计算复杂度,为了消除这种影响可用( B )对输入进行预处理。
(完整版)算法设计与分析考试题及答案,推荐文档

____________________________________。 4.若序列 X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列
X 和 Y 的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至
和
之分。
5、 f(n)= 6×2n+n2,f(n)的渐进性态 f(n)= O(
)
6、 贪心算法总是做出在当前看来
的选择。也就是说贪心算法并不从整体最优考
虑,它所做出的选择只是在某种意义上的
。
7、 许多可以用贪心算法求解的问题一般具有 2 个重要的性质:
性质和
性质。
二、简答题(本题 25 分,每小题 5 分)
五、算法理解题(本题 5 分) 设有 n=2k 个运动员要进行循环赛,
现设计一个满足以下要求的比赛日程表:
①每个选手必须与其他 n-1 名选手比赛各一次; ②每个选手一天至多只能赛一次;
③循环赛要在最短时间内完成。
我去(人1)如也果 就n=2k有,循人环赛!最少为需要U进R行扼几天腕; 入站内信不存在向你偶同意调剖沙 (2)当 n=23=8 时,请画出循环赛日程表。
六、算法设计题(本题 15 分) 分别用贪心算法、动态规划法、回溯法设计 0-1 背包问题。要求:说明所使用的算法
策略;写出算法实现的主要步骤;分析算法的时间。 七、算法设计题(本题 10 分)
建议收藏下载本文,以便随时学习! 通过键盘输入一个高精度的正整数 n(n 的有效位数≤240),去掉其中任意 s 个数字后, 剩下的数字按原左右次序将组成一个新的正整数。编程对给定的 n 和 s,寻找一种方案, 使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13
算法分析与设计综合试卷

算法与分析综合试卷一、选择题1.算法分析是()。
A.将算法用某种程序设计语言恰当地表示出来B.在抽象数据集合上执行程序,以确定是否会产生错误的结果C.对算法需要多少计算时间和存储空间作定量分析D.证明算法对所有可能的合法输入都能算出正确的答案2.算法确认是()。
A.将算法用某种程序设计语言恰当地表示出来B.证明算法对所有可能的合法输入都能算出正确的答案C.对算法需要多少计算时间和存储空间作定量分析D.在抽象数据集合上执行程序,以确定是否会产生错误的结果3.算法与程序的区别在于算法具有()。
A.能行性B.确定性C.有穷性D.输入和输出4.设A[1..60]={11,12,…,70}。
算法BINARYSEARCH在A上搜索x=33、7、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=d5.算法INSERTIONSORT 在A[1..8]={45,33,24,45,12,12,24,12}上运行时执行的元素比较次数为()。
A.14 B.28 C.7 D.226.当A[1..n]中元素取值在范围()时,算法RADIXSORT 的时间复杂度为T(nlogn)。
A.A.[1..n] B.[n..2n] C.[1..n2] D.[1.. 2n]7.设待排序的序列A[1..n]中元素取值于[1..n!],则下列哪一个算法最坏情况下排序更慢?A.SELECTIONSORT B.INSERTIONSORTC.RADIXSORT D.BUBBLESORT8.一个排序算法如果能够使得序列中相同元素的位置次序在排序前后保持一致,则称之为稳定的排序算法。
下列几种排序算法中哪一种不是稳定的?A.SELECTIONSORT B.RADIXSORTC.BUBBLEBSORT D.BOTTOMUPSORT9.使用算法EXP来计算下列哪一个整数次幂所花费的乘法次数最多?A.35B.36C.37D.3810.算法MAJORITY在下列哪一个输入上执行时最后j=n,count=1,且c是主元素?A.{5,7,5,4,5} B.{5,7,5,4,8} C.{2,4,1,4,4,4,6,4} D.{1,2,3,4,5} 11.用贪心法设计算法的关键是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南交通大学2015-2016学年第(一)学期考试试卷课程代码 3244152 课程名称 算法分析与设计 考试时间 120 分钟阅卷教师签字:一、 填空题(每空1分,共15分)1. 回溯法的求解目标是找出解空间树中满足约束条件的所有解,而 (1) 法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。
2. 分治算法的基本步骤包括:分解、解决和 (2) 。
3. 选择排序、插入排序和归并排序算法中, (3) 算法是分治算法。
4. 计算一个算法时间复杂度通常可以计算的 (4) 、基本操作的频度或计算步。
5. 贪心算法的基本要素是 (5) 性质和 (6) 性质 。
6. 以广度优先或以最小耗费方式搜索问题解的算法称为 (7) 。
7. 快速排序算法的性能取决于 (8) 。
8. 常见的减治策略分为三类: (9) , (10) ,减可变规模。
9. 堆的构建过程对于堆排序而言是一种 (11) 策略,属于变治思想中的实例化简类型。
10. 分支限界法主要有 (12) 分支限界法和 (13) 分支限界法。
11. 快速排序算法是基于 (14) 的一种排序算法。
12. 动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解 (15) ,然后从这些子问题的解得到原问题的解。
二、 选择题(每题2分,共20分)1、二分搜索算法是利用( )实现的算法。
A 、分治策略B 、动态规划法C 、贪心法D 、回溯法 2. 衡量一个算法好坏的标准是( )。
班 级 学 号 姓 名密封装订线 密封装订线 密封装订线A、运行速度快B、占用空间少C、时间复杂度低D、代码短3. 以下关于渐进记号的性质是正确的有:()A.f(n)=Θ(g(n)),g(n)=Θ(h(n))⟹f(n)=Θ(h(n))B. f(n)=O(g(n)),g(n)=O(h(n))⟹ℎ(n)=O(f(n))C. O(f(n))+O(g(n))=O(min{f(n),g(n)})D. f(n)=O(g(n))⟺g(n)=O(f(n))4. 下面不是分支界限法搜索方式的是()。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先5. 记号Ω的定义正确的是()。
有:0≤ f(n) ≤A、O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥ncg(n) };B、O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤ cg(n) ≤f(n) };C、(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤f(n)<cg(n) };D、(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cg(n) < f(n) };6. 以深度优先方式系统搜索问题解的算法称为 ( ) 。
A、分支界限算法B、概率算法C、贪心算法D、回溯算法7. 矩阵连乘问题的算法可由()设计实现。
A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法8. 采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为( ) 。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)9. 合并排序算法是利用()实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法10. 优先队列式分支限界法选取扩展结点的原则是()。
A、先进先出B、后进先出C、结点的优先级D、随机三、算法及程序分析(共25分)。
1、阅读下面的程序,按要求回答问题:(共15分)typedef struct SqList{int *r;int Length;}SqList;void QuickSort(SqList *L){QSort(L,1,L->Length);return;}void QSort(SqList *L, int low,int high){int pivotloc;if(low<high){pivotloc=Partion(L,low,high);QSort(L,low,pivotloc-1);QSort(L,pivotloc+1,high);}return;}int Partion(SqList *L, int low,int high){int pivotkey;L->r[0]=L->r[low];pivotkey=L->r[low];while(low<high){while(low<high && L->r[high]>=pivotkey)--high;L->r[low]=L->r[high];while(low<high && L->r[low]<=pivotkey)++low;L->r[high]=L->r[low];}L->r[low]=L->r[0];return low;}(1)请问上述程序采用什么算法?(2分)(2)设L->Length的值为n,请求QuickSort(SqList *L)函数的时间复杂度,写出求解过程。
(8分)(3)设传递到Partion(SqList *L, int low,int high)函数的参数如下:(5分)L->Length: 8;L->r: {12,25,15,20,35,48,23,76,18}Low: 1High:7请写出该函数执行结束之后L->r的值以及函数返回的值。
2、阅读下面的程序,按要求回答问题。
(共10分)typedef struct ArcNode{int adjvex;float weight;struct ArcNode *nextarc;}ArcNode;typedef struct VNode{int visited;char data[20];ArcNode *firstarc;}VNode,*AdjList;typedef struct ALGraph{int vexnum,arcnum;VNode *vertices;}ALGraph,*Graph;Graph PrimTree(Graph G){Graph CTree;int i,Maxpos,pos=0;CTree=(Graph)malloc(sizeof(ALGraph));CTree->vexnum=0;CTree->vertices=(AdjList)malloc(sizeof(VNode)*(G->vexnum+1));for(i=0;i<G->vexnum;i++)G->vertices[i].visited=0;Maxpos=InsertStr(G->vertices[pos].data,CTree);for(i=0;i<=Maxpos;i++){Maxpos=FindPrimWeight(G,CTree,i);if(Maxpos>G->vexnum)break;}return CTree;}int FindPrimWeight(Graph G,Graph CTree,int Maxpos){float Minw;ArcNode *p,*q=NULL;int rpos,pos,curpos,i,cpos;char *s;curpos=Maxpos;Minw=(float)3.4E38;for(i=0;i<=Maxpos;i++){pos=InsertStr(CTree->vertices[i].data,G);p=G->vertices[pos].firstarc;G->vertices[pos].visited=1;if(p!=NULL){while(p!=NULL){if(G->vertices[p->adjvex].visited==0 && Minw>p->weight){ Minw=p->weight;q=p;cpos=i;}p=p->nextarc;}}}if(q!=NULL){G->vertices[q->adjvex].visited=1;s=G->vertices[q->adjvex].data;rpos=InsertStr(s,CTree);G->arcnum++;InsNode(cpos,rpos,CTree,q->weight);curpos=curpos>rpos?curpos:rpos;}return curpos;}int InsertStr(char *stemp,Graph G){int i;char *ctemp;ctemp=G->vertices[0].data;for(i=0;i<G->vexnum;i++){ctemp=G->vertices[i].data;if(strcmp(stemp,ctemp)==0)break;}if(i==G->vexnum){G->vertices=(AdjList)realloc(G->vertices,sizeof(VNode)*(G->vexnum+1));ctemp=G->vertices[i].data;strcpy(ctemp,stemp);G->vertices[i].firstarc=NULL;G->vertices[i].visited=0;G->vexnum++;}return i;}void InsNode(int pos1,int pos2, Graph G,float weight){ArcNode *p,*q;p=(ArcNode*)malloc(sizeof(ArcNode));p->weight=weight;p->adjvex=pos2;p->nextarc=NULL;if(G->vertices[pos1].firstarc==NULL)G->vertices[pos1].firstarc=p;else{q=G->vertices[pos1].firstarc;while(q->nextarc!=NULL)q=q->nextarc;q->nextarc=p;}return;}(1)请问上述程序采用什么算法?(2分)(2)设传递给Graph PrimTree(Graph G)函数的参数G的值如下图所示,请用图的形式表示函数执行结束之后的返回值。