算法分析与设计习题集整理

合集下载

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

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

《计算机算法设计与分析》习题及答案一.选择题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 )。

A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解17.回溯法的效率不依赖于下列哪些因素( D )A.满足显约束的值的个数B. 计算约束函数的时间C.计算限界函数的时间D. 确定解空间的时间18.下面哪种函数是回溯法中为避免无效搜索采取的策略( B )A.递归函数 B.剪枝函数 C。

算法设计与分析习题答案

算法设计与分析习题答案

算法设计与分析习题答案算法设计与分析是计算机科学中一个重要的领域,它涉及到算法的创建、优化以及评估。

以下是一些典型的算法设计与分析习题及其答案。

习题1:二分查找算法问题描述:给定一个已排序的整数数组,编写一个函数来查找一个目标值是否存在于数组中。

答案:二分查找算法的基本思想是将数组分成两半,比较中间元素与目标值的大小,如果目标值等于中间元素,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找。

这个过程会不断重复,直到找到目标值或搜索范围为空。

```pythondef binary_search(arr, target):low, high = 0, len(arr) - 1while low <= high:mid = (low + high) // 2if arr[mid] == target:return Trueelif arr[mid] < target:low = mid + 1else:high = mid - 1return False```习题2:归并排序算法问题描述:给定一个无序数组,使用归并排序算法对其进行排序。

答案:归并排序是一种分治算法,它将数组分成两半,分别对这两半进行排序,然后将排序好的两半合并成一个有序数组。

```pythondef merge_sort(arr):if len(arr) > 1:mid = len(arr) // 2left_half = arr[:mid]right_half = arr[mid:]merge_sort(left_half)merge_sort(right_half)i = j = k = 0while i < len(left_half) and j < len(right_half): if left_half[i] < right_half[j]:arr[k] = left_half[i]i += 1else:arr[k] = right_half[j]j += 1k += 1while i < len(left_half):arr[k] = left_half[i]i += 1k += 1while j < len(right_half):arr[k] = right_half[j]j += 1k += 1arr = [38, 27, 43, 3, 9, 82, 10]merge_sort(arr)print("Sorted array is:", arr)```习题3:动态规划求解最长公共子序列问题问题描述:给定两个序列,找到它们的最长公共子序列。

算法分析与设计习题集答案

算法分析与设计习题集答案

算法分析与设计习题集基础篇1、算法有哪些特点?它有哪些特征?它和程序的主要区别是什么?特点:就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算〔书上定义〕特征:输入、输出、有穷性、明确性、有效性区别:算法是完成特定任务的有限指令集。

程序是用电脑语言编写的写成特定任务的指令序列。

2、算法的时间复杂度指的是什么?如何表示?算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。

这是一个关于代表算法输入值的字符串的长度的函数。

时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。

〔百度百科〕3、算法的空间复杂度指的是什么?如何表示?一个程序的空间复杂度是指运行完一个程序所需内存的大小。

利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。

一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。

程序执行时所需存储空间包括以下两部分。

〔1〕固定部分。

这部分空间的大小与输入/输出的数据的个数多少、数值无关。

主要包括指令空间〔即代码空间〕、数据空间〔常量、简单变量〕等所占的空间。

这部分属于静态空间。

〔2〕可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。

这部分的空间大小与算法有关。

一个算法所需的存储空间用f(n)表示。

S(n)=O(f(n))其中n为问题的规模,S(n)表示空间复杂度。

答:最坏情况时间复杂性:最好情况时间复杂性::I*是DN中使T(N, I*)到达Tmax(N)的合法输入;P(I)是在算法的应用中出现输入I的概率10、限界函数的功能是什么?答:用限界函数剪去得不到最优解的子树11、设某一函数定义如下:编写一个递归函数计算给定x的M〔x〕的值。

本函数是一个递归函数,其递归出口是:M〔x〕= x-10x>100递归体是:M〔M〔x+11〕〕x ≤100实现此题功能的递归函数如下:intm ( intx ){ int y;if ( x>100 )return(x-10 );else {y =m(x+11) ;return (m (y ));}procedure M(x)if x>100 thenreturn(x-10)elsereturn M(M(x+11))endifend M12、已知一个顺序表中的元素按元素值非递减有序排列,编写一个函数删除表中多余的值相同的元素。

算法分析与设计考试复习题及参考答案

算法分析与设计考试复习题及参考答案
一、简要回答下列问题 : 1. 算法重要特性是什么? 2. 算法分析的目的是什么? 3. 算法的时间复杂性与问题的什么因素相关? 4. 算法的渐进时间复杂性的含义? 5. 最坏情况下的时间复杂性和平均时间复杂性有什么不同? 6. 简述二分检索(折半查找)算法的基本过程。 7. 背包问题的目标函数和贪心算法最优化量度相同吗? 8. 采用回溯法求解的问题,其解如何表示?有什么规定? 9. 回溯法的搜索特点是什么? 10. n皇后问题回溯算法的判别函数place的基本流程是什么? 11. 为什么用分治法设计的算法一般有递归调用? 12. 为什么要分析最坏情况下的算法时间复杂性? 13. 简述渐进时间复杂性上界的定义。 14. 二分检索算法最多的比较次数? 15. 快速排序算法最坏情况下需要多少次比较运算? 16. 贪心算法的基本思想? 17. 回溯法的解(x1,x2,……xn)的隐约束一般指什么? 18. 阐述归并排序的分治思路。 19. 快速排序的基本思想是什么。 20. 什么是直接递归和间接递归?消除递归一般要用到什么数据结 构? 21. 什么是哈密顿环问题? 22. 用回溯法求解哈密顿环,如何定义判定函数? 23. 请写出prim算法的基本思想。 二、复杂性分析 1、 MERGESORT(low,high) if low<high; then mid←(low,high)/2; MERGESORT(low,mid); MERGESORT(mid+1,high); MERGE(low,mid,high); endif end MERGESORT 2、 procedure S1(P,W,M,X,n) i←1; a←0
15..最坏情况下快速排序退化成冒泡排序,需要比较n2次。 16. 是一种依据最优化量度依次选择输入的分级处理方法。基本思 路是:首先根据题意,选取一种量度标准;然后按这种量度标准对这n 个输入排序,依次选择输入量加入部分解中。如果当前这个输入量的加 入,不满足约束条件,则不把此输入加到这部分解中。 17.回溯法的解(x1,x2,……xn)的隐约束一般指个元素之间应满 足的某种关系。 18. 将数组一分为二,分别对每个集合单独排序,然后将已排序的 两个序列归并成一个含n个元素的分好类的序列。如果分割后子问题还 很大,则继续分治,直到一个元素。 19.快速排序的基本思想是在待排序的N个记录中任意取一个记录, 把该记录放在最终位置后,数据序列被此记录分成两部分。所有关键字 比该记录关键字小的放在前一部分,所有比它大的放置在后一部分,并 把该记录排在这两部分的中间,这个过程称作一次快速排序。之后重复 上述过程,直到每一部分内只有一个记录为止。 20.在定义一个过程或者函数的时候又出现了调用本过程或者函数 的成分,既调用它自己本身,这称为直接递归。如果过程或者函数P调 用过程或者函数Q,Q又调用P,这个称为间接递归。消除递归一般要用 到栈这种数据结构。 21.哈密顿环是指一条沿着图G的N条边环行的路径,它的访问每个 节点一次并且返回它的开始位置。 22.当前选择的节点X[k]是从未到过的节点,即X[k]≠X[i](i=1,2, …,k-1),且C(X[k-1], X[k])≠∞,如果k=-1,则C(X[k], X[1]) ≠∞。 23. 思路是:最初生成树T为空,依次向内加入与树有最小邻接边 的n-1条边。处理过程:首先加入最小代价的一条边到T,根据各节点到 T的邻接边排序,选择最小边加入,新边加入后,修改由于新边所改变 的邻接边排序,再选择下一条边加入,直至加入n-1条边。 二、复杂性分析 1、 递归方程

算法设计与分析-习题参考答案

算法设计与分析-习题参考答案

算法设计与分析基础习题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. 这个断言是正确的。

算法分析考试题

算法分析考试题

1. )(n T 给定数组a[0:n-1],试设计一个算法,在最坏情况下用n+[logn]-2次比较找出a[0:n-1] 中的元素的最大值和次大值. (算法分析与设计习题 2.16 ) (分治法)a 、 算法思想用分治法求最大值和次大值首先将问题划分,即将划分成长度相等的两个序列,递归求出左边的最大值次大值,再求出右边的的最大值次大值,比较左右两边,最后得出问题的解。

b 、复杂度分析:把问题划分为左右两种的情况,需要分别递归求解,时间复杂度可如下计算:有递推公式为:T(n)=1 n=1T(n)= 2T(n/2)+1 n>1所以,分治算法的时间复杂度是n+[logn]-2,当n 为奇数时,logn 取上线,当n 为偶数时,logn 取下线。

//不知道为什么会-2!C 、代码实现:#include <stdio.h>int a[100]; void maxcmax(int i,int j,int &max,int &cmax){int lmax,lcmax,rmax,rcmax;int mid;if (i==j){ max=a[i];cmax=a[i];}else if (i==j-1)if (a[i]<a[j]){max=a[j];cmax=a[i];}else{max=a[i];cmax=a[j];}else{mid=(i+j)/2;maxcmax(i,mid,lmax,lcmax);maxcmax(mid+1,j,rmax,rcmax);if(lmax>rmax)if(lcmax>rmax){max=lmax;。

cmax=lcmax;}else{max=lmax;cmax=rmax;}elseif(rcmax>lmax){if(rmax==rcmax){max=rmax;cmax=lmax;}else{max=rmax;cmax=rcmax;}}。

算法设计与分析习题集

算法设计与分析习题集

一、假设有7个物品,它们的重量和价值如下表所示。

若这些物品均不能被分割,且背包容量M=150,使用回溯方法求解此背包问题。

请写出状态空间搜索树(20分)。

答:按照单位效益从大到小依次排列这7个物品为:FBGDECA 。

将它们的序号分别记为1~7。

则可生产如下的状态空间搜索树。

其中各个节点处的限界函数值通过如下方式求得:【排序1分】5x =6x =7x =17分,每个节点1分】a .1501154040305035190.62540-++++⨯= 7(1,1,1,1,,0,0)8b. 1501154040305030177.560-++++⨯=7(1,1,1,1,0,,0)12c .4040305010170++++=(1,1,1,1,0,0,1)d. 1501054040303530167.560-++++⨯= 3(1,1,1,0,1,,0)4e. 150130404050353017560-++++⨯=1(1,1,0,1,1,,0)3f. 1501304040503510170.7135-++++⨯=4(1,1,0,1,1,0,)7g. 40405030160+++=(1,1,0,1,0,1,0)h. 1501404040353010146.8535-++++⨯= 2(1,1,0,0,1,1,)7i.1501254030503530167.560-++++⨯=5(1,0,1,1,1,,0)12 j. 1501454030503530157.560-++++⨯=1(0,1,1,1,1,,0)12在Q 1处获得该问题的最优解为(1,1,1,1,0,0,1),背包效益为170。

即在背包中装入物品F 、B 、G 、D 、A 时达到最大效益,为170,重量为150。

【结论2分】一、已知1()*()i i k k ij r r A a +=,k =1,2,3,4,5,6,r 1=5,r 2=10,r 3=3,r 4=12,r 5=5,r 6=50,r 7=6,求矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序。

算法设计与分析习题与实验题(12.18)

算法设计与分析习题与实验题(12.18)

《算法设计与分析》习题第一章引论习题1-1 写一个通用方法用于判定给定数组是否已排好序。

解答:Algorithm compare(a,n)BeginJ=1;While (j<n and a[j]<=a[j+1]) do j=j+1;If j=n then return trueElseWhile (j<n and a[j]>=a[j+1]) do j=j+1;If j=n then return true else return false end ifEnd ifend习题1-2 写一个算法交换两个变量的值不使用第三个变量。

解答:x=x+y; y=x-y; x=x-y;习题1-3 已知m,n为自然数,其上限为k(由键盘输入,1<=k<=109),找出满足条件(n2-mn-m2)2=1 且使n2+m2达到最大的m、n。

解答:m:=k; flag:=0;repeatn:=m;repeatl:=n*n-m*n-m*n;if (l*l=1) then flag:=1 else n:=n-1;until (flag=1) or (n=0)if n=0 then m:=m-1until (flag=1) or (m=0);第二章基础知识习题2-1 求下列函数的渐进表达式:3n 2+10n ; n 2/10+2n ; 21+1/n ; log n 3; 10 log3n 。

解答: 3n 2+10n=O (n 2), n 2/10+2n =O (2n ), 21+1/n=O (1), log n 3=O (log n ),10 log3n =O (n )。

习题2-2 说明O (1)和 O (2)的区别。

习题2-3 照渐进阶从低到高的顺序排列以下表达式:!n ,3/22,2,20,3,log ,4n n n n n 。

解答:照渐进阶从低到高的顺序为:!n 、 3n、 24n 、23n 、20n 、log n 、2习题2-4(1) 假设某算法在输入规模为n 时的计算时间为n n T 23)(⨯=。

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

算法分析与设计习题集整理第一章算法引论一、填空题:1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。

2、多项式10()m m A n a n a n a =+++L 的上界为O(n m)。

3、算法的基本特征:输入、输出、确定性、有限性 、可行性 。

4、如何从两个方面评价一个算法的优劣:时间复杂度、空间复杂度。

5、计算下面算法的时间复杂度记为: O(n 3) 。

for(i=1;i<=n;i++)for(j=1;j<=n;j++){c[i][j]=0;for(k=1;k<=n;k++)c[i][j]= c[i][j]+a[i][k]*b[k][j];}6、描述算法常用的方法:自然语言、伪代码、程序设计语言、流程图、盒图、PAD 图。

7、算法设计的基本要求:正确性 和 可读性。

8、计算下面算法的时间复杂度记为: O(n 2) 。

for (i =1;i<n; i++){ y=y+1;for (j =0;j <=2n ;j++ )x ++;}9、计算机求解问题的步骤:问题分析、数学模型建立、算法设计与选择、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。

10、算法是指解决问题的 方法或过程 。

二、简答题:1、按照时间复杂度从低到高排列:O( 4n 2)、O( logn)、O( 3n )、O( 20n)、O( 2)、O( n 2/3),O( n!)应该排在哪一位?答:O( 2),O( logn),O( n 2/3),O( 20n),O( 4n 2),O( 3n ),O( n!)2、什么是算法?算法的特征有哪些?答:1)算法:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。

通俗讲,算法:就是解决问题的方法或过程。

2)特征:1)算法有零个或多个输入;2)算法有一个或多个输出; 3)确定性 ; 4)有穷性3、给出算法的定义?何谓算法的复杂性?计算下例在最坏情况下的时间复杂性?for(j=1;j<=n;j++) (1)for(i=1;i<=n;i++) (2) {c[i][j]=0; (3)for(k=1;k<=n;k++) (4)c[i][j]= c[i][j]+a[i][k]*b[k][j]; } (5)答:1)定义:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。

2)算法的复杂性:指的是算法在运行过程中所需要的资源(时间、空间)多少。

所需资源越多,表明算法的复杂性越高3)该算法的主要元操作是语句5,其执行次数是n 3次。

故该算法的时间复杂度记为O(n 3).4、算法A 和算法B 解同一问题,设算法A 的时间复杂性满足递归方程⎩⎨⎧>+===1n , n )2/n (T 4)n (T 1n , 1)n (T , 算法B 的时间复杂性满足递归方程⎩⎨⎧>+===1n , n )4/n (aT )n (T 1n , 1)n (T ,若要使得算法A 时间复杂性的阶高于算法B 时间复杂性的阶,a 的最大整数值可取多少?答:分别记算法A 和算法B 的时间复杂性为)n (T A 和)n (T B ,解相应的递归方程得:)n (O )n (T 2A = ⎪⎩⎪⎨⎧>=<=4a , )n(O 4a , )n log n (O 4a , )n (O )n (T a log B 4依题意,要求最大的整数a 使得)n (T B 〈)n (T A 。

显然,当a<=4时,)n (T B 〈)n (T A ;当a>4时,)n (T B 〈(n)T A ⇔2a log 4< ⇔a<24=16。

所以,所求的a 的最大整数值为15。

5、算法分析的目的?答:1)为了对算法的某些特定输入,估算该算法所需的内存空间和运行时间;2)是为了建立衡量算法优劣的标准,用以比较同一类问题的不同算法。

6、算法设计常用的技术?(写5种)答: ①分治法; ②回溯法; ③贪心法; ④动态规划法⑤分治限界法 ; ⑥蛮力法; ⑦倒推法三、算法设计题1、蛮力法:百鸡百钱问题?2、倒推法:穿越沙漠问题?第二章分治算法(1)----递归循环一、填空题:1、直接或间接地调用自身的算法称为递归算法,用函数自身给出定义的函数称为递归函数。

2、递归方程和约束函数(递归终止条件)是递归函数的两个要素。

二、判断题:1、所有的递归函数都能找到对应的非递归定义。

(√)2、定义递归函数时可以没有初始值。

( X )三、简答题:1、什么是递归算法?递归算法的特点?答:1 )递归算法:是一个模块(函数、过程)除了可调用其它模块(函数、过程)外,还可以直接或间接地调用自身的算法。

2) 递归算法特点:①每个递归函数都必须有非递归定义的初值;否则,递归函数无法计算;(递归终止条件)②递归中用较小自变量函数值来表达较大自变量函数值;(递归方程式)2、比较循环与递归的异同?答:1)相同:递归与循环都是解决“重复操作”的机制。

2)不同:就效率而言,递归算法的实现往往要比迭代算法耗费更多的时间(调用和返回均需要额外的时间)与存贮空间(用来保存不同次调用情况下变量的当前值的栈栈空间),也限制了递归的深度。

每个迭代算法原则上总可以转换成与它等价的递归算法;反之不然。

递归的层次是可以控制的,而循环嵌套的层次只能是固定的,因此递归是比循环更灵活的重复操作的机制。

3、递归算法解题通常有三个步骤?答: 1)分析问题、寻找递归:找出大规模问题与小规模问题的关系,这样通过递归使问题的规模逐渐变小。

2)设置边界、控制递归:找出停止条件,即算法可解的最小规模问题。

3)设计函数、确定参数:和其它算法模块一样设计函数体中的操作及相关参数。

四、算法设计题:1、楼梯上有n个台阶,上楼时可以上1步,也可以上2步,设计一递归算法求出共有多少种上楼方法F(n)。

①写出F(n)的递归表达式?②并写出其相应的递归算法?解:①写出F(n)的递归表达式分析:到n阶有两种走法:1)n-1阶到n阶;2)n-2阶到n阶;1 n=1F(n) = 2 n=2F(n-1) + F(n-2) n>2②写出其相应的递归算法?Int F(int n){if(n=1) return 1;else if(n=2)return 2;elsereturn F(n-1)+ F(n-2);}2、设a,b,c是3个塔座。

开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。

各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。

在移动圆盘时应遵守以下移动规则:规则1:每次只能移动1个圆盘;规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上;规则3:在满足移动规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。

①写出该问题的解题步骤?②并写出其相应的递归算法?解:①第一步:将n-1个盘子看成一个整体,从A移到C;第二步:将第n个盘子移到B;第三步:将n-1个盘子看成一个整体,从C移到B;②写出其相应的递归算法:void hanoi(int n, int a, int b, int c){if (n > 0){hanoi(n-1, a, c, b);move(a,b);hanoi(n-1, c, b, a);} }第二章分治算法(2)分治算法一、填空题:1、在快速排序、插入排序和合并排序算法中,插入排序算法不是分治算法。

2、合并排序算法使用的是分治算法设计的思想。

3、二分搜索算法是利用分治算法思想设计的。

二、简答题:1、适合用分治算法求解的问题具有的基本特征?答:1)该问题的规模缩小到一定的程度就可以容易解决;2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;3)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

4)利用该问题分解出子问题解可以合并为该问题解;2、分治算法基本思想,解题步骤?三、算法设计题:1、改写二分查找算法:设a[1…n]是一个已经排好序的数组,改写二分查找算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i,和大于x的最小元素位置j;当搜索元素x在数组中时,i和j相同,均为x在数组中的位置。

并分析其时间复杂度?解:int binsearch( int a[n], int x ,)3)回溯时将分解的两组解大者取大,小者取小,合并为当前问题的解。

②、③第三章动态规划算法一、填空题:1、动态规划算法中存储子问题的解是为了避免重复求解子问题。

2、(最优子结构)是问题能用动态规划算法求解的前提。

3、矩阵连乘问题的算法可由(动态规划)算法设计实现。

二、判断题:1、动态规划算法基本要素的是最优子结构。

(√)2、最优子结构性质是指原问题的最优解包含其子问题的最优解。

(√)3、动态规划算法求解问题时,分解出来的子问题相互独立。

( X)三、简答题:1、动态规划算法解题步骤?答:①找出最优解的性质,并刻划其结构特征;(即原问题的最优解,包含了子问题的最优解)②递归地定义最优值;(即子问题具有重叠性,由子问题定义原问题)③以自底向上的方式计算出最优值;④根据计算最优值时得到的信息,构造最优解;2、动态规划算法基本思想?答:动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题;但是经分解得到的子问题往往不是互相独立的。

不同子问题的数目常常只有多项式量级。

在用分治法求解时,有些子问题被重复计算了许多次;如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。

3、动态规划与分治算法异同点?4、动态规划算法的基本要素?四、算法设计与计算题:1、{}12,,,m X x x x =L 和{}12,,,n Y y y y =L 的最长公共子序列为{}12,,,k Z z z z =L 。

问:若用[][]c i j 记录序列{}12,,,i i X x x x =L 和{}12,,,j j Y y y y =L 公共子序列长度。

求:①用动态规划法求解时,计算最优值的递归公式?②设计计算最优值的算法?以及构造最优解的算法?2、长江游艇俱乐部在长江上设置了n 个游艇出租站1,2…n.游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。

游艇出租站i 到游艇出租站j 之间的租金为r(i ,j),其中1<=i<j<=n ;求:①用动态规划法求解时,计算最优值(最少租金)的递归公式?②设计计算最优值(最少租金)的算法?③并分析其时间复杂度?解:①②计算最优值算法public static void matrixChain(int [] p, int [][] m, int [][] s){int n=;for (int i = 1; i <= n; i++) m[i][i] = 0;要求:给出Dijkstra 算法的迭代过程,计算源到给个顶点的最短路径?(用表表示)解:见课本123页 表4-2解:迭代过程:第5章 回溯算法一、填空题1、回溯法与分支限界法搜索方式不同,回溯法按 深度优先 搜索解空间,分支限界法按 广度优先或最小耗费优先 搜索解空间。

相关文档
最新文档