算法分析复习题答案(2014年5月20日)
- 格式:doc
- 大小:58.50 KB
- 文档页数:4
算法设计与分析试题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)。
算法设计与分析基础习题1.15..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立.Hint:根据除法的定义不难证明:●如果d整除u和v, 那么d一定能整除u±v;●如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。
数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。
故gcd(m,n)=gcd(n,r)6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?Hint:对于任何形如0<=m<n的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcd(m,n)=gcd(n,m)并且这种交换处理只发生一次.7.a.对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?(1次)b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?(5次)gcd(5,8)习题1.21.(农夫过河)P—农夫W—狼G—山羊C—白菜2.(过桥问题)1,2,5,10---分别代表4个人, f—手电筒4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c=0的实根,写出上述算法的伪代码(可以假设sqrt(x)是求平方根的函数)算法Quadratic(a,b,c)//求方程ax^2+bx+c=0的实根的算法//输入:实系数a,b,c//输出:实根或者无解信息If a≠0D←b*b-4*a*cIf D>0temp←2*ax1←(-b+sqrt(D))/tempx2←(-b-sqrt(D))/tempreturn x1,x2else if D=0 return –b/(2*a)else return “no real roots”else //a=0if b≠0 return –c/belse //a=b=0if c=0 return “no real numbers”else return “no real roots”5.描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答:a.将十进制整数转换为二进制整数的算法输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Ki(i=0,1,2...),商赋给n第二步:如果n=0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪代码算法DectoBin(n)//将十进制整数n转换为二进制整数的算法//输入:正整数n//输出:该正整数相应的二进制数,该数存放于数组Bin[1...n]中i=1while n!=0 do {Bin[i]=n%2;n=(int)n/2;i++;}while i!=0 do{print Bin[i];i--;}9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略) 对这个算法做尽可能多的改进.算法MinDistance(A[0..n-1])//输入:数组A[0..n-1]//输出:the smallest distance d between two of its elements习题1.31.考虑这样一个排序算法,该算法对于待排序的数组中的每一个元素,计算比它小的元素个数,然后利用这个信息,将各个元素放到有序数组的相应位置上去.a.应用该算法对列表‖60,35,81,98,14,47‖排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表‖60,35,81,98,14,47‖排序的过程如下所示:b.该算法不稳定.比如对列表‖2,2*‖排序c.该算法不在位.额外空间for S and Count[] 4.(古老的七桥问题)习题1.41.请分别描述一下应该如何实现下列对数组的操作,使得操作时间不依赖数组的长度. a.删除数组的第i 个元素(1<=i<=n)b.删除有序数组的第i 个元素(依然有序) hints:a. Replace the i th element with the last element and decrease the array size of 1b. Replace the ith element with a special symbol that cannot be a value of the array ’s element(e.g., 0 for an array of positive numbers ) to mark the i th position is empty. (―lazy deletion ‖)第2章 习题2.17.对下列断言进行证明:(如果是错误的,请举例) a. 如果t(n )∈O(g(n),则g(n)∈Ω(t(n)) b.α>0时,Θ(αg(n))= Θ(g(n)) 解:a. 这个断言是正确的。
算法分析复习题目及答案16-12-10一。
选择题1、二分搜索算法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( D )。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜索方式。
A、分支界限法B、动态规划法C、贪心法D、回溯法5. 回溯法解旅行售货员问题时的解空间树是()。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法注意:动态规划采用的是自底向上的方式求解,而贪心算法采用的是自顶向下的方式来求解问题。
7、衡量一个算法好坏的标准是(C )。
A 运行速度快B 占用空间少C 时间复杂度低D 代码短8、以下不可以使用分治法求解的是(D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题9. 实现循环赛日程表利用的算法是( A )。
A、分治策略B、动态规划法C、贪心法D、回溯法11.下面不是分支界限法搜索方式的是( D )。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。
A、备忘录法B、动态规划法C、贪心法D、回溯法13.备忘录方法是那种算法的变形。
( B )A、分治法B、动态规划法C、贪心法D、回溯法注意:备忘录是动态规划方法的一个步骤。
14.哈弗曼编码的贪心算法所需的计算时间为( B )。
A、O(n2n)B、O()C、O(2n)D、O(n)15.分支限界法解最大团问题时,活结点表的组织形式是( B )。
A、最小堆B、最大堆C、栈D、数组16.最长公共子序列算法利用的算法是( B )。
A、分支界限法B、动态规划法C、贪心法D、回溯法17.实现棋盘覆盖算法利用的算法是( A )。
A、分治法B、动态规划法C、贪心法D、回溯法18.下面是贪心算法的基本要素的是( C )。
《算法分析与设计》期末复习题一、选择题1.应用Johnson法则的流水作业调度采用的算法是(D)A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi塔问题如下图所示。
现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi塔问题的移动规则。
由此设计出解Hanoi塔问题的递归算法正确的为:(B)Hanoi塔4. 算法分析中,记号O表示(B),记号Ω表示(A),记号Θ表示(D)。
A.渐进下界B.渐进上界C.非紧上界D.紧渐进界E.非紧下界5. 以下关于渐进记号的性质是正确的有:(A)A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))=Θ=Θ⇒=ΘB. f(n)O(g(n)),g(n)O(h(n))h(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))=⇔=6.能采用贪心算法求最优解的问题,一般具有的重要性质为:(A)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。
广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。
A.广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。
A.B.C.D.10.x[k]的个数。
11. 常见的两种分支限界法为(D)A. 广度优先分支限界法与深度优先分支限界法;B. 队列式(FIFO)分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式(FIFO)分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性S(n)是指(B)A.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数。
1、对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或))(()(n g n f Ω=或))(()(n g n f θ=,并简述理由。
(12分)(1) ;5log )(;log )(2+==n n g n n f(2) ;100)(;2)(2n n g n f n ==(3) ;3)(;2)(n n n g n f ==2、试用分治法实现有重复元素的排列问题:设),...,,{21n r r r R =是要进行排列的n 个元素,其中元素n r r r ,...,,21可能相同,试计算R 的所有不同排列。
(13分)3、试用分治法对一个有序表实现二分搜索算法。
(12分)4、试用动态规划算法实现0-1闭包问题。
(15分)5、试用贪心算法求解下列问题:将正整数n 分解为若干个互不相同的自然数之和,使这些自然数的乘积最大。
(15分)6、试用动态规划算法实现最大子矩阵和问题:求n m ⨯矩阵A 的一个子矩阵,使其各元素之各为最大。
(15分)7、试用回溯法解决下列整数变换问题:关于整数i 的变换f 和g 定义如下:⎣⎦2/)(;3)(i i g i i f ==。
对于给定的两个整数n 和m ,要求用最少的变换f 和g 变换次数将n 变为m 。
(18分)1、(1) 证明:O(f)+O(g)=O(f+g) (7分)(2) 求下列函数的渐近表达式:(6分)3n 2+10n; 21+1/n;2、对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或))(()(n g n f Ω=或))(()(n g n f θ=,并简述理由。
(15分)(1) ;5log )(;log )(2+==n n g n n f (2) ;)(;log )(2n n g n n f ==(3) ;log )(;)(2n n g n n f ==3、试用分治法对数组A[n]实现快速排序。
(13分)4、试用动态规划算法实现最长公共子序列问题。
一、填空题(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),并画出其解空间树,计算其最优值及最优解。
2014年华中科技大学软件学院数据结构与算法分析考研真题(回忆版)及部分参考答案一、填空题:1.写出数据结构的四种基本逻辑结构。
2.写出算法的四种特性。
3.一个栈中有六个数字,要求对其进行重新排序,求堆栈的最小容量。
4.求出一串数字的非平凡子串个数。
5.求一平衡二叉树的成功查找长度和不成功查找长度。
…二、选择题:(略)三、分析题:1.给出一个算法过程,要求列出它的开销公式并解出开销函数。
2.根据题意画出Huffman前缀码树并求出编码长度。
3.该题关于KRUSKAL(V,E,w)的最小生成树算法,由给出的具体算法写出其中元素A的变化过程,并求出最小生成树的权。
4.由题中给出的网络流图求剩余流图,在图中标出最小切割,解出S→t的最大网络流。
5.给出一个图,从a开始深度优先搜索,算出每个节点发现和结束的时刻d/f,根据搜索结果标出图上边的类型。
四、算法题:1.根据最短路径延伸算法给出递归表达式,将全成对最短路径填写到题目中的4×4表格中,并写出表格中某一阴影指定位置的路径。
2.证明:A∪(u,v)是图G最小生成树的子集。
3.权重函数f,动态划归,写递推式,用伪码描述算法。
2014年数据结构与算法分析试题部分参考答案一、填空题:1.【解析】集合,线性结构,树形结构,图状结构或网状结构(教材p5)。
2.【解析】有穷性,确定性,可行性,输入,输出。
任选4个。
3.【解析】题目应该是有问题,只有一个栈的话,没法排序啊,弹出来的元素没地方保存。
4.【解析】题目想说的可能是,给出一个字符串S,求出其互异非平凡子串(非空且不同于S)的个数那么如果S中的字符各不相同,且长度为n的话,那么答案是n*n/2+n/2-1。
5.【解析】大概跟有序数组的二分查找时的成功长度/不成功长度的算法差不多吧。
三、分析题1.【解析】略,估计会用到主定理。
2.【解析】霍夫曼树的构建是基础了,11年的试卷就有一题。
3.【解析】课本p175。
《算法设计与分析》试卷1一、多项选择题(每空2分, 共20分):1.以下关于算法设计问题的叙述中正确的是__________。
A.计算机与数值问题的求解——方程式求根、插值问题、数值积分、函数逼近等有关B.利用计算机无法解决非数值问题C.计算机在解决分类、语言翻译、图形识别、解决高等代数和组合分析等方面的数学问题、定理证明、公式推导乃至日常生活中各种过程的模拟等问题中, 主要进行的是判断、比较, 而不是算术运算D、算法设计与分析主要研究对象是非数值问题, 当然也包含某些数值问题2.算法的特征包括_________。
A.有穷性B、确定性C.输入和输出D.能行性或可行性3、以下描述是有关算法设计的基本步骤:①问题的陈述②算法分析③模型的拟制④算法的实现⑤算法的详细设计⑥文档的编制, 应与其它环节交织在一起其中正确的顺序是__________。
A.①②③④⑤⑥B.①③⑤②④⑥C.②④①③⑤⑥D.⑥①③⑤②④4.以下说法正确的是__________。
A.数学归纳法可以证明算法终止性B.良序原则是证明算法的正确性的有力工具C. x = 小于或等于x的最大整数(x的低限)D. x = 小于或等于x的最大整数(x的高限)5、汉诺塔(Hanoi)问题中令h(n)为从A移动n个金片到C上所用的次数, 则递归方程为__________, 其初始条件为__________, 将n个金片从A柱移到C柱上的移动次数是__________;设菲波那契(Fibonacci)数列中Fn为第n个月时兔子的对数, 则有递归方程为__________, 其中F1=F2=__________。
A.Fn=Fn-1+Fn-2 B、h(n)= 2h(n-1)+1C.1 D、h(1)= 1E、h(n)=2n-1F、06.在一个有向连通图中(如下图所示), 找出点A到点B的一条最短路为____ ______。
A.最短路: 1→3→5→8→10, 耗费: 20B、最短路:1→4→6→9→10, 耗费:16C.最短路: 1→4→6→9, 耗费: 12D.最短路: 4→6→9→10, 耗费: 13二、填空(每空2分, 共20分):1.快速排序法的基本思想是重新排列关键字, 把一个文件分成两个文件, 使得第一个文件中所有元素均小于第二个文件中的元素;然后再对两个子文件进行同样的处理。
一、选择题
1、二分搜索算法是利用(A)实现的算法。
A、分治策略
B、动态规划法
C、贪心法
D、回溯法
2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质
B、构造最优解
C、算出最优解
D、定义最优解
3、衡量一个算法好坏的标准是( D)。
A 运行速度快
B 占用空间少
C 时间复杂度低
D B和C
4.实现棋盘覆盖算法利用的算法是( A )。
A、分治法
B、动态规划法
C、贪心法
D、回溯法
5.下面是贪心算法的基本要素的是( C )。
A、重叠子问题
B、构造最优解
C、贪心选择性质
D、定义最优解
6. ( D)是贪心算法与动态规划算法的共同点。
A、重叠子问题
B、构造最优解
C、贪心选择性质
D、最优子结构性质
7. 矩阵连乘问题的算法可由( B )设计实现。
A、分支界限算法
B、动态规划算法
C、贪心算法
D、回溯算法
8、使用分治法求解不需要满足的条件是(A )。
A 子问题必须是一样的
B 子问题不能够重复
C 子问题的解可以合并
D 原问题和子问题使用相同的方法解
9.下列是动态规划算法基本要素的是( D )。
A、定义最优解
B、构造最优解
C、算出最优解
D、子问题重叠性质10.下列算法中通常以自底向下的方式求解最优解的是( B )。
A、分治法
B、动态规划法
C、贪心法
D、回溯法
11.贪心算法与动态规划算法的主要区别是( B )。
A、最优子结构
B、贪心选择性质
C、构造最优解
D、定义最优解
12. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
A、重叠子问题
B、最优子结构性质
C、贪心选择性质
D、定义最优解
二、填空题
1.算法的复杂性有时间复杂性和空间复杂性之分。
2、程序是算法用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
4.矩阵连乘问题的算法可由动态规划设计实现。
5、算法是指解决问题的 一种方法 或 一个过程 。
6、从分治法的一般设计模式可以看出,用它设计出的程序一般使用 递归 机制 。
7、计算一个算法时间复杂度通常可以计算 循环次数 、 基本操作的频率 或计算步。
8、动态规划算法的基本思想是将待求解问题分解成若干 子问题 ,先求解 子问题 ,然后从这些 子问题 的解得到原问题的解。
9.算法是由若干条指令组成的有穷序列,且要满足输入、 输出 、确定性和 有限性 四条性质。
10.任何可用计算机求解的问题所需的时间都与其 规模 有关。
11. 写出下列f(n)的渐进性态:
1) f(n)=C ,为常数:f(n)= O( 1 )。
2) f(n)= 3n+2:f(n)= O( n )。
3) f(n)= 6×2n +n :f(n)= O( 2n )。
4) f(n)= nlog n :f(n)= O( nlog n )。
12. 按照渐近阶从低到高的顺序排列以下表达式:4n 2,logn ,3n ,20n ,2,n 2/3。
又n!应该排在哪一位?
2,logn ,n 2/3,20n ,4n 2,3n ,n !。
三、时间复杂度分析(写出分析过程)
1.汉诺塔问题的时间复杂度。
解:
汉诺塔问题的时间复杂性是完成n个圆盘移动所移动的次数。
设移动总次数为T(n),由于原问题分
成了三个子问题:两个移动n-1个圆盘的问题和一个移动一个圆盘的过程。
两个移动n-1个圆盘的问题采用递归调用,花时间T(n-1),移动一个圆盘花一个单位时间。
所以的递归方程如下:
⎩⎨⎧>+-==1
1)1(211)(n n T n n T 直接推导可得
121.....
2)1(21
2)2(41
)1)2(2(2)(21-=+++=++-=++-=--n n n T n T n T n T
2. 冒泡排序算法的基本运算如下:
for i ←1 to n-1 do
for j ←1 to n-i do
if a[j]<a[j+1] then
交换a[j]、a[j+1];
分析该算法的时间复杂性。
解:排序算法的基本运算步为元素比较,冒泡排序算法的时间复杂性就是求比较次数与n 的关系。
1)设比较一次花时间1
2)内循环次数为:n-i 次,(i=1,…n ),花时间为:∑-=-=i
n j i n 1)(1
3)外循环次数为:n-1,花时间为:)1(2)()(1-=-=∑=n n i n n T n
i
3. 递归求取最大和最小元素算法 MAXMIN 的时间复杂性。
解:
设算法的元素比较次数为T(n),mid 将数组分成大小为⎣⎦⎣⎦2/2/n n 和的两部分,递归调用原过程分别在两部分找max1、min1和max2、min2,分别花时间为⎣⎦⎣⎦)2/()2/(n T n T 和,比较max1、max2和min1、min2找出max 、min 所花时间为2。
因此递归方程为:
⎣
⎦⎡⎤⎪⎩⎪⎨⎧++=2)2/()2/(10)(n T n T n T
当n 是2的幂时,即对于某个正整数k ,n=2k ,有⎣⎦⎣⎦2/2/n n 和
T(n)=2T(n/2)+2
=2(2T(n/4)+2)+2
=4T(n/4)+4+2
……
2T(2)2111∑-≤≤-+
=k i i
k =2k-1+2k -2
=3n/2-2
四、算法设计
1.有9件产品,其中一个不合格,不合格的产品比合格产品轻,现有一个天平,请设计算法用最少比较次数找到不合格产品。
答:本题使用分治法。
算法设计步骤如下:
(1)将9件产品分成3组,每组3件产品。
(2)用天平称量其中任意两组,有两种情况:
第一种情况是天平上其中一组重量轻,则重量轻的一组产品转步骤(3);
第二种情况是天平上的两组重量相等,则剩下的第三组转步骤(3)。
(3)将步骤(2)转来这组的3件产品,分开成3组,每组一件产品,用天平称量其中任意两件产品,有两种情况: 第一种:天平中有一件产品轻,则这件产品为不合格产品,算法结束。
第二种:天平中两件产品重量相等,则第三件产品为不合格产品,算法结束。
使用这样的分治法,可以在两次称量后得出结论,用的比较次数最少。
评分标准:设计出算法给5分,算法时间效率好给5分。
2.试用动态规划算法,解决5个矩阵连乘的问题。
(用具体实例说明算法设计过程,不要求写具体的算法实现)。