算法习题
算法练习题及答案
算法练习题及答案算法练习题及答案随着计算机科学的发展,算法成为了计算机科学的核心内容之一。
算法是一种解决问题的方法和步骤,它可以将复杂的问题简化为一系列简单的操作。
为了提高算法设计和分析的能力,许多学生和程序员经常进行算法练习。
在这篇文章中,我将给出一些常见的算法练习题及其答案,希望能对读者有所帮助。
1. 反转字符串题目:给定一个字符串,将其反转并返回。
解答:可以使用两个指针,一个指向字符串的开头,一个指向字符串的末尾。
然后交换两个指针指向的字符,然后分别向中间靠拢,直到两个指针相遇。
2. 判断回文数题目:给定一个整数,判断它是否是回文数。
回文数是指正序和倒序读都一样的整数。
解答:可以将整数转换为字符串,然后使用反转字符串的方法判断是否相等。
另一种方法是将整数反转后与原来的整数进行比较。
3. 寻找两个有序数组的中位数题目:给定两个有序数组,找出这两个数组合并后的中位数。
要求时间复杂度为O(log(m+n))。
解答:可以使用二分查找的思想。
首先将两个数组合并成一个有序数组,然后找到中位数的位置。
如果数组长度为奇数,中位数就是中间的元素;如果数组长度为偶数,中位数就是中间两个元素的平均值。
4. 搜索旋转排序数组题目:给定一个按照升序排列的整数数组,经过旋转后的数组,搜索一个给定的目标值。
如果目标值存在于数组中,则返回它的索引,否则返回-1。
解答:可以使用二分查找的思想。
首先找到数组的中间元素,然后判断中间元素与目标值的关系。
如果中间元素等于目标值,直接返回索引;如果中间元素小于目标值,说明目标值在右半部分,继续在右半部分进行二分查找;如果中间元素大于目标值,说明目标值在左半部分,继续在左半部分进行二分查找。
5. 最长公共前缀题目:给定一个字符串数组,找到这些字符串的最长公共前缀。
解答:可以将第一个字符串作为初始的最长公共前缀,然后逐个比较后面的字符串与最长公共前缀的相同部分。
如果相同部分为空,则返回空;如果相同部分不为空,则更新最长公共前缀。
算法演练(一)
算法演练(⼀)算法练习题(⼀)1.题型:数组与字符串例⼀:⽣成元问题题⽬:如果x+x的各个数字之和得到y,就是说x是y的⽣成元。
给出n(1<=n<=100000),求最⼩⽣成元。
⽆解输出0.例如,n=216,121,2005时的解分别是198,0,1979。
解题思路:枚举100000内的所有正整数m,标记“m加上m的各个数字之和得到的数有⼀个⽣成元是m”,最后查表即可。
(打表法)代码:#include<stdio.h>#include<string.h>#define maxn 100005int ans[maxn];int main() {int T, n;memset(ans, 0, sizeof(ans));int m;for (m = 1; m < maxn; m++) {int x = m, y = m;while(x > 0) { y += x % 10; x /= 10;}if (ans[y] == 0 || m < ans[y]) ans[y] = m; // 疑问:ans[y]的值来源于m,m为累加数,m<ans[y]的情况似乎并不存在。
}scanf("%d", &T);while (T--) {scanf("%d", &n);printf("%d\n", ans[n]);}return 0;}#注:本题⽬及代码源于刘汝佳著《算法竞赛⼊门经典》第⼆版。
例⼆:环状序列问题题⽬:长度为n的环状串有n种表⽰⽅法,分别为从某个位置开始顺时针得到,在这些排列中字典顺序最⼩的称“最⼩表⽰”。
如CTCC的最⼩表⽰为CCCT,CGAGTCAGCT的最⼩表⽰为AGCTCGAGTC。
解题思路:对于两个字符串,从第⼀的字符开始⽐较,当某⼀个位置的字符不同时,该位置字符较⼩的串,字典序⼩。
算法(复习题)1
平均情况:设待查找的元素在数组中的概率为P,不在数组中的概率为1-P,若出现在数组中每个位置的概率是均等的为p/nT(n)=P1D1+P2D2+...+PiDi+(1-P)Dn+1=p/2+n(1-p/2)1.叙述分治算法和动态规划算法的基本思想,并比较两种算法的异同。
答:分治法将待求解的问题划分成K个较小规模的子问题,对这K个子问题分别求解,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解. 动态规划将待求解的问题分解成若干的子问题,自底向上地通过求解子问题的解得到原问题的解。
动态规划将每个子问题只求解一次并将其解保存在一个表格中,当需要再次求解此子问题时,只是简单的通过查表过的该子问题的解,避免了大量的重复计算.异同:分治法求解的问题分解后的子问题都是独立的,而使用动态规划求解的问题分解后得到的子问题往往不是相互独立的。
分治法是自顶向下用递归的方法解决问题,而动态规划则是自底向上非递归解决问题。
1.简述分治算法求解过程的三个阶段。
答:(1)划分:既然是分治,当然需要把规模为n的原问题划分为k个规模较小的子问题,并尽量使这k个子问题的规模大致相同。
(2)求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。
(3)合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。
2.叙述分治法的基本思想,并分析分治法与减治法二者的区别。
答:分治法将待求解的问题划分成K个较小规模的子问题,对这K个子问题分别求解,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解.区别:分治法是把一个大问题划分成若干个子问题,分别求解各个子问题,然后把子问题的解进行合并并得到原问题的解。
减治法同样是把一个大问题划分成若干个子问题,但是这些子问题不需要分别求解,只需求解其中的一个子问题,因而也无需对子问题的解进行合并。
算法练习题——精选推荐
算法练习题1. 斐波那契数列:1 1 2 3 5 8 13 21 …… 求第20个数;2. 今有雉兔同笼,上有三⼗五头,下有九⼗四⾜,问雉兔各⼏何?3. 求1000以内的⽔仙花数4. 求⼀个数的阶乘5. 求多个连续数的阶乘之和6. 如果今天是星期⼆,那么1000天后是星期⼏?⽤户输⼊⼀个天数,计算这个天数后是星期⼏?7. 苹果3元⼀个,鸭梨2元⼀个,桃⼦1元⼀个。
现在想⽤200元买100个⽔果,在控制台中列出所有可能性8. 求任意⼀个⼩于100000的正整数的位数,并逆序打印每⼀位数字⽐如:567,位数是3位,以此打印7 ,6 ,59. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
程序分析:请抓住分⼦与分母的变化规律。
10. 有⼀些苹果,每⼈分5个多1个,每⼈分6个多2个,每⼈分7个多3个,⼀共有多少个苹果11. 判断⼀个数字是不是素数12. 利⽤条件运算符的嵌套来完成此题:学习成绩>=90分的同学⽤A表⽰,60-89分之间的⽤B表⽰,60分以下的⽤C表⽰。
1.程序分析:(a>b)?a:b这是条件运算符的基本例⼦。
13. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是⼀个数字。
例如2+22+222+2222+22222(此时共有5个数相加),⼏个数相加由⽤户输⼊(prompt)14. ⼀球从100⽶⾼度⾃由落下,每次落地后反跳回原⾼度的⼀半;再落下,求它在第10次落地时,共经过多少⽶?第10次反弹多⾼?15. 求10000以内的完美数如果⼀个数恰好等于它的约数之和,则称该数位“完美数”。
16. 寻找丑数题⽬:我们把只包含因⼦2、3 和5 的数称作丑数(Ugly Number)。
例如6、8 都是丑数,但14 不是,因为它包含因⼦7。
习惯上我们把1 当做是第⼀个丑数。
求按从⼩到⼤的顺序的第1500 个丑数。
17. 猴⼦吃桃问题:猴⼦第⼀天摘下若⼲个桃⼦,当即吃了⼀半,还不瘾,⼜多吃了⼀个第⼆天早上⼜将剩下的桃⼦吃掉⼀半,⼜多吃了⼀个。
算法练习题-分章节-带答案
算法练习题-分章节-带答案一、选择题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、A和C6、算法分析中,记号O表示(),记号表示()。
A.渐进下界B.渐进上界C.非紧上界D.非紧下界7、以下关于渐进记号的性质是正确的有:()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))8、记号O的定义正确的是()。
A.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0f(n)cg(n)};B.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0cg(n)f(n)};C.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有nn0有0f(n)D.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有nn0有:0cg(n)<f(n)};9、记号的定义正确的是()。
算法期末复习题2
填空题:1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性有穷性可行性 0个或多个输入一个或多个输出2.算法的复杂性有时间复杂性和空间复杂性之分,衡量一个算法好坏的标准是时间复杂度高低。
3.某一问题可用动态规划算法求解的显著特征是该问题具有最优子结构性质。
5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解6.动态规划算法的基本思想是将待求解问题分解成若干子问题_,先求解子问题,然后从这些子问题的解得到原问题的解。
7.以深度优先方式系统搜索问题解的算法称为回溯法。
8.0-1背包问题的回溯算法所需的计算时间为o(n*2n),用动态规划算法所需的计算时间为o(min{nc,2n})。
9.动态规划算法的两个基本要素是最优子结构和重叠子问题。
10.二分搜索算法是利用动态规划法实现的算法。
11.一个算法复杂性的高低体现在计算机运行该算法所需的时间和存储器资源上,因此算法的复杂性有时间复杂性和空间复杂性之分。
12.出自于“平衡子问题”的思想,通常分治法在分割原问题,形成若干子问题时,这些子问题的规模都大致相同。
13.动态规划算法有一个变形方法备忘录方法。
这种方法不同于动态规划算法“自底向上”的填充方向,而是“自顶向下”的递归方向,为每个解过的子问题建立了备忘录以备需要时查看,同样也可避免相同子问题的重复求解。
14、这种不断回头寻找目标的方法称为回溯法。
15、直接或间接地调用自身的算法称为递归算法。
16、 记号在算法复杂性的表示法中表示渐进确界或紧致界。
17、由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。
18、建立计算模型的目的是为了使问题的计算复杂性分析有一个共同的客观尺度。
19、下列各步骤的先后顺序是②③④①。
①调试程序②分析问题③设计算法④编写程序。
20、最优子结构性质的含义是问题的最优解包含其子问题的最优解。
算法练习题
算法练习题一、基础算法1. 编写一个程序,实现一个冒泡排序算法。
2. 实现一个选择排序算法。
3. 实现一个插入排序算法。
4. 编写一个函数,计算一个整数数组中的最大值和最小值。
5. 编写一个函数,实现二分查找算法。
6. 编写一个函数,实现快速排序算法。
7. 编写一个函数,判断一个整数是否为素数。
8. 编写一个函数,实现反转一个整数数组。
9. 编写一个函数,计算两个整数数组的交集。
10. 编写一个函数,判断一个字符串是否为回文。
二、数据结构11. 实现一个单链表的基本操作,包括插入、删除、查找。
12. 实现一个双向链表的基本操作,包括插入、删除、查找。
13. 实现一个栈的基本操作,包括压栈、出栈、查看栈顶元素。
14. 实现一个队列的基本操作,包括入队、出队、查看队首元素。
15. 实现一个二叉树的基本操作,包括插入、删除、查找。
16. 实现一个二叉搜索树的基本操作,包括插入、删除、查找。
17. 实现一个哈希表的基本操作,包括插入、删除、查找。
三、搜索与图论18. 编写一个程序,实现深度优先搜索(DFS)算法。
19. 编写一个程序,实现广度优先搜索(BFS)算法。
20. 编写一个程序,求解迷宫问题。
21. 编写一个程序,计算一个有向图的拓扑排序。
22. 编写一个程序,计算一个无向图的欧拉回路。
23. 编写一个程序,计算一个加权无向图的最小树(Prim算法)。
24. 编写一个程序,计算一个加权有向图的最短路径(Dijkstra算法)。
25. 编写一个程序,计算一个加权有向图的所有顶点对的最短路径(Floyd算法)。
四、动态规划26. 编写一个程序,实现背包问题。
27. 编写一个程序,计算最长公共子序列(LCS)。
28. 编写一个程序,计算最长递增子序列(LIS)。
29. 编写一个程序,实现编辑距离(Levenshtein距离)。
30. 编写一个程序,实现硬币找零问题。
31. 编写一个程序,实现矩阵链乘问题。
算法复习题
一、选择题1、衡量一个算法好坏的标准是( )。
(A )运行速度快 (B )占用空间少 (C )时间复杂度低 (D )代码短2、函数n n 1032 的渐进表达式是( )。
(A )O (23n ) (B)O (3) (C )O (n 10) (D )O(2n )3、以下不可以使用分治法求解的是( )。
(A )棋盘覆盖问题 (B )选择问题 (C )归并排序 (D) 0/1背包问题4、二分搜索算法是利用( )实现的算法。
(A)分治策略 (B )动态规划法 (C)贪心法 (D )回溯法5、二分搜索算法的时间复杂性为( )。
(A )O(2n ) (B )O (n ) (C )O (n log ) (D)O (n n log )6、快速排序算法的时间复杂性为( )。
(A )O (2n ) (B)O (n ) (C )O(n log ) (D)O(n n log )7、实现大整数的乘法是利用( )的算法.(A )分治策略 (B)动态规划法 (C)贪心法 (D )回溯法8、矩阵连乘问题的算法可由( )设计实现。
(A )分支界限算法 (B)动态规划算法 (C)贪心算法 (D )回溯算法9、实现循环赛日程表利用的算法是( )。
(A )分治策略 (B )动态规划法 (C )贪心法(D )回溯法10、下列是动态规划算法基本要素的是( ).(A )定义最优解 (B )构造最优解 (C )算出最优解 (D )子问题重叠性质11、最长公共子序列算法利用的算法是( )。
(A )分治法 (B )动态规划法 (C )贪心法 (D)回溯法12、下列算法中通常以自底向上的方式求解最优解的是( )。
(A)备忘录法 (B )动态规划法 (C )贪心法 (D )回溯法13、以下不可以使用分治法求解的是( ).(A)棋盘覆盖问题 (B )选择问题 (C )归并排序 (D )0/1背包问题14、下列算法中不能解决0/1背包问题的是( )(A)贪心法 (B )动态规划 (C)回溯法 (D)分支限界法15、算法是由若干条指令组成的有穷序列,而且满足以下性质( )(A )输入:有0个或多个输入 (B)输出:至少有一个输出(C )确定性:指令清晰,无歧义 (D)有限性:指令执行次数有限,而且执行时间有限A (1)(2)(3)B (1)(2)(4)C (1)(3)(4)D (1) (2)(3)(4)16、函数32n +10nlog n 的渐进表达式是( ).A. 2n B 。
算法复习题
一、选择题1、衡量一个算法好坏的标准是( )。
(A )运行速度快 (B )占用空间少 (C )时间复杂度低 (D )代码短2、函数n n 1032 的渐进表达式是( )。
(A )O(23n ) (B )O(3) (C )O(n 10) (D )O(2n )3、以下不可以使用分治法求解的是( )。
(A )棋盘覆盖问题 (B )选择问题 (C )归并排序 (D ) 0/1背包问题4、二分搜索算法是利用( )实现的算法。
(A )分治策略 (B )动态规划法 (C )贪心法 (D )回溯法5、二分搜索算法的时间复杂性为( )。
(A )O(2n ) (B )O(n ) (C )O(n log ) (D )O(n n log )6、快速排序算法的时间复杂性为( )。
(A )O(2n ) (B )O(n ) (C )O(n log ) (D )O(n n log )7、实现大整数的乘法是利用( )的算法。
(A )分治策略 (B )动态规划法 (C )贪心法 (D )回溯法8、矩阵连乘问题的算法可由( )设计实现。
(A )分支界限算法 (B )动态规划算法 (C )贪心算法 (D )回溯算法9、实现循环赛日程表利用的算法是( )。
(A )分治策略 (B )动态规划法 (C )贪心法(D )回溯法10、下列是动态规划算法基本要素的是( )。
(A )定义最优解 (B )构造最优解 (C )算出最优解 (D )子问题重叠性质11、最长公共子序列算法利用的算法是( )。
(A )分治法 (B )动态规划法 (C )贪心法 (D )回溯法12、下列算法中通常以自底向上的方式求解最优解的是( )。
(A )备忘录法 (B )动态规划法 (C )贪心法 (D )回溯法13、以下不可以使用分治法求解的是( )。
(A )棋盘覆盖问题 (B )选择问题 (C )归并排序 (D )0/1背包问题14、下列算法中不能解决0/1背包问题的是( )(A )贪心法 (B )动态规划 (C )回溯法 (D )分支限界法15、算法是由若干条指令组成的有穷序列,而且满足以下性质( )(A )输入:有0个或多个输入 (B )输出:至少有一个输出(C )确定性:指令清晰,无歧义 (D )有限性:指令执行次数有限,而且执行时间有限A (1)(2)(3) B(1)(2)(4) C(1)(3)(4) D (1) (2)(3)(4)16、函数32n +10nlog n 的渐进表达式是( ).A. 2nB. 32nC. nlog nD. 10nlog n17、能采用贪心算法求最优解的问题,一般具有的重要性质为:( )(A )最优子结构性质与贪心选择性质 (B )重叠子问题性质与贪心选择性质(C )最优子结构性质与重叠子问题性质 (D )预排序与递归调用18、回溯法在问题的解空间树中,按()策略,从根结点出发搜索解空间树。
数据结构与算法练习题库(含答案)
数据结构与算法练习题库(含答案)一、单选题(共80题,每题1分,共80分)1、对一棵二叉树的结点从 1 开始顺序编号。
要求每个结点的编号大于其左子树所有结点的编号、但小于右子树中所有结点的编号。
可采用▁▁▁▁▁ 实现编号。
A、中序遍历B、先序遍历C、层次遍历D、后序遍历正确答案:A2、设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数?A、5B、4C、2D、0正确答案:C3、两个有相同键值的元素具有不同的散列地址A、一定不会B、一定会C、可能会D、有万分之一的可能会正确答案:C4、将元素序列{18,23,11,20,2,7,27,33,42,15}按顺序插入一个初始为空的、大小为11的散列表中。
散列函数为:H(Key)=Key%11,采用线性探测法处理冲突。
问:当第一次发现有冲突时,散列表的装填因子大约是多少?A、0.73B、0.27C、0.64D、0.45正确答案:D5、对N个记录进行归并排序,归并趟数的数量级是:A、O(NlogN)B、O(logN)C、O(N)D、O(N2)正确答案:B6、下列说法不正确的是:A、图的遍历是从给定的源点出发每一个顶点仅被访问一次B、图的深度遍历不适用于有向图C、遍历的基本算法有两种:深度遍历和广度遍历D、图的深度遍历是一个递归过程正确答案:B7、二叉树的中序遍历也可以循环地完成。
给定循环中堆栈的操作序列如下(其中push为入栈,pop为出栈): push(1), push(2), push(3), pop(), push(4), pop(), pop(), push(5), pop(), pop(), push(6), pop()A、6是根结点B、2是4的父结点C、2和6是兄弟结点D、以上全不对正确答案:C8、设最小堆(小根堆)的层序遍历结果为{1, 3, 2, 5, 4, 7, 6}。
计算机算法复习题
计算机算法复习题## 计算机算法复习题### 一、选择题1. 在排序算法中,时间复杂度为O(nlogn)的算法是:A. 冒泡排序B. 快速排序C. 选择排序D. 插入排序2. 以下哪个算法是用于解决最近邻问题的?A. Dijkstra算法B. A*算法C. 动态规划D. 贪心算法### 二、填空题1. 在图的遍历中,深度优先搜索(DFS)使用的栈是_________。
2. 快速排序算法的核心思想是_________。
3. 在动态规划中,解决背包问题通常使用_________方法。
### 三、简答题1. 描述二分查找算法的基本步骤,并说明其时间复杂度。
二分查找算法的基本步骤如下:- 首先,设定查找区间的左右端点。
- 在查找区间的中间位置取一个值,与目标值进行比较。
- 如果中间值等于目标值,则查找成功。
- 如果中间值小于目标值,则在右半区间继续查找。
- 如果中间值大于目标值,则在左半区间继续查找。
- 重复以上步骤,直到找到目标值或查找区间为空。
二分查找算法的时间复杂度为O(logn)。
2. 什么是动态规划?请举例说明其应用场景。
动态规划是一种通过将复杂问题分解为更简单的子问题来求解的方法。
它适用于具有重叠子问题和最优子结构特性的问题。
在动态规划中,我们首先解决子问题,并将结果存储在一个表格中,以避免重复计算。
这样,当需要解决更大的子问题时,可以直接使用表格中的结果。
一个典型的动态规划应用场景是斐波那契数列的计算。
传统的递归方法会重复计算很多子问题,而使用动态规划,我们可以存储已计算的斐波那契数,从而大大提高计算效率。
### 四、编程题给定一个未排序的整数数组,请使用快速排序算法对其进行排序,并输出排序后的结果。
```pythondef quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)# 示例arr = [3, 6, 8, 10, 1, 2, 1]sorted_arr = quick_sort(arr)print(sorted_arr)```通过以上复习题,可以对计算机算法的基本概念、原理和应用有一个全面的回顾和理解。
算法分析复习题
一、单项选择题:1、算法的五大特征是确定性、有穷性、输入、输出和可行性。
其输入至少是( A )个。
A、0B、1C、n D、-12、大整数的乘法是利用的算法( C )。
A、贪心法B、动态规划法C、分治策略D、回溯法3、采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为( B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)4、一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
A、重叠子问题B、最优子结构性质C、贪心选择性质D、定义最优解5、设一个算法的输入规模为n,Dn是所有输入的集合,任一输入I∈Dn,P(I)是I出现的概率,有=1,T(I)是算法在输入I下所执行的基本语句次数,则该算法的平均执行时间为(D)。
A、B、C、D、6、把递归算法转化为非递归算法有如下两种基本方法:(1)直接用循环结构的算法替代递归算法。
(2)用( A )模拟系统的运行过程,通过分析只保存必须保存的信息,从而用非递归算法替代递归算法。
A、栈B、队列C、顺序表D、链表7、算法分析中,记号 表示(A)。
A、渐进下界B、渐进上界C、非紧上界D、紧渐进界9、贪心算法与动态规划算法的主要区别是(B )。
A、最优子结构B、贪心选择性质C、构造最优解D、定义最优解10、回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。
A、广度优先B、活结点优先C、扩展结点优先D、深度优先11. 回溯法的问题的解空间树是(B),并不需要在算法运行时构造一棵真正的树结构,然后再在该解空间树中搜索问题的解,而是只存储从根结点到当前结点的路径。
A、顺序方式的二叉树B、虚拟的树C、满二叉树D、完全二叉树12. 应用回溯法求解问题时,首先应该明确问题的解空间。
解空间中满足约束条件的决策序列称为(C)。
A、最优解B、局部最优解C、可行解D、最优子序列解13. 一个问题的最优解包含其子问题的最优解,则称此问题具有(D)性质。
高中信息技术《基本算法》练习题(附答案解析)
高中信息技术《基本算法》练习题(附答案解析)学校:___________姓名:___________班级:________________ 一、选择题1.下列VB表达式的值等于2016的是()A.2016 Mod 2 ^ 20B.Len(“2015”) + 1C.Str(2008) +“8”D.Mid(“20160501”,1,4)2.下列与数学表达式对应的python表达式,正确的是()。
A.( - b + math. sqrt (b * b – 4 * a * c)) /a * aB.- b + math. sqrt (b * b – 4 * a * c) /2*aC.( -b + math. sqrt (b * 2 – 4 * a * c)) /(2 * a)D.( -b + math. sqrt ( b * b – 4 * a * c)) / (2 * a)3.某查找算法的VB 程序如下:Private Sub Commandl_Click()Dim a(1 To 9) As Integer, key As Integer, i As Integer,j As IntegerDim mid 1 As Integer,mid 2 As Integera(1)=4:a(2)=22:a(3)=27:a(4)=32:a(5)=35:a(6)=44:a(7)=56:a(8)=59:a(9)=78key=Val(Textl.Text)i=1:j=9flag=FalseDo While i<=j And Not flagmidl=i+(j-i)\3mid 2=j-(j-i)\3If key=a(midl) Thenflag=TrueElseIf key<a(midl) Thenj=midl-lElseIf key=a(mid 2) Thenflag=TrueElseIf key>a(mid2) Theni=mid2+1Elsei=mid1+1j=mid2-1End IfLoopIf flag Then Labell.Caption=″查找成功!″Else Labell.Caption=″查找失败!″End Sub该程序段执行时,在文本框Text1中输入36,单击命令按钮Command1,程序运行结束后,i和j的值为()A.4,5 B.6,5 C.5,6 D.6,44.有如下Python程序段:import randomd=[0]*6i=0while i<=5:d[i]=random.randint(1,10)if d[i]%2==i%2:continuei=i+1print(d)该程序执行后,下列输出的结果不正确...的是()A.[5, 8, 9, 8, 9, 2] B.[8, 1, 8, 7, 2, 5]C.[9, 6, 7, 2, 9, 4] D.[3, 8, 7, 6, 5, 4]5.有如下程序段:n=int(input())s=0while n!=0:x=n%10s=x+sn=n//10若运行程序后输入“20220308”,s的结果为()A.17 B.22238 C.2022 D.96.某DataFrame对象score包含“准考证号”“学校名称”“姓名”“总分”“排名”等数据列,下列语句中,可以以学校为单位,输出各校学生“总分”平均值的是()A.print(score.groupby(“学校名称”,as_index=False).mean( ))B.print(score.groupby(“总分”,as_index=False).mean( ))C.print(score.groupby(“学校名称”,as_index=False).排名.mean( ))D.print(score.sort_index(“学校名称”,as_index=False).describe( ))7.下列Python赋值语句中,无法正确运行的是()A.a=b=c=5 B.a, b=c C.a+=b D.b=-c8.下列关于算法的描述正确的是()A.算法只能用流程图描述B.算法只能有一个输入C.一个算法的执行步骤可以是无限的D.一个算法至少要有一个输出9.【加试题】对分查找的VB程序段如下:key=78i=1j=8k=1Do While i<=jm= fix((i+j)/2)if d(m)=key ThenLabel1.Caption=kExit doEnd ifIf d(m)<key Theni=m+1elsej=m-1End Ifk=k+1Loop数组元素a(1)到a(8)的值依次为“22,34,41,53,66,71,78,91”。
算法案例 习题(含答案)
C.0011001(2)D.1001001(2)
4.更相减损术可解决下列问题中的( )
A.求两个正整数的最大公约数
B.求多项式的值
C.进位制的转化计算
D.排序问题
5.利用秦九韶算法计算f(x)=x5+2x4+3x3+4x2+5x+6在x=5时的值为( )
WHILE a<>b
IF a>b THEN
a=a-b
ELSE
_________
END IF
WEND
PRINT a
END
13.把八进制数 转化为三进制数为______________.
14. __________ .
15.二进制数 对应的十进制数是__________.
16.将二进制数11110(2)化为十进制数,结果为______________。
11.用秦九韶算法求多项式f(x)=x4-2x3+3x2-7x-5当x=4时的值,给出如下数据:
①0 ②2 ③11 ④37 ⑤143
其运算过程中(包括最终结果)会出现的数有____(只填序号).
12.请将以下用“更相减损术”求两个正整数a,b的最大公约数的程序补充完整:
INPUT “a,b=”;a,b
17.把“五进制”数转化为“七进制”数: __________
18.用“秦九韶算法”计算多项式 ,当 时的值的过程中,要经过
____________次乘法运算和_________次加法运算.
三、解答题
19.(本题满分13分)已知一个5次多项式为f(x)=4x5﹣3x3+2x2+5x+1,用秦九韶算法求这个多项式当x=2时的值
算法复习题
一、单项选择题1、衡量一个算法好坏的标准是()A.运行速度快 B.占用空间少 C.时间复杂度低 D.代码短2、选择排序算法的时间复杂度是()A.O(n2) B.O(nlogn) C.O(22) D.O(n)3、快速排序算法的平均时间复杂度是()A.O(n2) B.O(nlogn) C.O(22) D.O(n)4、快速排序算法是利用()实现的算法A.分治策略 B.动态规划法 C.贪心法 D.回溯法5、实现合并排序利用的算法是()A.分治策略 B. 动态规划法 C.贪心法 D.回溯法6、实现棋盘覆盖算法利用的算法是()A.分治策略 B. 动态规划法 C.贪心法 D.回溯法7、下列算法中通常以自底向上的方式求解最优解的是()A.备忘录法 B. 动态规划法 C.贪心法 D.回溯法8、最长公共子序列利用的算法是()A.分治策略 B. 动态规划法 C.贪心法 D.回溯法9、以下不可以使用分治法求解的是()A.棋盘覆盖问题 B.选择问题 C.归并排序 D.0/1背包问题10、下列算法不能解决0/1背包问题的是()A.贪心法 B.动态规划法 C.回溯法 D.分支限界法11、下面问题()不能使用贪心法解决。
A.单源最短路径问题 B.N皇后问题C.最小花费生成树问题 D.背包问题12、()是贪心算法与动态规划算法的共同点A.重叠自问题 B.构造最优解 C.贪心选择性质 D.最优子结构性质13、蛮力法所依赖的基本技术是()A.扫描技术 B.查找技术 C.分治技术 D.动态规划14、回溯法解旅行售货员问题时的解空间树是()A.子集树 B.排列树 C.深度优先生成树 D.广度优先生成树15、下列算法中通常以深度优先方式系统搜索问题的解是()A.备忘录法 B. 动态规划法 C.贪心法 D.回溯法16、.采用广度优先策略搜索的算法是()A.分支限界法B.动态规划法C.贪心法D.回溯法17、优先队列式分支限界法选取扩展结点的原则是()A.先进先出 B.后进后出 C.结点的优先级 D.随机18、回溯法的效率不依赖于下列哪些因素()A.满足显约束的值的个数B.计算约束函数的时间C.计算限界函数的时间D.确定解空间的时间19、下面哪种函数是回溯法中为避免无效搜索采取的策略()A.递归函数B.剪枝函数C. 随机数函数D.搜索函数20、下设函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在两个正常数c和n0,使得当n ≥n0时,有f (n )≤cg (n ),则记作()A .f (n )=O (g (n )) B.f (n )=Ω(g (n ))C.f (n )=⊙(g (n ))D.f(n)~g(n)21、下设函数f (n )和g (n )是定义在非负整数集合上的正函数,如果存在两个正常数c 和n0,使得当n ≥n0时,有f (n )≥cg (n ),则记作()A .f (n )=O (g (n )) B.f (n )=Ω(g (n ))C.f (n )=⊙(g (n ))D.f(n)~g(n)22、下面关于NP 问题说法正确的是()A .NP 问题都是不可能解决的问题B .P 类问题包含在NP 类问题中C .NP 完全问题是P 类问题的子类D .NP 类问题包含在P 类问题中23、下列哪些问题是典型的NP 完全问题()A .排序问题 B.N -后问题 C.0-1背包问题 D.旅行商问题24、下列哪个问题不是NP 完全问题()A .图着色问题 B.TSP 问题 C.哈密尔顿回路问题 D.最小生成树问题二、填空题1、算法的复杂性有___时间复杂性___和空间复杂性之分。
算法练习题-分章节-带答案
)算法练习题-分章节-带答案算法练习题---算法概述一、选择题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、A和C6、算法分析中,记号O表示(),记号Ω表示()。
A.渐进下界B.渐进上界C.非紧上界D.非紧下界7、以下关于渐进记号的性质是正确的有:()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))=⇔=8、记号O的定义正确的是()。
A. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤ f(n) ≤ cg(n) };B. O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n≥n0有:0≤ cg(n) ≤ f(n) };C. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有0 ≤f(n)<cg(n) };D. O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cg(n) < f(n) };9、记号Ω的定义正确的是()。
算法初步练习题(附详细答案解析)
算法初步练习题一、选择题:1.阅读下面的程序框图,则输出的S =A .14B .20C .30D .552.阅读图2所示的程序框图,运行相应的程序,输出的结果是A .1 B. 2 C. 3 D. 43.阅读右图所示的程序框图,运行相应的程序,输出的结果是A .2B .4C .8D .164.某程序框图如图所示,该程序运行后输出的k 的值是A .4B .5C .6D .75.执行右面的程序框图,输出的S 是3题 2题1题4题A .378-B .378C .418-D .4186.如图的程序框图表示的算法的功能是A .计算小于100的奇数的连乘积B .计算从1开始的连续奇数的连乘积C .从1开始的连续奇数的连乘积,当乘积大于100时,计算奇数的个数D .计算100531≥⨯⋅⋅⋅⨯⨯⨯n 时的最小的n 值.7.右图是把二进制数)2(11111化为十进制数的一个程序框图,判断框内应填入的 条件是 A .4i > B .4i ≤ C .5i > D .5i ≤8.某程序框图如图所示,则该程序运行后输出的B 等于 A .15 B .29 C .31 D .635题6题9.如果执行右边的程序框图,输入2,0.5x h =-=,那么输出的各个数的和等于 A .3 B .3.5 C .4 D .4.510.某店一个月的收入和支出总共记录了N 个数据1a ,2,,N a a ⋅⋅⋅,其中 收入记为 正数,支出记为负数。
该店用右边的程序框图计算月总收入S 和月 净盈利V ,那么在图中空白的判断框和处理框中,应分别填入下列四个选项中 的A .0,A V S T >=-B .0,A V S T <=-C .0,A V S T >=+D .0,A V S T <=+ 11. 如图1所示,是关于闰年的流程,则 以下年份是闰年的为A .1996年B .1998年C .2010年D .2100年12. 某流程如右上图所示,现输入如下四个函数,则可以输出的函数是11题A .2)(x x f =B .xx f 1)(=C .62ln )(-+=x x x fD .x x f sin )(=二、填空题:13.程序框图(即算法流程图)如图所示,其输出结果是_______. 14.执行右边的程序框图,输出的T = .14题12题13题15.下面的程序框图表示的算法的结果是 1616.阅读右上面的流程图,若输入6,1a b ==,则输出的结果是 217右面的程序框图,如果输入三个实数a ,b ,c ,要求输出这三个数中最大的数,那么在空白的判断框中,应该填入下面四个选项中的 ①c x > ②x c > ③C .c b > ④b c >15题三、解答题:18.已知数列{a n }的各项均为正数,观察程序框图,若10,5==k k 时,分别有2110115==S S 和 (1)试求数列{a n }的通项; (2)令m a n b b b b n +++=...,221求的值.参考答案1.C .【解读与点评】当1=i 时, S =1;当i =2时, S =5;循环下去,当i =3时, S =14; 当i =4时,S =30;本试题考查了程序框图的运用.2.D 【解读与点评】本题考查是算法的重新框图与算法的语句识别.易错点是 不懂得运行顺序.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值3n =; 再返回运行第三次可得12112S ==-,然后赋值4n =,判断可知此时2S =,故输出4n =.故选D .3.C 【解读与点评】本题考查是算法的重新框图与算法的语句识别.考查学生 运算求解能力.本题的易错点是要注意是先赋值再输出.当1,2n S ==代入程序中运行第一次是1S =-,然后赋值此时2n =;返回运 行第二次可得111(1)2S ==--,然后赋值4n =; 再返回运行第三次可得12112S ==-,然后赋值8n =,判断可知此时2S =,故输出8n =.4.A .【解读与点评】对于0,1,k s ==1k ∴=.对于1,3,2k s k ==∴=,则2,38,3k s k ==+∴=,后面是113,382,4k s k ==++∴=,不符合条件时输出 的4k =.此题是新课程新增内容,考查了程序语言的概念和基本的应用,通 过对程序语言的考查,充分体现了数学程序语言中循环语言的关键. 9.B .【解读与点评】循环9次,对应输出值如下表。
算法案例 习题(含答案)
算法案例 习题(含答案)一、单选题1.给出下列命题:①命题“ ”的否定是“ ”;②命题“若 ,则 ”的逆命题是真命题;③把 化为十进制为11;④“方程 表示椭圆”的充要条件是“ ”.其中正确命题的个数为( )A . 1B . 2C . 3D . 42.用秦九韶算法计算多项式65432692351712)(x x x x x x x f ++++-+=在4-=x 时的值时,3V 的值为( )A .-307B .-81C .19D .13.《周易》历来被人们视作儒家之首,它表现了古代中华民族对万事万物的深刻而不朴素的认识,是中华人文文化的基础,它反映出中国古代的二进制计数的思想方法,我们用近代术语解释为:把阳“—”当作数字“1”,把阴“——”当作数字“0”,则八卦所代表的数表示如下:依次类推,则六十四卦“屯”卦,符号“”表示的十进制是( )A . 18B . 17C . 16D . 154.在下列各数中,最大的数是( )A . 85(9)B . 210(6)C . 1000(4)D . 11111(2)5.二位进制数 化为十位进制数是( )A .B .C .D .6.“结绳计数”是远古时代的人最常用的计数方法,就是用打绳结的办法来计算物体的数量.如图所示的是一位猎人记录自己捕获猎物的个数,在从右向左依次排行的不同绳子上打结,满五进一.根据图示可知,猎人捕获猎物的个数是( )A . 123B . 86C . 66D . 387.我国南宋时期的数学家秦九韶是普州(现四川省安岳县)人,秦九韶在所著的《数书九章》中提出的多项式求值的秦九韶算法,至今仍是比较先进的算法,其算法如下:多项式函数 写为,即可用如图所示的程序框图来求某多项式的值.若输入 及 ,运行程序可以输出16,则 的值为( )A .B . 1或C . 1D . 2或8.下列各数中,最大的是( )A .B .C .D .9.用秦九韶算法计算多项式()f x = 653225238103,x x x x x x ++-+-=4-时, 4V 的值为A . 92B . 1529C . 602D . 148-二、填空题10.辗转相除法与更相减损术都是求两个正整数的最大公约数的有效算法,用这两种方法均可求得 和 的最大公约数为__________.11.请将以下用“更相减损术”求两个正整数a,b 的最大公约数的程序补充完整:INPUT “a,b=”;a,bWHILE a<>bIF a>b THENa=a-bELSE_________END IFWENDPRINT aEND12.把八进制数()()8102转化为三进制数为______________.13.11 001 ()2101=__________()10.14.用秦九韶算法求多项式f(x)=x 4-2x 3+3x 2-7x-5当x=4时的值,给出如下数据:①0 ②2 ③11 ④37 ⑤143其运算过程中(包括最终结果)会出现的数有____(只填序号).15.二进制数()210对应的十进制数是__________.16.把“五进制”数转化为“七进制”数: ()5321=__________()717.用“秦九韶算法”计算多项式()543254321f x x x x x x =+++++,当2x =时的值的过程中,要经过____________次乘法运算和_________次加法运算.18.三个数72,120,168的最大公约数是 ;三、解答题19.把110(5)转化为二进制数.20.(本题满分13分)已知一个5次多项式为f (x )=4x 5﹣3x 3+2x 2+5x+1,用秦九韶算法求这个多项式当x=2时的值21.某高中男子体育小组的50米跑成绩(单位:s )为:6.4,6.5,7.0,6.8,7.1,7.3,6.9,7.4,7.5,6.7,画出程序框图,从这些成绩中搜索出小于6.8s的成绩.22.试分别用辗转相除法和更相减损术求840与1764、440与556的最大公约数。
算法复习题选择题
算法复习题选择题一、选择题1. 下列哪种排序算法具有最差时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 堆排序D. 冒泡排序答案:D. 冒泡排序解析:冒泡排序是一种简单直观的排序算法,它的基本思想是通过不断比较相邻的两个元素,将较大的元素向右移动,较小的元素向左移动,直到整个序列按照从小到大的顺序排列。
冒泡排序的最差时间复杂度为O(n^2),当待排序序列已经有序时,冒泡排序的最坏情况就会出现,需要进行n-1趟排序,每趟比较n-1次。
2. 下列哪种排序算法不属于比较排序?A. 计数排序B. 插入排序C. 选择排序D. 希尔排序答案:A. 计数排序解析:计数排序是一种非比较排序算法,它通过确定每个元素之前有多少个元素小于它来确定元素的位置。
计数排序的时间复杂度为O(n+k),其中n为待排序序列的长度,k为待排序序列中的最大值大小。
3. 下列哪个算法通常用来解决最短路径问题?A. Dijkstra算法B. Kruskal算法C. Prim算法D. Floyd-Warshall算法答案:A. Dijkstra算法解析:Dijkstra算法是一种用于求解单源最短路径问题的算法。
它基于贪心策略,通过选择当前最短路径上的顶点来逐步扩展最短路径树。
Dijkstra算法的时间复杂度为O(V^2),其中V为图的顶点数。
4. 下列哪种数据结构通常用于实现图的遍历?A. 队列B. 栈C. 链表D. 数组答案:B. 栈解析:图的遍历包括深度优先遍历和广度优先遍历两种方式。
其中,深度优先遍历(DFS)通常使用栈来实现,广度优先遍历(BFS)通常使用队列来实现。
栈是一种后进先出(LIFO)的数据结构,适合将深度优先遍历的节点存储起来。
5. 下列哪种查找算法具有最坏时间复杂度为O(log n)?A. 二分查找B. 线性查找C. 哈希查找D. 顺序查找答案:A. 二分查找解析:二分查找是一种基于分治思想的查找算法,它通过将查找区间逐步缩小为左右两个子区间,并与目标元素进行比较,从而确定目标元素的位置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计与分析试卷一、填空题(20分,每空2分)1、算法的性质包括输入、输出、确定性、有限性。
2、动态规划算法的基本思想就将待求问题分解成若干个子问题、先求解子问题,然后从这些子问题的解得到原问题的解。
3、设计动态规划算法的4个步骤:(1)找出最优解的性质,并刻画其结构特征。
(2)递归地定义最优值。
(3)以自底向上的方式计算出最优值。
(4)根据计算最优值得到的信息,构造最优解。
4、流水作业调度问题的johnson算法:(1)令N1={i|ai<bi},N2={i|ai>=bj};(2)将N1中作业依ai的ai的非减序排序;将N2中作业依bi的非增序排序。
5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}。
6、最优二叉搜索树即是最小平均查找长度的二叉搜索树。
二、综合题(50分)1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)=20(5分)2、由流水作业调度问题的最优子结构性质可知,T(N,0)=min{ai+T(N-{i},bi)}(1=<i<=n)(5分)3、最大子段和问题的简单算法(10分)int maxsum(int n,int*a,int&bestj){Int sum=0;for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)int thissum=0;for(int k=i;k<=j;k++)this sum+=a[k];if(thissum>sum){sum=thissum;besti=i;bestj=j;}}return sum;}4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree?(15分)V oid OptimalBinarysearchTree(int a,int n,int**m,int**w){for(int i=0;i<=n;i++){w[i+1][i]=a[i];m[i+1][i]=0;}for(int r=0;r<n;r++)for(int i=1;i<=n-r;i++){int j=i+r;w[i][j]=w[i][j-1]+a[j]+b[j];m[i][j]=m[i+1][j];s[i][j]=i;for(int k=i+1;k<=j;k++){int t=m[i][k-1]+m[k+1][j];if(t<m[i][j]){m[i][j]=t;s[i][j]=k;}}m[i][j]=t;s[i][j]=k;}}5、设n=4,(a1,a2,a3,a4)=(3,4,8,10),(b1,b2,b3,b4)=(6,2,9,15)用两种方法求4个作业的最优调度方案并计算其最优值?(15分)法一:min(ai,bj)<=min(aj,bi)因为min(a1,b2)<=min(a2,b1)所以1→2(先1后2)由min(a1,b3)<=min(a3,b1)得1→3(先1后3)同理可得:最后为1→3→4→2法二:johnson算法思想N1={1,3,4}N2={2}N¹1={1,3,4}N¹2={2}所以N¹1→N¹2得:1→3→4→2三、简答题(30分)1、将所给定序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有哪三种情形?(10分)答:(1)a[1:n]的最大子段和与a[1:n/2]的最大子段和相同。
(2)a[1:n]的最大子段和与的最大子段a[n/2+1:n]和相同。
(3)a[1:n]的最大子段和为∑ak(i=<k<=J),且1<=i<=n/2,n/2+1<=J<=n。
2、由0——1背包问题的最优子结构性质,可以对m(i,j)建立怎样的递归式?(10分)(1)m(i,j)=max{m(i+1,j),m(i+1,j-wi)+ui}(j>=wi)或则m(i,j)=m(i+1,j)(0<=j<wi)(2)m(n,j)=un j>=wn或则m(n,j)=00<=j<wn3、0——1背包求最优值的步骤分为哪几步?(10分)(1)、p[n+1]={(0,0)}(2)、由p[i+1]→q[i+1],q[i+1]=p[i+1]⊕(wi,vi)(3)、Mij=p[i+1]∪q[i+1]Pi=Mij——其中的受控点=p[i+1]∪q[i+1]——其中的受控(4)、重复(2)-(3)直到求出P[1]。
4、请说明算法的五个基本特性,并进行简要的分析(5分)答:算法的五个基本特性如下:①确定性算法的每一种运算必须要有确切的定义,即每一种运算应该执行何种动作必须是相当清楚的、无二义性的。
③输入一个算法有0个或多个输人,这些输人是在算法开始之前给出的量,它取自特定的对象集合。
④输出一个算法产生一个或多个输出,这些输出是同输人有某种特定关系的量。
⑤有限性一个算法总是在执行了有穷步的运算之后能够终止,且每一步都可在有穷时间内完成。
这里的有穷的概念不是纯数学的,而是在实际上是合理的,可以接受的。
凡是算法,都必须满足以上五条特性。
算法习题: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归并排序D0/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)。
A、最小堆B、最大堆C、栈D、数组16.最长公共子序列算法利用的算法是(B)。
A、分支界限法B、动态规划法C、贪心法D、回溯法17.实现棋盘覆盖算法利用的算法是(A)。
A、分治法B、动态规划法C、贪心法D、回溯法18.下面是贪心算法的基本要素的是(C)。
A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解19.回溯法的效率不依赖于下列哪些因素(D)A.满足显约束的值的个数B.计算约束函数的时间C.计算限界函数的时间D.确定解空间的时间20.下面哪种函数是回溯法中为避免无效搜索采取的策略(B)A.递归函数 B.剪枝函数C。
随机数函数 D.搜索函数21、下面关于NP问题说法正确的是(B)A NP问题都是不可能解决的问题B P类问题包含在NP类问题中C NP完全问题是P类问题的子集D NP类问题包含在P类问题中22、蒙特卡罗算法是(B)的一种。
A、分支界限算法B、概率算法C、贪心算法D、回溯算法23.下列哪一种算法不是随机化算法(C)A.蒙特卡罗算法B.拉斯维加斯算法C.动态规划算法D.舍伍德算法24.(D)是贪心算法与动态规划算法的共同点。
A、重叠子问题B、构造最优解C、贪心选择性质D、最优子结构性质25.矩阵连乘问题的算法可由(B)设计实现。
A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法26.分支限界法解旅行售货员问题时,活结点表的组织形式是(A)。
A、最小堆B、最大堆C、栈D、数组27、Strassen矩阵乘法是利用(A)实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法29、使用分治法求解不需要满足的条件是(A)。
A子问题必须是一样的B子问题不能够重复C子问题的解可以合并D原问题和子问题使用相同的方法解30、下面问题(B)不能使用贪心法解决。
A单源最短路径问题B N皇后问题C最小花费生成树问题D背包问题31、下列算法中不能解决0/1背包问题的是(A)A贪心法B动态规划C回溯法D分支限界法32、回溯法搜索状态空间树是按照(C)的顺序。
A中序遍历B广度优先遍历C深度优先遍历D层次优先遍历33、下列随机算法中运行时有时候成功有时候失败的是(C)A数值概率算法B舍伍德算法C拉斯维加斯算法D蒙特卡罗算法34.实现合并排序利用的算法是(A)。
A、分治策略B、动态规划法C、贪心法D、回溯法35.下列是动态规划算法基本要素的是(D)。
A、定义最优解B、构造最优解C、算出最优解D、子问题重叠性质36.下列算法中通常以自底向下的方式求解最优解的是(B)。
A、分治法B、动态规划法C、贪心法D、回溯法37.采用广度优先策略搜索的算法是(A)。
A、分支界限法B、动态规划法C、贪心法D、回溯法38、合并排序算法是利用(A)实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法39、在下列算法中得到的解未必正确的是(B)。
A、蒙特卡罗算法B、拉斯维加斯算法C、舍伍德算法D、数值概率算法40、背包问题的贪心算法所需的计算时间为(B)A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)41.实现大整数的乘法是利用的算法(C)。
A、贪心法B、动态规划法C、分治策略D、回溯法42.0-1背包问题的回溯算法所需的计算时间为(A)A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)43.采用最大效益优先搜索方式的算法是(A)。
A、分支界限法B、动态规划法C、贪心法D、回溯法44.贪心算法与动态规划算法的主要区别是(B)。