算法练习题-分章节-带答案
算法练习题及答案

算法练习题及答案算法练习题及答案随着计算机科学的发展,算法成为了计算机科学的核心内容之一。
算法是一种解决问题的方法和步骤,它可以将复杂的问题简化为一系列简单的操作。
为了提高算法设计和分析的能力,许多学生和程序员经常进行算法练习。
在这篇文章中,我将给出一些常见的算法练习题及其答案,希望能对读者有所帮助。
1. 反转字符串题目:给定一个字符串,将其反转并返回。
解答:可以使用两个指针,一个指向字符串的开头,一个指向字符串的末尾。
然后交换两个指针指向的字符,然后分别向中间靠拢,直到两个指针相遇。
2. 判断回文数题目:给定一个整数,判断它是否是回文数。
回文数是指正序和倒序读都一样的整数。
解答:可以将整数转换为字符串,然后使用反转字符串的方法判断是否相等。
另一种方法是将整数反转后与原来的整数进行比较。
3. 寻找两个有序数组的中位数题目:给定两个有序数组,找出这两个数组合并后的中位数。
要求时间复杂度为O(log(m+n))。
解答:可以使用二分查找的思想。
首先将两个数组合并成一个有序数组,然后找到中位数的位置。
如果数组长度为奇数,中位数就是中间的元素;如果数组长度为偶数,中位数就是中间两个元素的平均值。
4. 搜索旋转排序数组题目:给定一个按照升序排列的整数数组,经过旋转后的数组,搜索一个给定的目标值。
如果目标值存在于数组中,则返回它的索引,否则返回-1。
解答:可以使用二分查找的思想。
首先找到数组的中间元素,然后判断中间元素与目标值的关系。
如果中间元素等于目标值,直接返回索引;如果中间元素小于目标值,说明目标值在右半部分,继续在右半部分进行二分查找;如果中间元素大于目标值,说明目标值在左半部分,继续在左半部分进行二分查找。
5. 最长公共前缀题目:给定一个字符串数组,找到这些字符串的最长公共前缀。
解答:可以将第一个字符串作为初始的最长公共前缀,然后逐个比较后面的字符串与最长公共前缀的相同部分。
如果相同部分为空,则返回空;如果相同部分不为空,则更新最长公共前缀。
算法入门测试题及答案高中

算法入门测试题及答案高中一、选择题(每题2分,共20分)1. 以下哪个不是算法的基本特征?A. 有穷性B. 确定性C. 通用性D. 可行性2. 递归算法的基本原理是什么?A. 循环B. 迭代C. 分治D. 重复3. 在排序算法中,以下哪个算法的时间复杂度是O(n^2)?A. 冒泡排序B. 快速排序C. 归并排序D. 堆排序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. 快速排序E. 拓扑排序10. 以下哪个算法是解决旅行商问题的?A. 动态规划B. 贪心算法C. 回溯算法D. 分治算法答案:1-5 CADBA 6-10 BDDDC二、填空题(每空2分,共20分)1. 算法的时间复杂度是指算法执行所需时间与输入规模的______关系。
2. 在数据结构中,______是一种特殊的线性表,只允许在表的一端进行插入和删除操作。
3. 快速排序是一种______排序算法,它通过一个划分操作将待排序的数组分为两部分,然后递归地在子数组上重复这个过程。
4. 动态规划算法通常用于解决具有______性质的问题。
5. 在图的深度优先搜索中,如果存在环,可能会陷入______。
答案:1. 函数 2. 栈 3. 分治 4. 重叠子问题 5. 无限循环三、简答题(每题10分,共20分)1. 请简述什么是贪心算法,并给出一个实际应用的例子。
基本算法练习题

基本算法练习题算法,作为计算机科学的重要组成部分,是解决问题的实用方法和步骤。
它是计算机能够自主运作的核心。
基本算法是算法学习的第一步,通过解决一系列的练习题,我们能够深入理解算法的原理和应用。
本文将介绍几个基本算法练习题,并给出相应的解答。
1. 排序算法排序是最基本的算法之一,它将一组元素按照特定规则进行排列。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序等。
下面以冒泡排序为例:```pythondef bubble_sort(arr):n = len(arr)for i in range(n-1):for j in range(n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr# 测试代码arr = [4, 2, 6, 8, 3, 1, 5, 7]print(bubble_sort(arr))```2. 查找算法查找算法是在给定的数据集合中寻找特定元素的算法。
常见的查找算法包括线性查找、二分查找、哈希查找等。
下面以二分查找为例:```pythondef binary_search(arr, target):left = 0right = len(arr)-1while left <= right:mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] < target:left = mid + 1else:right = mid - 1return -1# 测试代码arr = [1, 2, 3, 4, 5, 6, 7, 8]target = 6print(binary_search(arr, target))```3. 递归算法递归是一种重要的算法设计技巧,它通过调用自身来解决问题。
递归算法可以更简洁地解决一些复杂的问题。
数二660题分章节

数二660题分章节
题目分章节的方法可以根据具体的章节内容和题目类型来进行分类和归纳。
以下是一种可能的分章节的方式,将660道题目按照章节进行划分:
1. 第一章,基础知识。
题目1-50,概念理解和基础知识练习题。
题目51-100,公式推导和计算题。
题目101-150,简答题和解释题。
2. 第二章,数据结构。
题目151-200,数组和链表。
题目201-250,栈和队列。
题目251-300,树和图。
3. 第三章,算法与复杂度分析。
题目301-350,排序算法。
题目351-400,查找算法。
题目401-450,递归与分治算法。
题目451-500,动态规划算法。
4. 第四章,计算机网络。
题目501-550,网络协议和通信原理。
题目551-600,网络安全和加密技术。
题目601-650,网络管理和性能优化。
5. 第五章,操作系统。
题目651-660,进程管理和调度算法。
请注意,以上只是一种可能的划分方式,具体的章节和题目数量可以根据实际情况进行调整。
同时,题目的难易程度和内容也是划分章节的重要考虑因素,可以根据题目的相关性和难度级别进行合理的划分。
高中算法复习 经典习题(含详细答案)

1、如图所示的程序框图中,则第3个输出的数是( )A .1 B. 32 C.2 D. 521、解析:前3个分别输出的数是1,32,2.故选C .2.如图给出的是求201614121+⋅⋅⋅+++的值的一个程序框图,其中判断框内应填入的条件是 ( )A .i>10? B. i<10? C .i>20? D .i<20?2解析:通过列表,我们能清楚了解程序的每一步中的各个变量是怎样变化的, 第一次:11,,42i S n ===,第二次:112,,624i S n ==+=,…依此可知循环的条件是i>10?.选A第1题 第2题3.(2007年高考山东卷)阅读右边的程序框图,若输入的n 是100,则输出的变量S 和T 的值依次是( ) A .2550,2500 B .2550,2550开始021S n i ===,,1S S n=+2n n =+1i i =+结束是否输出S开始12A =1N =12A A =+1N N =+4?N >结束是否输出AC .2500,2500D .2500,25503解析:依据框图可得1009896...22550S =++++=,999795...12500T =++++=.选A.二、填空题 4.(2008年高考山东卷)执行右边的程序框图,若p =0.8,则输出的n =________..4解析:第一次循环后,10.82S =<,此时n =2;第二次循环后,110.824S =+<,开始 00S T ==,T T n =+S S n =+2?n ≥结束是否 输出S T 、 输入n1n n =- 1n n =-此时n =3;第三次循环后,1110.8248S =++>,此时4n =,输出,故填4.5.如果执行右面的程序框图,那么输出的S =5解析:2461002550S =++++=6.(2009年高考福建卷改编)阅读如图所示的程序框图,运行相应的程序,输出的结果是________.6、解析:试将程序分步运行:第一循环:S =11-2=-1,n =2;第二循环:S =11-(-1)=12,n =3;第三循环:S =11-12=2,n =4.答案:47、执行下面的程序框图,输出的T =________.7解析:据框图依次为:第6题第7题⎩⎪⎨⎪⎧ S =5,n =2,T =2,⎩⎪⎨⎪⎧ S =10,n =4,T =6,⎩⎪⎨⎪⎧ S =15,n =6,T =12,⎩⎪⎨⎪⎧ S =20,n =8,T =20,⎩⎪⎨⎪⎧S =25,n =10,T =30,故此时应输出T =30.答案:308.(2010年南京市高三调研)阅读下面的流程图,若输入a =6,b =1,则输出的结果是________.8解析:a =6,b =1,则x =5>2,再次进入循环得a =4,b =6,此时x =2,退出循环.故输出2.答案:29.阅读如图所示的程序框图,若输入的n 是100,则输出的变量S 的值是多少?第9题9、解析:由循环结构可得S =100+99+…+3+2=5049. 故输出的变量S 的值为5049.答案:504910.若R =8,则下列流程图的运行结果为___4___.第10题11、3.给出一个如图所示的程序框图,若要使输入的x 的值与输出的y 的值相等,则x 的可能值的个数为________. 11、解析:x ≤2时,x 2=x ,∴x =0或x =1;2<x ≤5时,2x -3=x ,∴x =3;x >5时,1x=x ,∴x =-1或x =1(都舍去).所以共有3个可取值.答案:312、已知流程图如图所示,该程序运行后,为使输出的b 值为16,则循环体的判断框内①处应填____.12解析:a =1时进入循环,此时b =21=2;a =2时再进入循环,此时b =22=4;a =3时再进入循环,此时b =24=16,∴a =4时应跳出循环,∴循环满足的条件为a ≤3,∴填3.答案:313.按如图所示的程序框图运行后,输出的结果是63,则判断框中的整数M 的值是________.解析:A =1≤M ,“是”,则S =2×1+1=3,A 变为2; A =2≤M ,“是”,则S =2×3+1=7,A 变为3; A =3≤M ,“是”,则S =2×7+1=15,A 变为4; A =4≤M ,“是”,则S =2×15+1=31,A 变为5; A =5≤M ,“是”,则S =2×31+1=63,A 变为6; A =6≤M ,“否”,则跳出循环,故填5.14、(2009年高考上海卷)某算法的程序框图如图所示,则输出量y 与输入量x 满足的关系式是________.解析:由程序框图的条件结构知:x >1时,y =x -2; x ≤1时,y =2x .故y = ⎩⎪⎨⎪⎧2x (x ≤1),x -2 (x >1).第11题第12题 第13题。
算法期末考试题及答案

算法期末考试题及答案一、选择题(每题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:要删除的节点有两个子节点,找到该节点的直接前驱或直接后继,用其值替换要删除的节点,然后删除直接前驱或直接后继。
算法练习题-分章节-带答案

算法练习题-分章节-带答案一、选择题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、记号的定义正确的是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法练习题-分章节-带答案算法练习题---算法概述一、选择题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、记号Ω的定义正确的是()。
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) };二、填空题1、算法的性质包括输入、输出、、、有限性。
4、算法的复杂性是的度量,是评价算法优劣的重要依据。
6、计算机的资源最重要的是时间和空间资源。
因而,算法的复杂性有和之分。
7、算法复杂度依赖于三方面:、和算法本身。
8、程序是用某种程序设计语言的具体实现。
9、算法是指解决问题的或步骤的描述。
11、计算一个算法时间复杂度通常可以计算、或计算步。
16、任何可用计算机求解的问题所需的时间都与其有关。
算法练习题---递归与分治策略一、选择题10、Hanoi塔问题如下图所示。
现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi塔问题的移动规则。
由此设计出解Hanoi塔问题的递归算法正确的为:()11、二分搜索算法是利用( )实现的算法。
A 、分治策略B 、动态规划法C 、贪心法D 、回溯法12、以下不可以使用分治法求解的是( )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题13、实现循环赛日程表利用的算法是( )。
A 、分治策略B 、动态规划法C 、贪心法D 、回溯法14、实现棋盘覆盖算法利用的算法是( )。
A 、分治法B 、动态规划法C 、贪心法D 、回溯法15、Strassen 矩阵乘法是利用( )实现的算法。
A 、分治策略B 、动态规划法C 、贪心法D 、回溯法16、使用分治法求解不需要满足的条件是()。
A 子问题必须是一样的B 子问题不能够重复C 子问题的解可以合并D 原问题和子问题使用相同的方法解17、实现合并排序利用的算法是( )。
A 、分治策略B 、动态规划法C 、贪心法D 、回溯法18、实现大整数的乘法是利用的算法( )。
A 、贪心法B 、动态规划法C 、分治策略D 、回溯法二、填空题5、分治法的基本思想是将一个规模为n 的问题分解为k 个规模较小的子问题,这些子问题互相 且与原问题相同。
10、从分治法的一般设计模式可以看出,用它设计出的程序一般是 。
14、快速排序算法是基于 的一种排序算法。
17、快速排序算法的性能取决于C. void hanoi(int n, int C, int B,int A){ if (n > 0){ hanoi(n-1, A, C, B);move(n,a,b); hanoi(n-1, C, B, A);}D. void hanoi(int n, int C, int A, int B) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); }三、简答题3、分治法所能解决的问题一般具有的几个特征是:答:(1)该问题的规模缩小到一定的程度就可以容易地解决;(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)原问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
4、分治法与动态规划法的异同。
答:相同点:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
不同点:适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。
而用分治法求解的问题,经分解得到的子问题往往是互相独立的。
8、老板有一袋金块(共n块,n是2的幂(n>=2)),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。
假设有一台比较重量的仪器,希望用最少的比较次数找出最重的金块。
答:n≤2 ,识别出最重和最轻的金块,一次比较就足够了。
n>2,第一步,把这袋金块平分成两个小袋A和B。
第二步,分别找出在A和B中最重和最轻的金块。
设A中最重和最轻的金块分别为HA与LA,以此类推,B中最重和最轻的金块分别为HB和LB。
第三步,通过比较HA和HB,可以找到所有金块中最重的;通过比较LA和LB,可以找到所有金块中最轻的。
在第二步中,若n>2,则递归地应用分而治之方法。
9、Tom很顽皮。
一天,他把假币投到储钱罐里。
之后,他担心爸爸揍它,想从N个钱币里找出那个假币。
他知道假币的重量比其他钱币轻,但不知道如何找到它,于是禁不住哭了。
也许你能帮他。
请描述一个通过使用天平找到假币的算法,并分析你算法的运行时间。
11、对下面的递归算法,写出调用f(4)的执行结果。
void f(int k){ if( k>0 ){ printf("%d\n ",k);f(k-1);f(k-1);}}四、算法填空5.快速排序void QuickSort (int a[], int p, int r){ if (p<r){ int q=Partition(a,p,r);; //对左半段排序; //对右半段排序}}6.排列问题void perm(int list[], int k, int m ){ //产生[list[k:m]的所有排列if( ){ //只剩下一个元素for (int i=0;i<=m;i++) cout<<list[i];cout<<endl;}else //还有多个元素待排列,递归产生排列for ( ){ swap(list[k],list[i]);;swap(list[k],list[i]);}}五、算法题1. 给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x,返回其在数组中的位置,如果未找到返回-1。
写出二分搜索的算法,并分析其时间复杂度。
template<class Type>int BinarySearch(Type a[], const Type& x, int n){//在a[0:n]中搜索x,找到x时返回其在数组中的位置,否则返回-1Int left=0; int right=n-1;While (left<=right){ int middle=(left+right)/2;if (x==a[middle]) return middle;if (x>a[middle]) left=middle+1;else right=middle-1;}Return -1;}时间复杂性为O(logn)2. 利用分治算法写出合并排序的算法,并分析其时间复杂度void MergeSort(Type a[], int left, int right){ if (left<right) //至少有2个元素{ int i=(left+right)/2; //取中点mergeSort(a, left, i);mergeSort(a, i+1, right);merge(a, b, left, i, right); //合并到数组bcopy(a, b, left, right); //复制回数组a}}算法在最坏情况下的时间复杂度为O(nlogn)。
算法练习题---动态规划一、选择题19、下列不是动态规划算法基本步骤的是()。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解20、最长公共子序列算法利用的算法是()。
A、分支界限法B、动态规划法C、贪心法D、回溯法21、动态规划算法的基本要素为()A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质 D. 预排序与递归调用22、矩阵连乘问题的算法可由()设计实现。
A、分支界限算法B、动态规划算法C、贪心算法 D.分治法23、下列算法中通常以自底向上的方式求解最优解的是()。