华中师范大学网络教育学院《算法设计与分析》练习题库及答案

合集下载

《算法设计与分析》考试题目及答案(DOC)

《算法设计与分析》考试题目及答案(DOC)

《算法设计与分析》考试题目及答案(DOC)D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。

A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。

A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。

A.B.C.D. void backtrack (int t){if (t>n) output(x);elsefor (int i=t;i<=n;i++) {swap(x[t], x[i]);if (legal(t)) backtrack(t+1); swap(x[t], x[i]);}}void backtrack (int t){if (t>n) output(x);elsefor (int i=0;i<=1;i++) {x[t]=i;if (legal(t)) backtrack(t+1); }}10. 回溯法的效率不依赖于以下哪一个因素?(C )A.产生x[k]的时间;B.满足显约束的x[k]值的个数;C.问题的解空间的形式;D.计算上界函数bound的时间;E.满足约束函数和上界函数约束的所有x[k]的个数。

F.计算约束函数constraint的时间;11. 常见的两种分支限界法为(D)A. 广度优先分支限界法与深度优先分支限界法;B. 队列式(FIFO)分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式(FIFO)分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性S(n)是指(B)A.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数。

B.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的方格数的总和。

C.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的平均方格数。

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

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

算法设计与分析基础习题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.算法设计与分析习题及答案

1.算法设计与分析习题及答案

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

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

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

A、分支界限法B、动态规划法C、贪心法D、回溯法4、在下列算法中有时找不到问题解的是( B )。

A、蒙特卡罗算法B、拉斯维加斯算法C、舍伍德算法D、数值概率算法5. 回溯法解旅行售货员问题时的解空间树是( A )。

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、回溯法10、下列随机算法中运行时有时候成功有时候失败的是( C )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(nlogn)C、O(2n)D、O(n)15.分支限界法解最大团问题时,活结点表的组织形式是(B )。

华师16秋《算法设计与分析》在线作业

华师16秋《算法设计与分析》在线作业

一、单选题(共 20 道试题,共 60 分。

)V 1. 下列算法中通常以深度优先方式系统搜索问题解的是()。

. 备忘录法. 动态规划法. 贪心法. 回溯法标准答案:2. 循环队列的队头和队尾指针分别为front和rr,则判断循环队列为空的条件是()。

. front==rr. front==0. rr==0. front=rr+1标准答案:3. 队列的插入操作是在()。

. 队尾. 队头. 队列任意位置. 队头元素后标准答案:4. 分支限界法解旅行售货员问题时,活结点表的组织形式是()。

. 最小堆. 最大堆. 栈. 数组标准答案:5. 最大效益优先是()的一搜索方式。

. 分支界限法. 动态规划法. 贪心法. 回溯法标准答案:6. 具有线性结构的数据结构是()。

. 图. 树. 广义表. 栈标准答案:7. 下列哪些是采用广度优先策略搜索?()。

. 分支界限法. 动态规划法. 贪心法. 回溯法标准答案:8. 下列随机算法中运行时有时候成功有时候失败的是(). 数值概率算法. 舍伍德算法. 拉斯维加斯算法. 蒙特卡罗算法标准答案:9. 哈弗曼编码的贪心算法所需的计算时间为()。

. O(n2^2). O(nlogn). O(2^n). O(n)标准答案:10. 蒙特卡罗算法是()的一种。

. 分支界限算法. 概率算法. 贪心算法. 回溯算法标准答案:11. 实现循环赛日程表利用的算法是()。

. 分治策略. 动态规划法. 贪心法. 回溯法标准答案:12. 实现棋盘覆盖算法利用的算法是()。

. 分治法. 动态规划法. 贪心法. 回溯法标准答案:13. 最长公共子序列算法利用的算法是()。

. 分支界限法. 动态规划法. 贪心法. 回溯法标准答案:14. 设计一个判别表达式中括号是否配对的算法,采用()数据结构最佳。

. 顺序表. 链表. 队列. 栈标准答案:15. 判断一个循环队列Q(最多n个元素)为满的条件是()。

. Q->rr==Q->front. Q->rr==Q->front+1. Q->front==(Q->rr+1)%n. Q->front==(Q->rr-1)%n标准答案:16. 二分搜索算法是利用()实现的算法。

算法设计与分析试题及答案

算法设计与分析试题及答案

1. 按分治策略求解棋盘覆盖问题时,对于如图所示的24×24的特殊棋盘,共需要多少个L 型骨牌;并在棋盘上填写L 型骨牌的覆盖情况。

2. 假设有7个物品,给出重量和价值。

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

请画出状态空间搜索树。

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

若这些物品均可以被分割,且背包容量M=140,使用贪心算法求解此背包问题。

请写出求解策略和求解过程。

W (35,30,50,60,40,10,25)p (10,40,30,50,35,40,30)4. 在给出的电路板中,阴影部分是已作了封锁标记的方格,请按照队列式分支限界法在图中确定a 到b 的最短布线方案,要求布线时只能沿直线或直角进行,在图中标出求得最优解时各方格情况。

5. 画出字符表的哈夫曼编码对应的二叉树。

6. 已知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=8,r 5=5,r 6=20,r 7=6,求矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序。

7. 给出城市网络图,售货员要从城市1出发,经过所有城市回到城市1,画出该问题的解空间树,描述出用优先队列式分支限界法求解时的搜索情况。

表示出优先队列、当前扩展结点等的变化情况。

8. 依据优先队列式分支限界法,求从s 点到t 点的单源最短路径,画出求得最优解的解空间树。

一、假设有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。

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

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

算法设计与分析基础习题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.数据元素的集合。

2.队列是一个线性表,限制为只能在固定的一端进行插入,在固定的另一端进行删除。

3.对于算法a,如果存在一多项式p(),使得对a的每个大小为n的输入,a的计算时间为o(p(n)),则称a具有多项式复杂度4.二叉树的层数i与该层上的结点数n的关系为:n(i)=i2。

5.如果可满足性约化为一个问题L,则称该问题为NP-难度的。

6.算法就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。

7.多数据单指令流8.若图的任意两个节点间均存在路径可达,则称该图为连通图。

9. 是指一个数学模型以及定义在该模型上的一组操作。

10.算法的复杂度只能用指数函数对其限界。

11.函数或过程直接或间接调用它自己。

12.和高度相同的满二叉树的每个对应的顶点编号相同的树13.由所有可行状态所构成的树。

14.如果L时NP难度的且L∈NP,则称问题L是NP-完全的。

15.算法是一个步骤的序列,满足:有穷性、可行性、确定性、输入、输出;过程不需要满足由穷性。

16.有向图的每条边有起点与终点之分,且用箭头指向边的终点。

无向图的边无起点和终点之分,边无箭头。

17.树(tree)是一个或多个结点的有限集合,,它使得:①有一个特别指定的称作根(root)的结点;②剩下的结点被分成m≥0个不相交的集合tl,…,tm,这些集合的每一个都是一棵树,并称t1,…,tm为这根的子树(subtree)。

18.P是所有可在多项式时间内用确定算法求解的判定问题的集合。

19.运算结果是唯一确定的算法20. nP是所有可在多项式时间内用不确定算法求解的判定问题的集合二、填空题1.n2.O ( n )3.最优化问题4.宽度优先搜索5.结点的最大级数6.互异7.内结点和外结点8.方形9.内部路径长度、外部路径长度10.一次11.归并分类算法12.贪心选择性质13.最优子结构14.二元归并15.最小成本生成树16.最优性17.最优决策18.可容许最大成本c19.最小成本三、程序填空题。

华中师范大学网络教育学院《算法设计与分析》练习题库及答案

华中师范大学网络教育学院《算法设计与分析》练习题库及答案

华中师范大学网络教育学院《算法设计与分析》练习题库及答案《算法设计与分析》练习题库及答案(加粗红色字体为2013下新增题目) 一、概念题:请解释下列术语。

1.数据类型2.队列3.多项式复杂度4.满二叉树5. NP-难度6.算法7. SIMD(并行算法)8.连通图9.抽象数据类型10.指数复杂度11.递归12.完全二叉树13.状态空间树14. NP-完全的15.算法与过程16.有向图与无向图17.树18. P类问题19. 确定的算法20. NP问题21. 最小生成树22. 动态规划23. 数据结构24. 排序二、填空题1. 简单递选分类过程中所需进行移动存储的操作次数较少,其最大值为___________。

2. 一组有序的n个数,采用逐个查找算法查找一给定的数是否出现在序列中,其算法复杂性为_____________。

3. 动态规划实际上是研究一类__________________的算法,其应用非常广泛。

4. BFS算法的中文名称是______________________算法。

5. 一棵树中定义为该树的高度或深度。

6. 二分检索树要求树中所有结点中的元素满足。

7. 比较树的结点由称为和的两种结点组成。

8. 外结点用一个结点表示,在二分检索算法中它表示不成功检索的一种情况。

9. 由根到所有内部结点的距离之和称为 ;由根到所有外部结点的距离之和称为 .10.max和min被看成是两个内部函数,它们分别求取两个元素的大者和小者,并认为每次调用其中的一个函数都只需作次元素比较。

11.如果用分治策略来设计分类算法,则可使最坏情况时间变为o(n logn)。

这样的算法称为。

12.贪心算法可行的第一个基本要素是。

13. 当一个问题的最优解包含着它的子问题的最优解时,称此问题具有性质。

14. 二路归并模式可以用树来表示。

15. kruskal算法对于每一个无向连通图g产生一棵。

16.因为如果有环,则可去掉这个环且不增加这条路径的长度(不含有负长度的环)。

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

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

一、填空题(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),并画出其解空间树,计算其最优值及最优解。

(完整版)算法设计与分析考试题及答案,推荐文档

(完整版)算法设计与分析考试题及答案,推荐文档
法好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是
____________________________________。 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

算法设计与分析复习题目及答案.docx

算法设计与分析复习题目及答案.docx

算法设计与分析复习题目及答案.docx一。

选择题1、二分搜索算法是利用(A)实现的算法。

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

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

A、分支界限法B、动态规划法C、贪心法D、回溯法4、在下列算法中有时找不到问题解的是(B)。

A、蒙特卡罗算法B、拉斯维加斯算法C、舍伍德算法D、数值概率算法5. 回溯法解旅行售货员问题时的解空间树是(B)。

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、回溯法10、下列随机算法中运行时有时候成功有时候失败的是( C )A 数值概率算法B 舍伍德算法C 拉斯维加斯算法D 蒙特卡罗算法11.下面不是分支界限法搜索方式的是(DA、广度优先B、最小耗费优先C、最大效益优先12.下列算法常以深度优先方式系统搜索问题解的是(A、备忘录法B、动态规划法C、贪心法13.备忘录方法是那种算法的变形。

( B )A、分治法B、动态规划法C、贪心法14.哈弗曼编码的贪心算法所需的计算时间为(BnB、 O(nlogn )n )A、O( n2 )C、O(215.分支限界法解最大团问题时,活结点表的组织形式是(A、最小堆B、最大堆C、栈组)。

D、深度优先D)。

D、回溯法D、回溯法)。

D、 O( n)B)。

D 、数16.最长公共子序列算法利用的算法是(B)。

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

算法分析与设计试题及答案

算法分析与设计试题及答案

算法分析与设计试题及答案一、选择题1. 下列哪个是属于分治算法的例子?A. 冒泡排序B. 归并排序C. 顺序查找D. 选择排序答案:B2. 在排序算法中,时间复杂度最优的是:A. 冒泡排序B. 插入排序C. 归并排序D. 快速排序答案:C3. 哪个不是动态规划的特点?A. 具有重叠子问题B. 通过递归求解C. 需要保存子问题的解D. 具有最优子结构答案:B4. 在图的广度优先搜索算法中,使用的数据结构是:A. 栈B. 队列C. 数组D. 堆栈答案:B5. 在最小生成树算法中,下列哪个不属于贪心策略?A. Kruskal算法B. Prim算法C. Dijkstra算法D. Prim-Kruskal混合算法答案:C二、简答题1. 请简述分治算法的思想和应用场景。

答案:分治算法的思想是将原问题分解成若干个规模较小且类似的子问题,然后解决子问题,最后将子问题的解合并得到原问题的解。

其应用场景包括排序算法(如归并排序、快速排序)、搜索算法(如二分查找)等。

2. 什么是动态规划算法?请给出一个动态规划算法的示例。

答案:动态规划算法是一种通过将问题分解成子问题并解决子问题来解决复杂问题的方法。

它的特点是具有重叠子问题和最优子结构性质。

以斐波那契数列为例,可以使用动态规划算法求解每一项的值,而不需要重复计算。

3. 图的深度优先搜索和广度优先搜索有什么区别?答案:图的深度优先搜索(Depth First Search,DFS)是一种先访问子节点再访问兄弟节点的遍历算法,通常使用递归或者栈实现。

而广度优先搜索(Breadth First Search,BFS)则是以层次遍历的方式展开搜索,使用队列来实现。

DFS更适合用于搜索路径,BFS则适用于寻找最短路径等。

4. 请简述贪心算法的特点及其应用场景。

答案:贪心算法的特点是每一步都采取当前状态下最优的选择,以期望得到全局最优解。

然而,贪心算法并不一定能求解所有问题的最优解,但对于一些特定问题,贪心算法往往能得到近似最优解。

算法设计与分析考试题及答案-算法设计与优化答案

算法设计与分析考试题及答案-算法设计与优化答案

1.一个算法就是一个有穷规矩的聚集,个中之规矩划定懂得决某一特别类型问题的一系列运算,此外,算法还应具有以下五个重要特点:_________,________,________,____ ______,__________.,权衡一个算法利害的尺度是______________________.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),并画出其解空间树,盘算其最优值及最优解.5.设S={X1,X2,···,X n}是严厉递增的有序集,应用二叉树的结点来存储S中的元素,在暗示S的二叉搜刮树中搜刮一个元素X,返回的成果有两种情况,(1)在二叉搜刮树的内结点中找到X=X i,其概率为b i.(2)在二叉搜刮树的叶结点中肯定X∈(X i,X i+1),其概率为a i.在暗示S的二叉搜刮树T中,设存储元素X i的结点深度为C i;叶结点(X i,X i+1)的结点深度为d i,则二叉搜刮树T的平均路长p为若干?假设二叉搜刮树T[i][j]={X i,X i+1,···,X j}最优值为m[i][j],W[i][j]=a i-1+b i+···+b j+a j,则m[i][j](1<=i<=j<=n)递归关系表达式为什么?6.描写0-1背包问题.三.简答题(30分)1.流水功课调剂中,已知有n个功课,机械M1和M2上加工功课i 所需的时光分离为a i和b i,请写出流水功课调剂问题的johnson轨则中对a i和b i的排序算法.(函数名可写为sort(s,n))2.最优二叉搜刮树问题的动态计划算法(设函数名binarysearchtree))答案:一.填空1.肯定性有穷性可行性0个或多个输入一个或多个输出2.时光庞杂性空间庞杂性时光庞杂度高下具有最优子构造性质4.{BABCD}或{CABCD}或{CADCD}5.一个(最优)解6.子问题子问题子问题7.回溯法8. o(n*2n) o(min{nc,2n})9.最优子构造重叠子问题10.动态计划法二.分解题1.①问题具有最优子构造性质;②构造最优值的递归关系表达式;③最优值的算法描写;④构造最优解;2.①令N1={i|a i<b i},N2={i|a i>=b i};②将N1中功课按a i的非减序排序得到N1’,将N2中功课按b i的非增序排序得到N2’;③N1’中功课接N2’中功课就构成了知足Johnson轨则的最优调剂.3.步调为:N1={1,3},N2={2,4};N 1’={1,3},N 2’={4,2}; 最优值为:384.解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}. 解空间树为:该问题的最优值为:16 最优解为:(1,1,0) 5.二叉树T 的平均路长P=∑=+n i 1Ci)(1*bi +∑=nj 0dj *aj{m[i][j]=0(i>j)6.已知一个背包的容量为C,有n 件物品,物品i 的重量为W i ,价值为V i ,求应若何选择装入背包中的物品,使得装入背包中物品的总价值最大. 三.简答题m[i][j]=W[i][j]+min{m[i][k]+m[k+1][j]} (1<=i<=j<=n,m[i][i-1]=0)1.void sort(flowjope s[],int n){int i,k,j,l;for(i=1;i<=n-1;i++)//-----选择排序{k=i;while(k<=n&&s[k].tag!=0) k++;if(k>n) break;//-----没有a i,跳出else{for(j=k+1;j<=n;j++)if(s[j].tag==0)if(s[k].a>s[j].a) k=j;swap(s[i].index,s[k].index);swap(s[i].tag,s[k].tag); } }l=i;//-----记下当前第一个b i的下标for(i=l;i<=n-1;i++){k=i;for(j=k+1;j<=n;j++)if(s[k].b<s[j].b) k=j;swap(s[i].index,s[k].index); //-----只移动index和tag swap(s[i].tag,s[k].tag); }}2.void binarysearchtree(int a[],int b[],int n,int **m,int**s,int **w){int i,j,k,t,l;for(i=1;i<=n+1;i++){ w[i][i-1]=a[i-1];m[i][i-1]=0;}for(l=0;l<=n-1;l++)//----l是下标j-i的差for(i=1;i<=n-l;i++){j=i+l;w[i][j]=w[i][j-1]+a[j]+b[j];m[i][j]=m[i][i-1]+m[i+1][j]+w[i][j];s[i][j]=i;for(k=i+1;k<=j;k++){ t=m[i][k-1]+m[k+1][j]+w[i][j];if(t<m[i][j]){m[i][j]=t;s[i][j]=k;}}}}一、填空题(本题15分,每小题1分)1、算法就是一组有穷的,它们划定懂得决某一特定类型问题的 .2、在进行问题的盘算庞杂性剖析之前,起首必须树立求解问题所用的盘算模子.3个根本盘算模子是...3、算法的庞杂性是的器量,是评价算法好坏的重要根据.4、盘算机的资本最重要的是和资本.因而,算法的庞杂性有和之分.5、f(n)= 6×2n+n2,f(n)的渐进性态f(n)= O( )6、贪婪算法老是做出在当前看来的选择.也就是说贪婪算法其实不从整体最优斟酌,它所做出的选择只是在某种意义上的. 7、很多可以用贪婪算法求解的问题一般具有2个重要的性质:性质和性质.二.简答题(本题25分,每小题5分)1、简略描写分治法的根本思惟.2、简述动态计划办法所应用的最优化道理.3、何谓最优子构造性质?4、简略描写回溯法根本思惟.5、何谓P.NP.NPC问题三.算法填空(本题20分,每小题5分)1.n后问题回溯算法(1)用二维数组A[N][N]存储皇后地位,若第i行第j列放有皇后,则A[i][j]为非0值,不然值为0.(2)分离用一维数组M[N].L[2*N-1].R[2*N-1]暗示竖列.左斜线.右斜线是否放有棋子,有则值为1,不然值为0.for(j=0;j<N;j++)if( 1 ) /*安然检讨*/{ A[i][j]=i+1; /*放皇后*/2 ;if(i==N-1)输出成果;else 3 ;; /*试探下一行*/4 ; /*去皇后*/5 ;;}2.数塔问题.有形如下图所示的数塔,从顶部动身,在每一结点可以选择向左走或是向右走,一路走到底层,请求找出一条路径,使路径上的值最大.for(r=n-2;r>=0;r--) //自底向上递归盘算for(c=0; 1 ;c++)if( t[r+1][c]>t[r+1][c+1]) 2 ;else 3 ;3.Hanoi算法Hanoi(n,a,b,c)if (n==1) 1 ;else{ 2 ;3 ;Hanoi(n-1,b, a, c);}4.Dijkstra算法求单源最短路径d[u]:s到u的距离 p[u]:记载前一节点信息Init-single-source(G,s)for each vertex v∈V[G]do { d[v]=∞; 1 }d[s]=0Relax(u,v,w)if d[v]>d[u]+w(u,v)then { d[v]=d[u]+w[u,v];2}dijkstra(G,w,s)1. Init-single-source(G,s)2. S=Φ3.Q=V[G]4.while Q<> Φdo u=min(Q)S=S∪{u}for each vertex 3do4四.算法懂得题(本题10分)根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树.请求中央被舍弃的结点用×标识表记标帜,获得中央解的结点用单圆圈○框起,最优解用双圆圈◎框起.五.算法懂得题(本题5分)设有n=2k个运发动要进行轮回赛,现设计一个知足以下请求的比赛日程表:①每个选手必须与其他n-1名选手比赛各一次;②每个选手一天至多只能赛一次;③轮回赛要在最短时光内完成.(1)假如n=2k,轮回赛起码须要进行几天;(2)当n=23=8时,请画出轮回赛日程表.六.算法设计题(本题15分)分离用贪婪算法.动态计划法.回溯法设计0-1背包问题.请求:解释所应用的算法计谋;写出算法实现的重要步调;剖析算法的时光.七.算法设计题(本题10分)经由过程键盘输入一个高精度的正整数n(n的有用位数≤240),去失落个中随意率性s个数字后,剩下的数字按原阁下次序将构成一个新的正整数.编程对给定的n 和s,查找一种计划,使得剩下的数字构成的新数最小.【样例输入】178543S=4【样例输出】13答案:一.填空题(本题15分,每小题1分)1.规矩一系列运算2. 随机存取机RAM(Random Access Machine);随机存取存储程序机RASP(Random Access Stored Program Machine);图灵机(Turing Machine)3. 算法效力4. 时光.空间.时光庞杂度. 空间庞杂度5.2n6.最好局部最优选择7. 贪婪选择最优子构造二.简答题(本题25分,每小题5分)6、分治法的根本思惟是将一个范围为n的问题分化为k个范围较小的子问题,这些子问题互相自力且与原问题雷同;对这k 个子问题分离求解.假如子问题的范围仍然不敷小,则再划分为k个子问题,如斯递归的进行下去,直到问题范围足够小,很轻易求出其解为止;将求出的小范围的问题的解归并为一个更大范围的问题的解,自底向上慢慢求出本来问题的解.7、“最优化道理”用数学化的说话来描写:假设为懂得决某一优化问题,须要依次作出n个决议计划D1,D2,…,Dn,如若这个决议计划序列是最优的,对于任何一个整数k,1 < k < n,不管前面k个决议计划是如何的,今后的最优决议计划只取决于由前面决议计划所肯定的当前状况,即今后的决议计划Dk+1,Dk+2,…,Dn也是最优的.8、某个问题的最优解包含着其子问题的最优解.这种性质称为最优子构造性质.9、回溯法的根本思惟是在一棵含有问题全体可能解的状况空间树长进行深度优先搜刮,解为叶子结点.搜刮进程中,每到达一个结点时,则断定该结点为根的子树是否含有问题的解,假如可以肯定该子树中不含有问题的解,则废弃对该子树的搜刮,退回到上层父结点,持续下一步深度优先搜刮进程.在回溯法中,其实不是先构造出整棵状况空间树,再进行搜刮,而是在搜刮进程,慢慢构造出状况空间树,即边搜刮,边构造.10、P(Polynomial问题):也等于多项式庞杂程度的问题.NP就是Non-deterministic Polynomial的问题,也等于多项式庞杂程度的非肯定性问题.NPC(NP Complete)问题,这种问题只有把解域里面的所有可能都穷举了之后才干得出答案,如许的问题是NP里面最难的问题,这种问题就是NPC问题.三.算法填空(本题20分,每小题5分)1.n后问题回溯算法(1) !M[j]&&!L[i+j]&&!R[i-j+N](2) M[j]=L[i+j]=R[i-j+N]=1;(3) try(i+1,M,L,R,A)(4) A[i][j]=0(5) M[j]=L[i+j]=R[i-j+N]=02.数塔问题.(1)c<=r(2)t[r][c]+=t[r+1][c](3)t[r][c]+=t[r+1][c+1]3.Hanoi算法(1)move(a,c)(2)Hanoi(n-1, a, c , b)(3)Move(a,c)4.(1)p[v]=NIL(2)p[v]=u(3) v∈adj[u](4)Relax(u,v,w)四.算法懂得题(本题10分)五.(1)8天(2分);(2)当n=23=8时,轮回赛日程表(3分).六.算法设计题(本题15分)1 2 3 4 5 6 7 82 1 43 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 46 5 87 2 1 4 37 8 5 6 3 4 1 28 7 6 5 4 3 2 1(1)贪婪算法 O(nlog(n))➢起首盘算每种物品单位重量的价值Vi/Wi,然后,依贪婪选择计谋,将尽可能多的单位重量价值最高的物品装入背包.若将这种物品全体装入背包后,背包内的物品总重量未超出C,则选择单位重量价值次高的物品并尽可能多地装入背包.依此计谋一向地进行下去,直到背包装满为止.➢具体算法可描写如下:void Knapsack(int n,float M,float v[],float w[],float x[]){Sort(n,v,w);int i;for (i=1;i<=n;i++) x[i]=0;float c=M;for (i=1;i<=n;i++){if (w[i]>c) break;x[i]=1;c-=w[i];}if (i<=n) x[i]=c/w[i];}(2)动态计划法 O(nc)m(i,j)是背包涵量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值.由0-1背包问题的最优子构造性质,可以树立盘算m(i,j)的递归式如下.void KnapSack(int v[],int w[],int c,int n,int m[][11]) {int jMax=min(w[n]-1,c);for (j=0;j<=jMax;j++)/*m(n,j)=0 0=<j<w[n]*/m[n][j]=0;for (j=w[n];j<=c;j++)/*m(n,j)=v[n] j>=w[n]*/m[n][j]=v[n];for (i=n-1;i>1;i--){ int jMax=min(w[i]-1,c);for (j=0;j<=jMax;j++)/*m(i,j)=m(i+1,j) 0=<j<w[i]*/m[i][j]=m[i+1][j];for (j=w[i];j<=c;j++)/*m(n,j)=v[n] j>=w[n]*/m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);}m[1][c]=m[2][c];if(c>=w[1])m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);}(3)回溯法 O(2n)cw:当前重量 cp:当前价值 bestp:当前最优值void backtrack(int i)//回溯法i初值1{ if(i > n) //到达叶结点{ bestp = cp; return;}if(cw + w[i] <= c) //搜刮左子树{ cw += w[i];cp += p[i];backtrack(i+1);cw -= w[i];cp -= p[i];}if(Bound(i+1)>bestp)//搜刮右子树backtrack(i+1);}七.算法设计题(本题10分)为了尽可能地逼近目的,我们拔取的贪婪计谋为:每一步老是选择一个使剩下的数最小的数字删去,即按高位到低位的次序搜刮,若列位数字递增,则删除最后一个数字,不然删除第一个递减区间的首字符.然后回到串首,按上述规矩再删除下一个数字.反复以长进程s次,剩下的数字串等于问题的解了.具体算法如下:输入s, n;while( s > 0 ){ i=1; //从串首开端找while (i < length(n)) && (n[i]<n[i+1]){i++;}delete(n,i,1); //删除字符串n的第i个字符s--;}while (length(n)>1)&& (n[1]=‘0’)delete(n,1,1); //删去串首可能产生的无用零输出n;。

算法分析与设计习题答案

算法分析与设计习题答案

算法分析与设计习题答案《算法分析与设计》期末复习题及答案⼀、简要回答下列问题:1.算法重要特性是什么?2.算法分析的⽬的是什么?3.算法的时间复杂性与问题的什么因素相关?4.算法的渐进时间复杂性的含义?5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?6.简述⼆分检索(折半查找)算法的基本过程。

7.背包问题的⽬标函数和贪⼼算法最优化量度相同吗?8.采⽤回溯法求解的问题,其解如何表⽰?有什么规定?9.回溯法的搜索特点是什么?10.n皇后问题回溯算法的判别函数place的基本流程是什么?11.为什么⽤分治法设计的算法⼀般有递归调⽤?12.为什么要分析最坏情况下的算法时间复杂性?13.简述渐进时间复杂性上界的定义。

14.⼆分检索算法最多的⽐较次数?15.快速排序算法最坏情况下需要多少次⽐较运算?16.贪⼼算法的基本思想?17.回溯法的解(x1,x2,……x n)的隐约束⼀般指什么?18.阐述归并排序的分治思路。

19.快速排序的基本思想是什么。

20.什么是直接递归和间接递归?消除递归⼀般要⽤到什么数据结构?21.什么是哈密顿环问题?22.⽤回溯法求解哈密顿环,如何定义判定函数?23.请写出prim算法的基本思想。

参考答案:1. 确定性、可实现性、输⼊、输出、有穷性2. 分析算法占⽤计算机资源的情况,对算法做出⽐较和评价,设计出额更好的算法。

3. 算法的时间复杂性与问题的规模相关,是问题⼤⼩n的函数。

4.当问题的规模n趋向⽆穷⼤时,影响算法效率的重要因素是T(n)的数量级,⽽其他因素仅是使时间复杂度相差常数倍,因此可以⽤T(n)的数量级(阶)评价算法。

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

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

最坏情况下的时间复杂性取的输⼊实例中最⼤的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输⼊实例的处理时间与各⾃概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6. 设输⼊是⼀个按⾮降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x⽐较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]回溯法的搜索特点是什么7. 不相同。

算法分析与设计作业及参考答案

算法分析与设计作业及参考答案

算法分析与设计作业及参考答案作业题目1、请分析冒泡排序算法的时间复杂度和空间复杂度,并举例说明其在实际中的应用场景。

2、设计一个算法,用于在一个未排序的整数数组中找到第二大的元素,并分析其时间复杂度。

3、比较贪心算法和动态规划算法的异同,并分别举例说明它们在解决问题中的应用。

参考答案1、冒泡排序算法时间复杂度:冒泡排序的基本思想是通过相邻元素的比较和交换,将最大的元素逐步“浮”到数组的末尾。

在最坏情况下,数组完全逆序,需要进行 n 1 轮比较和交换,每一轮比较 n i 次(i 表示当前轮数),所以总的比较次数为 n(n 1) / 2,时间复杂度为 O(n^2)。

在最好情况下,数组已经有序,只需要进行一轮比较,时间复杂度为 O(n)。

平均情况下,时间复杂度也为 O(n^2)。

空间复杂度:冒泡排序只在原数组上进行操作,不需要额外的存储空间,空间复杂度为 O(1)。

应用场景:冒泡排序算法简单易懂,对于规模较小的数组,或者对算法的简单性要求较高而对性能要求不是特别苛刻的场景,如对少量数据进行简单排序时,可以使用冒泡排序。

例如,在一个小型的学生成绩管理系统中,需要对一个班级的少量学生成绩进行排序展示,冒泡排序就可以满足需求。

2、找到第二大元素的算法以下是一种使用遍历的方法来找到未排序整数数组中第二大元素的算法:```pythondef find_second_largest(arr):largest = arr0second_largest = float('inf')for num in arr:if num > largest:second_largest = largestlargest = numelif num > second_largest and num!= largest:second_largest = numreturn second_largest```时间复杂度分析:这个算法需要遍历数组一次,所以时间复杂度为O(n)。

《算法设计与分析》试卷及答案

《算法设计与分析》试卷及答案

《算法设计与分析》试卷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、请分析冒泡排序算法的时间复杂度和空间复杂度,并举例说明其在什么情况下性能较好,什么情况下性能较差。

2、设计一个算法,用于在一个已排序的整数数组中查找特定元素。

要求算法的时间复杂度为 O(log n)。

3、比较贪心算法和动态规划算法的异同,并举例说明它们在实际问题中的应用。

参考答案一、冒泡排序算法的分析冒泡排序(Bubble Sort)是一种简单的排序算法。

它重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止。

1、时间复杂度最坏情况:数组完全逆序,需要进行 n(n 1) / 2 次比较和交换操作,时间复杂度为 O(n^2)。

最好情况:数组已经有序,不需要进行交换操作,只需要进行 n 1 次比较,时间复杂度为 O(n)。

平均情况:时间复杂度也为 O(n^2)。

2、空间复杂度冒泡排序只在交换元素时使用了临时变量,空间复杂度为 O(1),是一个原地排序算法。

3、性能分析性能较好的情况:当数组规模较小且接近有序时,冒泡排序的性能相对较好。

因为在这种情况下,比较和交换的次数相对较少。

性能较差的情况:当数组规模较大且无序程度较高时,冒泡排序的性能会非常差。

因为需要进行大量的比较和交换操作,时间消耗很大。

例如,对于数组 2, 1, 3, 5, 4,冒泡排序需要经过多次比较和交换才能将其排序为 1, 2, 3, 4, 5。

而对于已经有序的数组 1, 2, 3, 4, 5,冒泡排序只需要进行较少的比较操作就能确定数组已经有序。

二、在已排序数组中查找特定元素的算法设计对于在已排序的整数数组中查找特定元素,我们可以使用二分查找(Binary Search)算法。

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

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

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

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

算法设计与分析课后习题

算法设计与分析课后习题

算法设计与分析课后习题(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第一章1. 算法分析题算法分析题1-1 求下列函数的渐进表达式(1). 3n^2 + 10n < 3n^2 + 10n^2 = 13n^2 = O(n^2)(2). n^2 / 10 + 2^n当n>5是,n^2 < 2 ^n所以,当n >= 1时,n^2/10 < 2 ^n故: n^2/10 + 2^n < 2 ^n + 2^n = 2*2^n = O(2^n)(3). 21 + 1/n < 21 + 1 = 22 = O(1)(4). log(n^3)=3log(n)=O(log(n))(5). 10log(3^n) = (10log3)n = O(n)算法分析题1-6(1)因为:f(n)=log(n^2) = 2log(n); g(n) = log(n) + 5所以:f(n)=Θ(log(n)+5) =Θ(g(n))(2)因为:log(n) < √n ; f(n) = 2log(n); g(n)= √n所以:f(n) = O(g(n))(3)因为:log(n) < n; f(n) = n; g(n) = log(n^2) = 2log(n)所以;f(n) = Ω(g(n))(4)因为:f(n) = nlogn +n; g(n) = logn所以:f(n) =Ω(g(n))(5)因为: f(n) = 10; g(n) = log(10)所以:f(n) =Θ(g(n))(6)因为: f(n)=log^2(n); g(n) = log(n)所以: f(n) ==Ω(g(n))(7)因为: f(n) = 2^n < 100*2^n; g(n)=100n^2; 2^n > n ^2所以: f(n) = Ω(g(n))(8)因为:f(n) = 2^n; g(n) = 3 ^n; 2 ^n < 3 ^n所以: f(n) = O(g(n))习题1-9 证明:如果一个算法在平均情况下的计算时间复杂性为Θ(f(n)),该算法在最坏情况下所需的计算时间为Ω(f(n)).分析与解答:因此,Tmax(N) = Ω(Tavg(N)) = Ω(Θ(f(n)))=Ω(f(n)).第二章算法分析题2-3 设a[0:n-1]是已经排好序的数组。

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

《算法设计与分析》练习题库及答案(加粗红色字体为2013下新增题目) 一、概念题:请解释下列术语。

1.数据类型2.队列3.多项式复杂度4.满二叉树5. NP-难度6.算法7. SIMD(并行算法)8.连通图9.抽象数据类型10.指数复杂度11.递归12.完全二叉树13.状态空间树14. NP-完全的15.算法与过程16.有向图与无向图17.树18. P类问题19. 确定的算法20. NP问题21. 最小生成树22. 动态规划23. 数据结构24. 排序二、填空题1. 简单递选分类过程中所需进行移动存储的操作次数较少,其最大值为___________。

2. 一组有序的n个数,采用逐个查找算法查找一给定的数是否出现在序列中,其算法复杂性为_____________。

3. 动态规划实际上是研究一类__________________的算法,其应用非常广泛。

4. BFS算法的中文名称是______________________算法。

5. 一棵树中定义为该树的高度或深度。

6. 二分检索树要求树中所有结点中的元素满足。

7. 比较树的结点由称为和的两种结点组成。

8. 外结点用一个结点表示,在二分检索算法中它表示不成功检索的一种情况。

9. 由根到所有内部结点的距离之和称为 ;由根到所有外部结点的距离之和称为 .10.max和min被看成是两个内部函数,它们分别求取两个元素的大者和小者,并认为每次调用其中的一个函数都只需作次元素比较。

11.如果用分治策略来设计分类算法,则可使最坏情况时间变为o(n logn)。

这样的算法称为。

12.贪心算法可行的第一个基本要素是。

13. 当一个问题的最优解包含着它的子问题的最优解时,称此问题具有性质。

14. 二路归并模式可以用树来表示。

15. kruskal算法对于每一个无向连通图g产生一棵。

16.因为如果有环,则可去掉这个环且不增加这条路径的长度(不含有负长度的环)。

如果k是这条最短路径上的一个中间结点,那么—由i到k和由k 到j的这两条子路径应分为别是由i到k和.由k到j的最短路径。

否则,这条由i到j的路径就不是具有最小长度的路径。

于是,原理成立。

17.为了把动态规划应用于得到一棵最优二分检索树的问题,需要把构造这样的一棵树看成是一系列决策的结果,而且要能列出求取序列的递推式.18. 所谓可靠性设计最优化问题是在的约束下,如何使系统的可靠性达到最优的问题。

19.货郎担问题是求取具有的周游路线问题。

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

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

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

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

三、程序填空题。

1.对二叉树的先根次序周游算法递归表示为:procedure PREORDER(T)//T是一棵二元树。

T中每个结点有三个信息段:ICHILD,,DATA,RCHILD// if T≠0 then call VISIT(T)__________(1)_____________________(2)___________endifend PREORDER2.递归求取最大和最小元素procedure MAXMIN(i.j. fmax,fmin)//A(1:n)是含有n个元素的数组,参数i,j是整数,1≤i,j≤n// //该过程把A(i,j)中的最大和最小元素分别赋给fmax和fmin// integer i,j;global n,A(1:n)case:i=j:fmax←fmin←A(i):i=j-1:if A(i)<A(j) then fmax←A(j);fmin←A(i)else fmax←A(i);fmin←A(j)endif: else: mid ← ⎣⎦2/)(j i +___________(1)_________________________(2)______________fmax ←max(gmax ,hmax)fmin ←min(gmin ,hmin)endcaseend MAXMIN3.用回溯法求子集和数问题的递归回溯算法procedure SUMOFSUB<s ,k ,r)//找W(1:n)中和数为M 的所有子集,进入此过程时X(1),…,X(k-1)的值已确定。

∑∑-====11)()()(k j n k j j W r j X j W s 且。

这些对W(j)按非降次序排列。

假定W(1)≤M.//global integer M ,n; global real W(1:n);global Boolean X(1:n)real r,s ;integer k ,j//生成左儿子。

注意,由于 true B k =-1,因此s+W(k)≤M//X(k)←1if s+W(k)=M then //子集找到//print (X(j),j ←1 to k )elseif s+W(k)+W(k+1)<=M then //B k =yrue//______________(1)__________________endif//生成右儿子和计算B k 的值//endifif s+r-W(k)≥M and s+W(k+1)≤M //B k =true //then X(k)←0_______________(2)_________________endifend SUMOFSUB4.用回溯法求n-皇后问题的所有解procedure NQUEENS(n)//此过程使用回溯法求出在一个n*n棋盘上放置n个皇后,使其不能互相攻击的所有可能位置//integer k,n,X(1:n)X(1)←0;k←1 //k是当前行;X(k)是当前列//while k>0 do //对所有的行执行以下语句//X(k)←X(k)+1 //移到下一列//while X(k)≤n and not PLACE(k) do //此处能放这个皇后吗//____________(1)___________repeatif X(k)≤n //找到一个位置//then if k=n //是一个完整的解吗//then print(X) //是,打印这个数组//else _______(2)_______;_______(3)_______; //转向下一行// endifelse _______(4)_______ //回溯//endifrepeatend NQUEENS5.二分查找算法procedure binsrch1 (a,n,x,j)//除n>0外,其余说明与binsrch同//integer low ,high ,mid ,j ,n;low ←1;high ← (1) //high 总比可能的取值大1// while low< (2) domid ←⎣⎦2/)(high low +if x<a(mid) //在循环中只比较一次// then (3)else (4) //x ≥a(mid)//endifrepeatif x=a(low) then j ←low //x 出现//else j ←o //x 不出现//endif ;end binsrch16.求图中每对顶点之间的最短路径。

procedure all—Paths(cost,a, n)//cost(n,n)是n结点图的成本邻接矩阵;a(i,j)是结点vi到vj的最短路径的成本;cost(i,j)=0,1≤i≤n//integer i,j,k,n;real cost(n,n),a(n,n)for i←1 to n dofor j<--1 to n doa(i,j)<--cost(i,j)repeatrepeat//将cost(i,j)复制到a(i,j)//for k<--1to on do //对最高下标为k的结点的路径//for i←-1 to n do //对于所有可能的结点对//for i<--1 to n doa(i,j)<--min{ (1) , (2) } repeatrepeatrepeatend all—Paths7.简单的合并与查找运算procedureu(i,j)//根为i和j的两个不相交集合用它们的并来取代// integeri,jParent(i)<--j;end uproceduref(i)//找包含元素i的树的根//integeri,jj<--i;while ⑴ do //若此结点是根,则Parent(j)<--0//⑵ ;repeatreturn(j)end f8. 插入分类procedure insertionsort(a,n)//将a(1:n)中的元素按非降次序分类,n≥1//a(0)←-∞//开始时生成一个虚拟值//for j←⑴ to n do //a(1:j-1)已分类//item←a(j);i←⑵while item<a(i) do //0≤i<j//a(i+1)←a(i);i ←i-1repeata(i+1)←-itemrepeatend insertionsort9. 归并分类procedure mergesort(low, high)//a(low: high)是一个全程数组,它含有high-low+1≥0个待分类的元素// integer low, high ;if low<high ;then mid ←⎣⎦2/)(high low + //求这个集合的分割点//call ⑴ //将一个子集合分类//call ⑵ //将另一个子集合分类//call ⑶//归并两个已分类的子集合//endifend mergesort10. 使用链接表归并已分类的集合procedure merge1 (q,r,p)//q和r是全程数组link(1:n)中两个表的指针。

这两个表可用来获得全程数组a(1:n)中已分类元素的子集合。

此算法执行后构造出一个由p所指示的新表,利用此表可以得到按非降次序把a中元素分好类的元素表,同时q和r所指示的表随之消失。

相关文档
最新文档