算法试题整理
计算机算法试题(含答案)
计算机算法试题(含答案)算法设计与分析试卷一、填空题(20分,每空2分)1、算法的性质包括输入、输出、___、有限性。
2、动态规划算法的基本思想就将待求问题_____、先求解子问题,然后从这些子问题的解得到原问题的解。
3、设计动态规划算法的4个步骤:(1)找出____,并刻画其结构特征。
(2)_______。
(3)_______。
(4)根据计算最优值得到的信息,_______。
4、流水作业调度问题的johnson算法:(1)令N1=___,N2={i|ai>=bj};(2)将N1中作业依ai的___。
5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式_____。
6、最优二叉搜索树即是___的二叉搜索树。
二、综合题(50分)1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)____(5分)2、由流水作业调度问题的最优子结构性质可知,T(N,0)=______(5分)3、最大子段和问题的简单算法(10分)int maxsum(int n,int *a,int & bestj){intsum=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++)_____;if(thissum>sum){sum=thissum;______;bestj=j;}} return sum;}4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree (15分)Void 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]=____;}for(int r=0;r<n;r++)< p="">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]=______;s[i][j]=i;for(int k=i+1;k<=j;k++){int t=m[i][k-1]+m[k+1][j];if(_____) {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分)三、简答题(30分)1、将所给定序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有哪三种情形(10分)答:2、由0——1背包问题的最优子结构性质,可以对m(i,j)建立怎样的递归式 (10分)3、0——1背包求最优值的步骤分为哪几步(10分)参考答案:填空题:确定性分解成若干个子问题最优解的性质递归地定义最优值以自底向上的方式计算出最优值构造最优解 {i|ai<="" p="">依bi的非增序排序min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}最小平均查找长度综合题:20 min{ai+T(N-{i},bi)}(1=<i<=n) 0="" besti="i" m[i+1][j]="" p="" t<m[i][j]<="" thissum+="a[k]">法一: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}N11={1,3,4} N12={2}所以N11→N12得:1→3→4→2简答题:1 、(1)a[1:n]的最大子段和与a[1:n/2]的最大子段和相同。
算法初步测试题及答案
算法初步测试题及答案work Information Technology Company.2020YEAR2第一章 算法初步一、选择题1.看下面的四段话,其中是解决问题的算法的是( ).A .把高一5班的同学分成两组,高个子参加篮球赛,矮个子参加拔河比赛B .把高一5班的同学分成两组,身高达到170 cm 的参加篮球赛,不足170 cm 的参加拔河比赛C .把a ,b 的值代入x =ab ,求方程ax =b 的解D .从2开始写起,后一个数为前一个数与2的和,不断地写,写出所有偶数2.任何一个算法都必须有的基本结构是( ). A .顺序结构 B .条件结构 C .循环结构D .三个都有3.右边的程序框图(如图所示),能判断任意输入的整数x 的奇偶性:其中判断框内的条件是( ).A .m =0B .x =0C .x =1D .m =14.给出以下一个算法的程序框图(如图所示),该程序框图的功能是( ).A .求输出a ,b ,c 三数的最大数B .求输出a ,b ,c 三数的最小数C .将a ,b ,c 按从小到大排列D .将a ,b ,c 按从大到小排列5.右图给出的是计算21+41+61+ … +201的值的 一个程序框图,其中判断框内应填入的条件是( ).A .i >10B .i <10C .i >20D .i <206.直到型循环结构为( ).ABC D7.下列给出的赋值语句中正确的是().A.4=M B.M=-MC.2B=A-3 D.x+y=08.右边程序执行后输出的结果是().A.-1 B.0 C.1 D.29.我国古代数学发展曾经处于世界领先水平,特别是宋、元时期的“算法”,其中可以同欧几里德辗转相除法相媲美的是().A.割圆术B.更相减损术C.秦九韶算法D.孙子乘余定理10.下面是一个算法的程序.如果输入的x的值是20,则输出的y的值是().A.100 B.50 C.25 D.150二、填空题11.下列关于算法的说法正确的是. (填上正确的序号)①某算法可以无止境地运算下去②一个问题的算法步骤不能超过1万次③完成一件事情的算法有且只有一种④设计算法要本着简单方便可操作的原则12.下列算法的功能是.S1输入A,B;(A,B均为数据)S2A=A+B;S3B=A-B;S4A=A-B;S5输出A,B.13.如图,输出的结果是.14 如图,输出的结果是.15 已知函数y=⎩⎨⎧-+,x,x232流程图表示的是给定x值,求其相应函数值的算法.请将该流程图补充完整.其中①处应填,②处应填.若输入x=3,则输出结果为.x≤3316.如图,输出结果为.三、解答题17.某小区每月向居民收取卫生费,计费方法是:3人和3人以下的住户,每户收取5元;超过3人的住户,每超出1人加收1.2元.设计一个算法,根据输入的人数,计算应收取的卫生费,并画出程序框图.18.编写程序,计算一个学生数学、语文、英语三门课的平均成绩.19.假定在银行中存款10 000元,按11.25%的利率,一年后连本带息将变为11 125元,若将此款继续存人银行,试问多长时间就会连本带利翻一番请用直到型和当型两种语句写出程序.20.用辗转相除法求91和49的最大公约数.第一章算法初步参考答案一、选择题1.解析:A.何为高个子,何为矮个子,标准不明确.C.当a=0时公式是无效的.D.非有限步可以完成.只有B符合算法的三个要求,所以答案是B.解:选B.2.A 解析:顺序结构是最简单的结构,也是最基本的结构.3.A 解析:x除以2,如余数为0,则x为偶数;余数不为0,则x为奇数.4.B 解析:从程序框图可知:输出的是三个数中的最小值.5.A 解析:这是一个10项求和问题.6.B 解析:直到型循环在执行了一次循环体之后,对控制循环条件进行判断,当条件不满足时反复做,满足则停止.7.B 解析:依据赋值语句的概念,选B是正确的.8.B 解析:程序执行后输出的结果是0,故选B.9.B10.D 解析:∵20>5,∴y=20×7.5=150,∴选 D.二、填空题11.答案:④.解析:由算法的特点所确定.12.答案:实现数据A,B的互换.解析:利用赋值语句的意义与题中算法的步骤进行分析.13.答案:12. 解析:m=2,p=7,m=12.4x=10 000r=11.25/100y=0WHILE x<20 000 y=y+1 x=10 000y=0r=11.25/100 Doy=y+114.答案:105. 解析:T=1,I=1,T=1,I=3,不满足条件;T=3,I=5,不满足条件;T=15,I=7,不满足条件;T=105,I=9,满足条件.输出T.15.答案:①x≤3;②y=-3x2;5. 解析:根据给出函数的解析式分析可填出.16.答案:9.解析:逐个取值计算.三、解答题17.解析:根据题意,可考虑用条件结构来进行算法设计.解:算法步骤:第一步,输入人数x,设收取的卫生费为m(元).第二步,判断x与3的大小.若x>3,则费用为m=5+(x-3)×1.2;若x≤3,则费用为m=5.第三步,输出m.18.分析:先写出算法,画出程序框图,再进行编程.程序框图:程序:19.解:用当型用直到型20.解析:由 91=49×1+42,得 42=91-49×1.因为余数42≠0,所以由辗转相除法,得 49=42×1+7,即 7=49-42×1; 42=7×6,即 0=42-7×6.所以,91和49的最大公约数等于7.5。
设计与算法分析考试题库
设计与算法分析考试题库一、选择题(每题2分,共20分)1. 在算法分析中,时间复杂度用来衡量算法的什么?A. 可读性B. 执行速度C. 资源消耗D. 可维护性2. 以下哪个排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 选择排序D. 堆排序3. 动态规划与分治算法的主要区别是什么?A. 递归使用B. 子问题重叠C. 问题分解方式D. 算法效率4. 递归算法的基本原理是什么?A. 循环调用B. 重复执行C. 问题分解D. 迭代求解5. 在图算法中,深度优先搜索(DFS)和广度优先搜索(BFS)的主要区别在于?A. 搜索顺序B. 搜索深度C. 使用的数据结构D. 搜索效率6. 哈希表的冲突解决方法中,开放定址法和链地址法的主要区别是什么?A. 存储方式B. 冲突处理机制C. 访问速度D. 空间利用率7. 贪心算法在解决优化问题时,其选择的策略是?A. 随机选择B. 局部最优C. 全局最优D. 动态选择8. 以下哪个算法是解决最近公共祖先问题的?A. 二分查找B. 欧拉路径C. 弗洛伊德算法D. 树的深度优先搜索9. 算法的时间复杂度为O(1)表示该算法的执行时间与输入规模的大小?A. 成正比B. 成反比C. 无关D. 指数关系10. 在大O符号中,O(1)、O(log n)、O(n)、O(n log n)、O(n^2)、O(2^n),按算法效率从高到低排序正确的是?A. O(1), O(log n), O(n), O(n log n), O(n^2), O(2^n)B. O(2^n), O(n^2), O(n log n), O(n), O(log n), O(1)C. O(1), O(log n), O(n log n), O(n), O(n^2), O(2^n)D. O(1), O(n), O(log n), O(n log n), O(n^2), O(2^n)二、简答题(每题10分,共30分)11. 简述二分查找算法的基本思想及其时间复杂度。
算法复习题
算法复习试题一、名词解释:1、算法:就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。
2、贪心算法:能够得到某种量度意义下的最优解的分级处理方法称为贪心算法。
3、分治法:分治法的求解思想就是把整个问题分成若干个小问题后分的治之4、递归过程:一个递归过程的执行类似于多个子程序的嵌套调用,递归过程是自己调用自己本身代码。
递归算法的特点:思路清晰,算法的描述简洁且易理解。
5、集合:在研究某一类对象时,可把这类对象的整体称为集合。
6、生成树:设G=(V,E)是一个无向连通图。
如果G的生成子图T=(V,E')是一棵树,则称T是G的一棵生成树。
7、算法具有以下5个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
8、迭代法:称辗转法,是一种不断用变量的旧值递推出新值的解决问题的方法。
9、贪婪法: 是一种不追求最优解,只希望得到较为满意解的方法。
贪婪法不要回溯10、动态规划:是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。
11、分支限界法:是一种用于求解组合优化问题的排除非解的搜索算法。
12、树:树是一个或多个结点的有限集合。
12、二元树:它是结点的有限集合,它或者为空,或者由一个根和两棵树(左子树和右子树)的不相交的二元树所组成。
13、二分检索树:T是一棵二元树,它或者为空,或者其每个结点含有一个可比较大小的数据元素。
14、图:图是数据结构,一个图G是由称之为结点V和边E的两个集合组成的15、最优解:使目标函数取极值(极大值或极小值)的可行解。
算法期末考试题及答案
算法期末考试题及答案一、选择题(每题2分,共20分)1. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序答案:C2. 在二叉树的遍历算法中,中序遍历的顺序是:A. 先序B. 后序C. 中序D. 层序答案:C3. 动态规划与分治法算法的主要区别在于:A. 问题分解的方式B. 问题解决的顺序C. 存储中间结果的方式D. 问题规模的大小答案:C4. 哈希表的冲突解决方法不包括:A. 开放寻址法B. 链地址法C. 线性探测法D. 排序答案:D5. 以下哪个是图的遍历算法?A. 归并排序B. 深度优先搜索C. 快速排序D. 堆排序答案:B6. 贪心算法的特点是:A. 每一步都选择最优解B. 每一步都选择局部最优解C. 每一步都选择最差解D. 每一步都随机选择解答案:B7. 在算法分析中,时间复杂度O(1)表示:A. 常数时间B. 线性时间C. 对数时间D. 多项式时间答案:A8. 以下哪个是排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 冒泡排序D. 堆排序答案:C9. 递归算法的基本原理是:A. 重复执行B. 分而治之C. 循环调用D. 迭代求解答案:B10. 以下哪个是算法的时间复杂度为O(log n)的典型例子?A. 二分查找B. 线性查找C. 冒泡排序D. 快速排序答案:A二、简答题(每题10分,共20分)1. 简述快速排序算法的基本思想及其时间复杂度。
答案:快速排序是一种分治法的排序算法。
其基本思想是选择一个元素作为“基准”(pivot),然后将数组分为两部分,一部分包含所有小于基准的元素,另一部分包含所有大于基准的元素。
这个过程称为分区(partitioning)。
之后,递归地对这两部分进行快速排序。
快速排序的平均时间复杂度为O(n log n),但在最坏情况下(例如数组已经排序或所有元素相等)时间复杂度为O(n^2)。
2. 解释什么是动态规划,并给出一个动态规划问题的例子。
算法测试题及答案
算法测试题及答案一、选择题1. 以下哪个选项不是排序算法?A. 冒泡排序B. 选择排序C. 快速排序D. 深度优先搜索答案:D2. 在二叉树中,深度为5的节点最多有多少个?A. 16B. 32C. 64D. 31答案:D二、填空题1. 递归算法的基本思想是 _ ,即把问题分解成相同但规模更小的问题。
答案:分而治之2. 动态规划与分治法的不同之处在于动态规划会 _ ,而分治法则不会。
答案:存储子问题的解三、简答题1. 请简述什么是贪心算法,并给出一个例子。
答案:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好或最优的算法策略。
例如,活动选择问题,给定一系列活动,每个活动都有一个开始时间和结束时间,贪心算法会按照结束时间的早晚来选择活动,从而最大化参与活动的数量。
2. 描述快速排序算法的基本思想。
答案:快速排序算法是一种分治策略,基本思想是选择一个元素作为“基准”(pivot),然后将数组分为两个子数组,一个包含所有小于基准的元素,另一个包含所有大于基准的元素。
这个过程称为分区(partitioning)。
之后,递归地将分区过程应用到两个子数组上,直到每个子数组只有一个元素或为空。
四、计算题1. 给定一个数组 [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5],请使用快速排序算法对其进行排序,并给出排序后的数组。
答案:使用快速排序算法对给定数组进行排序后,得到的数组为 [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]。
2. 假设有一个二叉搜索树,其根节点的值为10,现在要删除值为5的节点,请描述删除过程。
答案:删除二叉搜索树中的节点分为三种情况:- 情况1:要删除的节点没有子节点,直接删除该节点。
- 情况2:要删除的节点只有一个子节点,用其子节点替换该节点。
- 情况3:要删除的节点有两个子节点,找到该节点的直接前驱或直接后继,用其值替换要删除的节点,然后删除直接前驱或直接后继。
(完整word版)计算机算法设计分析试题及答案
算法设计与分析试卷一、填空题(20分,每空2分)1、算法的性质包括输入、输出、___、有限性。
2、动态规划算法的基本思想就将待求问题_____、先求解子问题,然后从这些子问题的解得到原问题的解。
3、设计动态规划算法的4个步骤:(1)找出____,并刻画其结构特征。
(2)_______。
(3)_______。
(4)根据计算最优值得到的信息,_______。
4、流水作业调度问题的johnson算法:(1)令N1=___,N2={i|ai>=bj};(2)将N1中作业依ai的___。
5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式_____。
6、最优二叉搜索树即是___的二叉搜索树。
二、综合题(50分)1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)____(5分)2、由流水作业调度问题的最优子结构性质可知,T(N,0)=______(5分)3、最大子段和问题的简单算法(10分)int maxsum(int n,int *a,int & bestj){intsum=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++)_____;if(thissum>sum){sum=thissum;______;bestj=j;}}return sum;}4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree? (15分)Void 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]=____;} 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]=______;s[i][j]=i;for(int k=i+1;k<=j;k++){int t=m[i][k-1]+m[k+1][j];if(_____) {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分)三、简答题(30分)1、将所给定序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有哪三种情形?(10分)答:2、由0——1背包问题的最优子结构性质,可以对m(i,j)建立怎样的递归式? (10分)3、0——1背包求最优值的步骤分为哪几步?(10分)参考答案:填空题:确定性分解成若干个子问题最优解的性质递归地定义最优值以自底向上的方式计算出最优值构造最优解{i|ai<bi} ai的非减序排序;将N2中作业依bi的非增序排序min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}最小平均查找长度综合题:20 min{ai+T(N-{i},bi)}(1=<i<=n) thissum+=a[k] besti=i 0 m[i+1][j] t<m[i][j]法一: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简答题:1 、(1)a[1:n]的最大子段和与a[1:n/2]的最大子段和相同。
算法基础试题及答案
算法基础试题及答案一、单项选择题(每题2分,共10分)1. 以下哪个选项是算法的基本特征之一?A. 有穷性B. 可行性C. 确定性D. 以上都是答案:D2. 在算法设计中,以下哪个步骤是不必要的?A. 问题定义B. 算法描述C. 算法实现D. 算法测试答案:D3. 算法的时间复杂度通常用来描述什么?A. 算法的运行时间B. 算法的空间需求C. 算法的执行步骤数量D. 算法的输入数据大小答案:A4. 以下哪个不是算法设计的基本方法?A. 递归B. 排序C. 搜索D. 迭代答案:B5. 在算法分析中,大O符号表示什么?A. 算法执行的时间B. 算法执行的空间C. 算法执行的最坏情况D. 算法执行的平均情况答案:C二、填空题(每题2分,共10分)1. 算法的输入输出定义了算法的______,算法的步骤定义了算法的______。
答案:功能;实现2. 算法的时间复杂度和空间复杂度是衡量算法______的两个重要指标。
答案:效率3. 在算法设计中,______是一种通过重复执行代码块来实现的算法结构。
答案:循环4. 递归算法通常包括两个基本部分:______和______。
答案:基本情况;递归情况5. 在算法分析中,______复杂度描述了算法执行过程中所需的存储空间。
答案:空间三、简答题(每题5分,共20分)1. 请简述算法的五个基本特征。
答案:算法的五个基本特征包括有穷性、确定性、可行性、输入和输出。
有穷性指算法必须在执行有限步骤后结束;确定性指算法的每一步都必须有明确的定义;可行性指算法的每一步都必须足够基本,以至于可以精确地执行;输入指算法有0个或多个输入,以描述运算的对象和初始条件;输出指算法至少有一个输出,输出表示算法运行的结果。
2. 算法的时间复杂度和空间复杂度有什么区别?答案:时间复杂度主要关注算法执行所需的时间,它通常与算法中操作的数量有关,而空间复杂度则关注算法执行过程中所需的存储空间。
算法测试题
算法测试题一、选择题1. 以下哪个不是排序算法?A. 冒泡排序B. 快速排序C. 深度优先搜索D. 归并排序2. 在二叉树中,深度为2的节点有多少个?A. 1B. 2C. 4D. 无法确定3. 动态规划通常用于解决以下哪种问题?A. 线性问题B. 组合问题C. 排序问题D. 搜索问题4. 哈希表的主要时间复杂度是:A. O(1)B. O(log n)C. O(n)D. O(n^2)5. 在图论中,Dijkstra算法用于解决以下哪种问题?A. 最短路径问题B. 最大流问题C. 最小生成树问题D. 拓扑排序问题二、简答题1. 解释什么是贪心算法,并给出一个实际应用的例子。
2. 描述快速排序算法的基本思想,并简述其时间复杂度。
3. 什么是递归?请给出一个递归函数的示例,并解释其工作原理。
三、编程题1. 编写一个函数,实现冒泡排序算法,并对一个整数数组进行排序。
输入:`[5, 3, 8, 4, 2]`输出:一个按升序排列的数组。
2. 实现一个函数,使用深度优先搜索(DFS)遍历一个无向图,并返回所有顶点的遍历顺序。
3. 给定一个字符串,请编写一个函数来检查它是否是回文,忽略空格、标点符号和大小写。
4. 编写一个函数,实现Dijkstra算法,找到图中单个源点到所有其他顶点的最短路径。
5. 给定一个整数数组,请实现一个函数来找到最长递增子序列的长度。
四、分析题1. 比较和分析快速排序和归并排序的时间复杂度,并讨论它们在实际应用中的优缺点。
2. 解释动态规划与分治算法的区别,并给出一个动态规划问题的例子,说明其解决方案。
五、开放性问题1. 如何使用算法来解决实际生活中的优化问题?请给出一个具体的例子,并描述你将如何设计算法来解决它。
2. 在处理大数据集时,算法的选择对性能有何影响?请讨论并给出一个大数据集处理的算法选择示例。
请注意,以上题目仅供测试使用,具体实现和解答需要根据实际编程语言和环境进行调整。
考研算法试题及答案详解
考研算法试题及答案详解一、单项选择题1. 以下哪个算法的时间复杂度是O(nlogn)?A. 冒泡排序B. 快速排序C. 插入排序D. 选择排序答案:B2. 在图的遍历算法中,深度优先搜索(DFS)使用的是哪种数据结构?A. 队列B. 栈C. 链表D. 堆答案:B二、填空题1. 在动态规划中,状态转移方程通常表示为:\[ dp[i] =\min(dp[i], dp[j] + cost[i][j]) \],其中\[ cost[i][j] \]表示从状态\[ j \]到状态\[ i \]的转移代价。
答案:\[ \min \]2. 哈希表的平均查找时间复杂度是O(1),最坏情况下的时间复杂度是O(n),其中n是哈希表中元素的数量。
三、解答题1. 请描述二叉树的前序遍历算法。
答案:二叉树的前序遍历算法首先访问根节点,然后递归遍历左子树,最后递归遍历右子树。
2. 给定一个无向图,如何使用Floyd-Warshall算法计算图中所有顶点对之间的最短路径?答案:Floyd-Warshall算法是一种动态规划算法,用于在加权图中找到所有顶点对之间的最短路径。
算法步骤如下:- 初始化距离矩阵dist,其中dist[i][j]表示顶点i到顶点j的最短路径长度。
- 对于每个顶点k,更新dist[i][j],如果通过k的路径更短,则更新dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])。
- 遍历所有顶点k,更新dist[i][j]。
四、编程题1. 编写一个函数,实现字符串的反转。
答案:```pythondef reverse_string(s):return s[::-1]```2. 给定一个整数数组,请编写一个函数,找出数组中第二大的数。
答案:```pythondef find_second_max(nums):first_max = second_max = float('-inf')for num in nums:if num > first_max:second_max = first_maxfirst_max = numelif num > second_max and num != first_max:second_max = numreturn second_max ```。
算法初步测试题(1)
必修3第一章考测题(1)一、选择题1.下面对算法描述正确的一项是:( )A .算法只能用自然语言来描述B .算法只能用图形方式来表示C .同一问题可以有不同的算法D .同一问题的算法不同,结果必然不同2.对赋值语句的描述正确的是 ( )①可以给变量提供初值 ②将表达式的值赋给变量③可以给一个变量重复赋值 ④不能给同一变量重复赋值A .①②③B .①②C .②③④D .①②④3.将两个数a=8,b=17下面语句正确一组是 (A .B .C .D .4.下面程序运行时输出的结果是( ) x=5 y=6 PRINT x +y=11 END A.x +y=11 B.11 C.xy=11 D.出错信息 5.图中程序运行后输出的结果为 ( ) (A )3 43 (B ) 43 3 (C )-18 16 (D )16 -186.图中程序是计算2+3+4+5+6的值的程序。
在WHILE 后的①处和在s=s+i 之后的②处所就填写的语句可以是A .①i>1 ②i=i -1B .①i>1 ②i=i+1C .①i>=1 ②i=i+1D .①i>=1 ②i=i -17.下列给出的赋值语句中正确的是( )A .4=MB .M=-MC .B=A=3D .x+y=08.在下图中,直到型循环结构为 ()A .B .C . D9.用“辗转相除法”求得456和357的最大公约数是( )A .3B .9C .17D .51 10.右边程序的输出结果为 ( ) A . 3,4 B . 7,7 C . 7,8 D . 7,11IF 10a < THEN 2y a =* ELSE y a a =*PRINT y11.右图给出的是计算0101614121+⋅⋅⋅+++的值的一个程序框图, 其中判断框内应填入的条件是 ( )A . i<=100B .i>100C .i>50D .i<=5012.当3=a 时,下面的程序段输出的y 是( )A .9B .3C .10D .6 13.右边程序执行后输出的结果是( ) A.1- B .0 C .1 D .2 11A. 1, 2 ,3B. 2, 3, 1C. 2, 3, 2D. 3, 2, 1二、填空题12!n 的程序补充完整13.上右程序运行后输出的结果为_______________.14.用“秦九韶算法”计算多项式12345)(2345+++++=x x x x xx f ,当x=2时的值的过程中, 要经过 次乘法运算和 次加法运算。
算法试题及答案
算法试题及答案一、选择题1. 以下哪个选项不是排序算法?A. 快速排序B. 归并排序C. 冒泡排序D. 深度优先搜索答案:D2. 在二叉树的遍历算法中,中序遍历的顺序是什么?A. 根-左-右B. 左-根-右C. 右-根-左D. 根-右-左答案:B二、填空题1. 在图论中,一个图中的顶点数为n,边数为m,那么这个图的邻接矩阵的维度是________。
答案:n×n2. 动态规划算法的核心是________。
答案:最优子结构三、简答题1. 请简述贪心算法和动态规划算法的区别。
答案:贪心算法在每一步选择局部最优解,而不考虑全局最优解;动态规划算法则是将问题分解成子问题,通过求解子问题的最优解来构建原问题的最优解。
2. 什么是分治算法?请举例说明。
答案:分治算法是一种递归算法,它将问题分解成更小的子问题,递归求解子问题,然后将子问题的解合并以得到原问题的解。
例如,快速排序就是一种分治算法,它通过选择一个基准值,将数组分成两部分,一部分比基准值小,另一部分比基准值大,然后递归地对这两部分进行快速排序。
四、编程题1. 编写一个函数,实现字符串的反转。
答案:```pythondef reverse_string(s):return s[::-1]```2. 给定一个整数数组,请编写一个函数,找出数组中第二大的数。
答案:```pythondef find_second_max(nums):first_max = second_max = float('-inf')for num in nums:if num > first_max:second_max = first_maxfirst_max = numelif num > second_max and num != first_max:second_max = numreturn second_max```。
简单算法试题汇总 收藏
简单算法试题汇总收藏1、键盘输入x,y,求下面算数表达式的值x+a%3*(x+y)%2/42、输出***************************;very good***************************3、输入一个华氏温度,要求输出摄氏温度。
公式为c=5/9(F-32)4、设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆柱体体积。
5、从键盘输入整数x、y,计算出x2 + x –y 以及2πx + πy2,并将结果显示在屏幕上。
6、已知公鸡5 元一只,母鸡3 元一只,雏鸡三只一元,问花100 元买100 只,应各有几只。
7、编写一个程序,当用户输入两个时刻(如按照“时、分、秒”格式进行输入)以后,求出这两个时刻的时间差(按秒计算)并打印到屏幕上。
8、计算1加到100。
9、用程序验证100 以内的奇整数,其平方被8 除余数为1。
10、猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上吃前一天剩下的一半零一个。
到第十天早上想吃时,见只剩下一个桃子了。
求第一天摘了多少桃子。
11、打印以下图形***************12、小明和他爸爸围着花园散步,小明步长54厘米,爸爸步长72厘米,从同一地点出发绕花园一周,共留下60个脚印,其中脚印有重合的,打印所有情况13、某百货公司为了促销,采用购物打折的办法。
(1)在1000元以上者,按九五折优惠;(2)在2000元以上者,按九折优惠;(3)在3000元以上者,按八五折优惠;(4)在5000元以上者,按八折优惠。
编写程序,输入购物款数,计算并输出优惠价。
(要求用switch语句编写)14、编写程序,计算s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。
15、编循环程序,负责显示出如下“图形”************************************16、一堆鸡蛋,3个3个数剩余2个,5个5个数剩余1个,7个7个数剩余3个,问这堆鸡蛋最少有多少个?17、键盘输入正整数n,求出n 与其反序数x 之和并输出。
算法试卷
算法设计与分析课程试题一一、选择题1.选出不是算法所必须具备的特征()。
A有穷性B确切性C高效性D可行性2.下列()不是衡量算法的标准。
A 时间效率B 空间效率C 问题的难度D 适应能力3.与递推关系x(n)=2x(n-1)+1,x(1)=1等价的通项公式为()。
A x(n)=2nB x(n)=2n-1C x(n)=2n+1D x(n)=n!4.二维最近邻点问题,如果使用分治法,对于一个子集上的某一点,另一个子集上需要检查的点的个数是()。
A 1个B 2个C 6个D 8个5.下列是动态规划算法基本要素的是()。
A 最优子结构B构造最优解 C 贪心选择因子D界限函数6.()算法应用到广度优先遍历策略。
A 分支界限法B 动态规划法C分治法D回溯法7.Prim算法求最小生成树采用的是()算法思想。
A 贪心算法B 动态规划法C 回溯法D 蛮力法11.三个盘子的汉诺塔,至8.对于凸集下列说法正确的是()。
A 凸集中的所有点都属于凸包;B 凸集中任意两点的连线都在凸中;C 凸集中任意两点的连线都不在凸集中;D一个点集如果不是凸集,则点集中任意两点的连线都不在凸集中少9.对多段图问题描述不正确的是:;A、多段图是一个无向图B、可用向前处理法;C、可用向后处理法;D、可用分治法解决。
10.以下对回溯法描述正确的是:;A、解必须表示成一个2n-元组(x1,x1,x2,x2,﹒﹒﹒,x n,x n);B、回溯法的解必须满足一组综合的约束条件,称为解函数;C、满足显示约束的所有元组不能确定一个可能的解空间,D、隐式约束描述了元组中元素x i必须彼此相关的情况。
二、填空1.算法区别于程序:。
2.递推公式x(n)=x(n-1)+n,x(0)=0,x(n)= 。
3..按分治策略求解棋盘覆盖问题时,对于如图1所示的23×23的特殊棋盘,共需要____个L型骨牌;并在棋盘上填写L型骨牌的覆盖情况。
+ + - + - +++ - - - - + - + + + -- + + - - + -- - +图1 棋盘覆盖 图2 符号三角形4.对下述五个文件用贪心方法进行最优归并:文件x 1,x 2,x 3,x 4和x 5分别有18,24,8,6和28个记录;则文件移动的最少次数为:。
算法初步练习题(附详细答案解析)
算法初步练习题一、选择题: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.. 如图1-1所示,程序框图(算法流程图)的输出结果是()图1-1A.16B.2524C.34D.11121..D [解析] 依次运算的结果是s =12,n =4;s =12+14,n =6;s =12+14+16,n =8,此时输出s ,故输出结果是12+14+16=1112.2.. 执行如图1-1所示的程序框图,输出的S 的值为( )A .1 B.23 C.1321 D.6109872..C [解析] 执行第一次循环时S =12+12×1+1=23,i =1;第二次循环S =232+12×23+1=1321,i =2,此时退出循环,故选C.3.. 阅读如图1-2所示的程序框图,若输入的k =10,则该算法的功能是()A .计算数列{2n -1}的前10项和B .计算数列{2n -1}的前9项和 C .计算数列{2n -1}的前10项和 D .计算数列{2n -1}的前9项和3.A [解析] S =0,i =1→S =1,i =2→S =1+2,i =3→S =1+2+22,i =4→…→S =1+2+22+…+29,i =11>10,故选A.4.. 阅读如图1-4所示的程序框图,运行相应的程序,输出的结果i =________.4.5 [解析] 逐次运算结果是a =5,i =2;a =16,i =3;a =8,i =4;a =4,i =5,满足条件,输出i =5.5. 执行如图所示的程序框图,若输入n =10,则输出S =( )A.511B.1011C.3655D.7255 5.A [解析] 由程序框图可以得到S =122-1+142-1+162-1+182-1+1102-1=11×3+13×5+15×7+17×9+19×11=12⎝⎛⎭⎫1-13+15-17+17-19+19-111=511,故选A. 6.阅读如图1-1所示的程序框图,运行相应的程序,若输入x 的值为1,则输出S 的值为( )A .64B .73C .512D .5856.B [解析] 当x =1时,S =0+1=1;当x =2时,S =1+23=9;当x =4时,S =9+43=73满足题意输出.7. 某程序框图如图1-1所示,若该程序运行后输出的值是95,则( )A .a =4B .a =5C .a =6D .a =7 7.A [解析] S =1+11×2+12×3+…+1k (k +1)=1+1-12+12-13+…+1k -1k +1=1+1-1k +1=2-1k +1=95,故k =4,k =k +1=5,满足k >a 时,即5>a 时,输出S ,所以a=4,选择A.8. 当m =7,n =3时,执行如图1-1所示的程序框图,输出的S 值为( )A .7B .42C .210D .840 8.C 9.[2014·福建卷] 阅读如图1-3所示的程序框图,运行相应的程序,输出的S 的值等于( )A .18B .20C .21D .40 9.B 10.[2014·湖南卷] 执行如图1-1所示的程序框图.如果输入的t ∈[-2,2],则输出的S 属于( )A .[-6,-2]B .[-5,-1]C .[-4,5]D .[-3,6] 10.D 11.[2014·江西卷] 阅读如图1-3所示的程序框图,运行相应的程序,则程序运行后输出的结果为( )图1-3A .7B .9C .10D .11 11.B 12.[2014·辽宁卷] y =________.12.29913.执行如图1-2所示的程序框图,若输入的a ,b ,k 分别为1,2,3,则输出的M =( )图1-2 A.203 B.165 C.72 D.15813.D14. 执行如图S =( )A .4B .5C .6D .7 14.D15.[2014·山东卷] 执行如图1-2所示的程序框图,若输入的x 的值为1,则输出的n的值为____.15.3 16.[2014·陕西卷] 根据如图1-1所示的框图,对大于2的整数N ,输出的数列的通项公式是( )A .a n =2nB .a n =2(n -1)C .a n =2D .a n =2-1 16.C 17. [2014·四川卷] 执行如图1-1所示的程序框图,如果输入的x ,y ∈R ,那么输出的S 的最大值为( )A .0B .1C .2D .3 17.C 18.[2014·天津卷] 阅读如图11所示的程序框图,运行相应的程序,输出S 的值为( )图1-1 A .15 B .105 C .245 D .945 18.B 19.[2014·浙江卷] 若某程序框图如图1-3所示,当输入50时,则该程序运行后输出的结果是________.19.6 20.[2014·重庆卷] 执行如图1-1所示的程序框图,若输出k 的值为6,则判断框内可填入的条件是( )A .s >12B .s >35C .s >710D .s >4520.C。
算法考试试题及答案
一、填空题(本题10分,每空1分)1、算法的复杂性是的度量,是评价算法优劣的重要依据。
2、设n为正整数,利用大“O(·)"记号,将下列程序段的执行时间表示为n的函数,则下面程序段的时间复杂度为 .i=1; k=0;while(i<n) { k=k+10*i;i++; }3、计算机的资源最重要的是和资源.因而,算法的复杂性有和之分。
4、f(n)= 6×2n+n2,f(n)的渐进性态f(n)= O( )5、递归是指函数或者通过一些语句调用自身。
6、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相且与原问题相同.二、选择题(本题20分,每小题2分)1、分支限界法与回溯法都是在问题的解空间树T上搜索问题的解,二者( )。
A.求解目标不同,搜索方式相同B.求解目标不同,搜索方式也不同C.求解目标相同,搜索方式不同 D。
求解目标相同,搜索方式也相同2、回溯法在解空间树T上的搜索方式是( )。
A.深度优先B.广度优先 C。
最小耗费优先 D。
活结点优先3、在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( )。
A。
回溯法 B。
分支限界法 C。
回溯法和分支限界法 D。
回溯法求解子集树问题4、以下关于判定问题难易处理的叙述中正确的是()。
A.可以由多项式时间算法求解的问题是难处理的B。
需要超过多项式时间算法求解的问题是易处理的C。
可以由多项式时间算法求解的问题是易处理的D。
需要超过多项式时间算法求解的问题是不能处理的5、设f(N),g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≤Cg(N),则称函数f(N)当N充分大时有上界g(N),记作f(N)=O(g(N)),即f (N)的阶( )g(N)的阶。
A。
不高于 B.不低于 C.等价于 D。
逼近6、对于含有n个元素的子集树问题,最坏情况下其解空间的叶结点数目为( )。
图形化算法试题及答案高中
图形化算法试题及答案高中一、选择题1. 在图形化编程中,循环结构通常用来:A. 执行一次操作B. 执行多次操作C. 选择执行操作D. 跳过某些操作答案:B2. 下列哪个图形化编程模块用于条件判断?A. 循环模块B. 条件判断模块C. 变量模块D. 运算模块答案:B3. 在图形化编程中,以下哪个模块用于实现变量的赋值?A. 循环模块B. 条件判断模块C. 变量模块D. 运算模块答案:C4. 如果需要在图形化编程中实现“当按下空格键时,角色向前移动”的功能,应该使用哪个模块?A. 事件模块B. 循环模块C. 条件判断模块D. 变量模块答案:A5. 在图形化编程中,以下哪个模块用于实现数学运算?A. 事件模块B. 循环模块C. 条件判断模块D. 运算模块答案:D二、简答题1. 请简述图形化编程中循环结构的作用和常见类型。
循环结构在图形化编程中用于重复执行一段代码,直到满足特定条件。
常见类型包括“重复执行”循环和“重复直到”循环。
2. 描述图形化编程中条件判断模块的工作原理。
条件判断模块在图形化编程中用于根据条件的真假来决定程序的执行流程。
如果条件为真,则执行条件模块下连接的代码块;如果条件为假,则跳过该代码块。
三、编程题1. 编写一个图形化程序,实现按下键盘上的“↑”键时,角色向上移动,按下“↓”键时,角色向下移动。
解题思路:- 使用事件模块中的“当按下↑键”和“当按下↓键”事件。
- 连接到角色移动模块,实现向上和向下移动的功能。
2. 设计一个图形化程序,实现角色在碰到边界时反弹的效果。
解题思路:- 使用条件判断模块检测角色是否碰到边界。
- 如果碰到边界,使用变量模块改变角色的移动方向。
结束语:通过本试题的练习,同学们应该对图形化编程中的循环结构、条件判断、事件响应以及变量的使用有了更深入的理解。
希望同学们能够将这些知识应用到实际的编程实践中,不断提高自己的编程能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x 2 − x − 1 = 0, 设特征方程的2个根本分别为x1 , x 2 , 则可得 1+ 5 , 则有 2 1− 5 n 1+ 5 n ) + c2 ( ) f (n) = c1 ( 2 2 又f (1) = f (2) = 1可得 x1 = x 2 =
1+ 5 1− 5 f (1) = c1 + c2 = 1 2 2 f (2) = (1 + 5 ) 2 c + (1 − 5 ) 2 c = 1 1 2 2 2 可得c1 = a, c 2 = b
if(n-m<=1){ if(m==n)return m; else if(b[n]<b[m])return n; else return m; } else{ x1=Min(b,m,(m+n)/2); x2=Min(b,(m+n)/2+1,n); if(b[x1]<=b[x2])return x1; else return x2; } }
6、
编写一个 Quick Sorting 算法,并分析时间复杂性。 int part(int *a,int p,int r){ int i,j,x,t; x=a[r]; i=p-1; for(j=p;j<=r-1;j++){ if(a[j]<=x){ i++; t=a[i]; a[i]=a[j]; a[j]=t; } } t=a[i+1]; a[i+1]=a[r]; a[r]=t; return i+1; } void quicksort(int *a,int p,int r){ int q; if(p<r){ q=part(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r); } } 快速排序时间复杂度最坏情况为 O (n ) ,平均为 O(nlogn);
10、
如果是检测一个字符串中是否包含一个回文子串,应如何编写算法。如果是找最大的回 文子串呢? int judge(char *A,int n0, int n1){ int i,j; i=n0;j=n1; while(i<=j){ if(A[i]!=A[j])break; i++;j--; } if(i<=j)return 0; else return 1; } int fun(char *A,int n){ int i,j,k; for(i=1,i<=n-1;i--){ for(j=0;j<n-i;j++){ if(judge(&A,j,j+i)==1){output(&A,j,j+i);return 1;} } } return 0; } 如果找最大回文则需更改为; int fun(char *A,int n){ int i,j,k; for(i=n-1;i>=1;i--){ for(j=0;j<=n-i-1;j++){ if(fun(&A,j,i+j)==1){output(&A,j,i+j);return 1;} } } return 0; } 此时最先找到的即为最大回文。
m[i][j]=q; } } } } } 时间复杂度为 Θ(n ) = ( ) + n
2
s[i][j]=k;
n 2
15、 设计一个算法从数 A[1:n]中同时找出最大元素和最小元素,只需要不超过 1.5n-2 次比 较。 #include "stdafx.h" #include"stdio.h" #define N 100 int b[N]; int l=0; int Max(int *a,int m,int n){ int x1,x2; if(n-m<=1){ if(n-m==0){ b[l]=a[m];l++;return m;} if(a[n]>=a[m]){b[l]=a[m];l++;return n;} else{b[l]=a[n];l++;return m;} } else { x1=Max(a,m,(m+n)/2); x2=Max(a,(m+n)/2+1,n); if(a[x1]>=a[x2])return x1; else return x2; } } int Min(int *b,int m,int n){ int x1,x2; //求最小值 //将底层比较的较小值存入 b[n] //求最大值
11、
设 n 个不同的整数排好序后存在数组 T[1:n]中。若存在一个下标 i,使得 T[i]=i,设计 一个有效的算法找到该下标。要求时间复杂性是 O(logn)。 void fun(){ int low=1,high=n,mid; mid=(low+high)/2; while(low<=high){
8、
编写一个 Heap Sorting 算法,并分析时间复杂性。
void max_heapify(int *A,int i){ //保持最大堆性质 int largest,t,l,r; l=2*i;r=2*i+1; if(l<=heap_sizeA&&A[l]>A[i]) largest=l; else largest=i; if(r<=heap_sizeA&&A[r]>A[largest]) largest=r; if(largest!=i){ t=A[i]; A[i]=A[largest]; A[largest]=t; max_heapify(A,largest); } } void build_max_heap(int *A,int lenth){ //建堆 int i; heap_sizeA=lenth; for(i=lenth/2;i>=1;i--){ max_heapify(A,i); } } heapsort(int *A,int lenth){ int i,t; build_max_heap(A,lenth); for(i=lenth;i>=2;i--){ t=A[1]; A[1]=A[i]; A[i]=t; heap_sizeA--; max_heapify(A,1); } }
9、
编写一个算法,可以检测一个字符串是否回文(如:afaddafa,abwba 等) 。 int fun(char *A,int n){ int i ,j; i=0,j=n-1; while(i<=j){ if(A[i]!=A[j])break; i++;j--; } if(i<=j)return 0; else return 1; }
if(T[mid]==mid)break; else if(T[mid]>mid)high=mid-1; else low=high+1; mid=(low+high)/2; } if(low<=high)printf(“%d”,mid); }
12、
编写一个采用 KMP 的算法查找 T 的子串 P,并判断匹配失败的字符是否在 P 中,以此 确定可滑动的最大距离。 T[1……lenthT],P[1……lenthP]; int next[100]; int lenthT,lenthP; void get_next(char *P){ int i,j; i=1;j=0; next[1]=0; while(i<=lenthP){ if(j==0||P[i]==P[j]){ ++i;++j; if(P[i]!=P[j]) next[i]=j; else next[i]=next[j]; } else j=next[j]; } } int KMP(char *T,char *P){ int i,j; i=1;j=1; get_next(P);
算法设计与分析-期末考试题整理
1、 一个算法应有哪些主要特征? 又穷性,确定性,可行性,0 个或多个输入,一个或多个输出 2、 分治法(Divide and Conquer)与动态规划(Dynamic Programming)有什么不同? 分治算法会重复的求解公共子问题, 会做许多不必要的工作, 而动态规划对每个子问题之求 解一次,将其结果存入一张表中,从而避免了每次遇到各个子问题有从新求解。 3、 试举例说明贪心算法对有的问题是有效的,而对一些问题是无效的。 贪心算有效性:最小生成树、哈弗曼、活动安排、单元最短路径。 无效反例:0——1 背包问题,无向图找最短路径问题。 4、 求解方程 f(n)=f(n-1)+f(n-2),f(1)=f(2)=1。 由 f(n)=f(n-1)+f(n-2)可得 f(n)-f(n-1)-f(n-2)=0,可得方程的特征方程为
while(i<=lenthT&&j<=lenthP){ if(j==0||T[i]==P[j]){++i;++j;} else j=next[j]; } if(j>lenthP)return i-lenthP; else return 0; } 13、 考虑一个“模糊”的算法查找 T 的子串 P,先快速找到与 P 相似的子串,再进一步确认 之。 int new_get_index(char *T,char *P) { int a,b,c; a=0;b=strlen(p);c=(a+b)/2; int k=0; while(){ if(P[a]!=T[k+a]||P[b]!=T[k+b]||P[c]!=T[k+c]){k++;continue;} for(int j=0;j<b;j++) if(P[j]!=T[j+k])break; } if(j==b)return k; } 14、 设计一个算法确定 K 个矩阵相乘的最优次序,并分析该算法的时间复杂性。 int m[100][100]; int s[100][100]; void fun(int *p,int n){ int i,j,k,l,q; for(i=1;i<=n;i++) m[i][i]=0; for(l=2;l<=n;l++){ for(i=1;i<=n-l+1;i++){ j=i+l-1; m[i][j]=32767; for(k=i;k<=j-1;k++){ q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]; if(q<m[i][j]){