算法习题及解答
算法练习题及答案
![算法练习题及答案](https://img.taocdn.com/s3/m/efcc0f58fe00bed5b9f3f90f76c66137ee064f08.png)
算法练习题及答案算法练习题及答案随着计算机科学的发展,算法成为了计算机科学的核心内容之一。
算法是一种解决问题的方法和步骤,它可以将复杂的问题简化为一系列简单的操作。
为了提高算法设计和分析的能力,许多学生和程序员经常进行算法练习。
在这篇文章中,我将给出一些常见的算法练习题及其答案,希望能对读者有所帮助。
1. 反转字符串题目:给定一个字符串,将其反转并返回。
解答:可以使用两个指针,一个指向字符串的开头,一个指向字符串的末尾。
然后交换两个指针指向的字符,然后分别向中间靠拢,直到两个指针相遇。
2. 判断回文数题目:给定一个整数,判断它是否是回文数。
回文数是指正序和倒序读都一样的整数。
解答:可以将整数转换为字符串,然后使用反转字符串的方法判断是否相等。
另一种方法是将整数反转后与原来的整数进行比较。
3. 寻找两个有序数组的中位数题目:给定两个有序数组,找出这两个数组合并后的中位数。
要求时间复杂度为O(log(m+n))。
解答:可以使用二分查找的思想。
首先将两个数组合并成一个有序数组,然后找到中位数的位置。
如果数组长度为奇数,中位数就是中间的元素;如果数组长度为偶数,中位数就是中间两个元素的平均值。
4. 搜索旋转排序数组题目:给定一个按照升序排列的整数数组,经过旋转后的数组,搜索一个给定的目标值。
如果目标值存在于数组中,则返回它的索引,否则返回-1。
解答:可以使用二分查找的思想。
首先找到数组的中间元素,然后判断中间元素与目标值的关系。
如果中间元素等于目标值,直接返回索引;如果中间元素小于目标值,说明目标值在右半部分,继续在右半部分进行二分查找;如果中间元素大于目标值,说明目标值在左半部分,继续在左半部分进行二分查找。
5. 最长公共前缀题目:给定一个字符串数组,找到这些字符串的最长公共前缀。
解答:可以将第一个字符串作为初始的最长公共前缀,然后逐个比较后面的字符串与最长公共前缀的相同部分。
如果相同部分为空,则返回空;如果相同部分不为空,则更新最长公共前缀。
数据结构与算法设计课后习题及答案详解
![数据结构与算法设计课后习题及答案详解](https://img.taocdn.com/s3/m/30ede033bb1aa8114431b90d6c85ec3a87c28b29.png)
数据结构与算法设计课后习题及答案详解1. 习题一:数组求和题目描述:给定一个整数数组,编写一个函数来计算它的所有元素之和。
解题思路:遍历数组,将每个元素累加到一个变量中,最后返回累加和。
代码实现:```pythondef sum_array(arr):result = 0for num in arr:result += numreturn result```2. 习题二:链表反转题目描述:给定一个单链表,反转它的节点顺序。
解题思路:采用三指针法,依次将当前节点的下一个节点指向上一个节点,然后更新三个指针的位置,直到链表反转完毕。
代码实现:```pythonclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef reverse_list(head):prev = Nonecurr = headwhile curr:next_node = curr.nextcurr.next = prevprev = currcurr = next_nodereturn prev```3. 习题三:二叉树的层序遍历题目描述:给定一个二叉树,返回其节点值的层序遍历结果。
解题思路:采用队列来实现层序遍历,先将根节点入队,然后循环出队并访问出队节点的值,同时将出队节点的左右子节点入队。
代码实现:```pythonclass TreeNode:def __init__(self, val=0, left=None, right=None): self.val = valself.left = leftself.right = rightdef level_order(root):if not root:return []result = []queue = [root]while queue:level = []for _ in range(len(queue)):node = queue.pop(0)level.append(node.val)if node.left:queue.append(node.left)queue.append(node.right)result.append(level)return result```4. 习题四:堆排序题目描述:给定一个无序数组,使用堆排序算法对其进行排序。
计算机算法设计与分析(第4版) 王晓东习题解答
![计算机算法设计与分析(第4版) 王晓东习题解答](https://img.taocdn.com/s3/m/32329aa758fb770bf78a55fa.png)
第一章作业1.证明下列Ο、Ω和Θ的性质1)f=Ο(g)当且仅当g=Ω(f)证明:充分性。
若f=Ο(g),则必然存在常数c1>0和n0,使得∀n≥n0,有f≤c1*g(n)。
由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。
必要性。
同理,若g=Ω(f),则必然存在c2>0和n0,使得∀n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。
2)若f=Θ(g)则g=Θ(f)证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得∀n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。
由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。
3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。
证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得∀n≥n1,有F(n) ≤ c1 (f(n)+g(n))= c1 f(n) + c1g(n)≤ c1*max{f,g}+ c1*max{f,g}=2 c1*max{f,g}所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))对于Ω和Θ同理证明可以成立。
4)log(n!)= Θ(nlogn)证明:∙由于log(n!)=∑=n i i 1log ≤∑=ni n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。
∙由于对所有的偶数n 有,log(n!)= ∑=n i i 1log ≥∑=n n i i 2/log ≥∑=nn i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。
当n ≥4,(nlogn)/2-n/2≥(nlogn)/4,故可得∀n ≥4,log(n!) ≥(nlogn)/4,即log(n!)= Ω(nlogn)。
数据结构与算法习题及答案
![数据结构与算法习题及答案](https://img.taocdn.com/s3/m/faf9ef0a0912a216147929d4.png)
第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
3.简述逻辑结构的四种基本关系并画出它们的关系图。
4.存储结构由哪两种基本的存储方法实现?5.选择题(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. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。
(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
算法设计与分析第二版课后习题及解答(可编辑)
![算法设计与分析第二版课后习题及解答(可编辑)](https://img.taocdn.com/s3/m/8019da0753d380eb6294dd88d0d233d4b14e3fd9.png)
算法设计与分析第二版课后习题及解答算法设计与分析基础课后练习答案习题1.14.设计一个计算的算法,n是任意正整数。
除了赋值和比较运算,该算法只能用到基本的四则运算操作。
算法求 //输入:一个正整数n2//输出:。
step1:a1; step2:若a*an 转step 3,否则输出a; step3:aa+1转step 2;5. a.用欧几里德算法求gcd(31415,14142)。
b. 用欧几里德算法求gcd(31415,14142),比检查min{m,n}和gcd(m,n)间连续整数的算法快多少倍?请估算一下。
a. gcd31415, 14142 gcd14142, 3131 gcd3131, 1618 gcd1618, 1513 gcd1513, 105 gcd1513, 105 gcd105, 43 gcd43, 19 gcd19, 5 gcd5, 4 gcd4, 1 gcd1, 0 1.b.有a可知计算gcd(31415,14142)欧几里德算法做了11次除法。
连续整数检测算法在14142每次迭代过程中或者做了一次除法,或者两次除法,因此这个算法做除法的次数鉴于1?14142 和 2?14142之间,所以欧几里德算法比此算法快1?14142/11 ≈1300 与2?14142/11 ≈ 2600 倍之间。
6.证明等式gcdm,ngcdn,m mod n对每一对正整数m,n都成立.Hint:根据除法的定义不难证明:如果d整除u和v, 那么d一定能整除u±v;如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和rm mod nm-qn;显然,若d能整除n和r,也一定能整除mr+qn和n。
数对m,n和n,r具有相同的公约数的有限非空集,其中也包括了最大公约数。
故gcdm,ngcdn,r7.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?Hint:对于任何形如0mn的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcdm,ngcdn,m并且这种交换处理只发生一次.8.a.对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?1次b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?5次gcd5,8习题1.21.农夫过河P?农夫W?狼 G?山羊 C?白菜2.过桥问题1,2,5,10---分别代表4个人, f?手电筒4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c0的实根,写出上述算法的伪代码可以假设sqrtx是求平方根的函数算法Quadratica,b,c//求方程ax^2+bx+c0的实根的算法//输入:实系数a,b,c//输出:实根或者无解信息If a≠0D←b*b-4*a*cIf D0temp←2*ax1←-b+sqrtD/tempx2←-b-sqrtD/tempreturn x1,x2else if D0 return ?b/2*ael se return “no real roots”else //a0if b≠0 return ?c/belse //ab0if c0 return “no real numbers”else return “no real roots”5. 描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答:a.将十进制整数转换为二进制整数的算法输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Kii0,1,2,商赋给n第二步:如果n0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪代码算法 DectoBinn//将十进制整数n转换为二进制整数的算法//输入:正整数n//输出:该正整数相应的二进制数,该数存放于数组Bin[1n]中i1while n!0 doBin[i]n%2;nintn/2;i++;while i!0 doprint Bin[i];i--;9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.算法略对这个算法做尽可能多的改进.算法 MinDistanceA[0..n-1]//输入:数组A[0..n-1]//输出:the smallest distance d between two of its elements 习题1.3考虑这样一个排序算法,该算法对于待排序的数组中的每一个元素,计算比它小的元素个数,然后利用这个信息,将各个元素放到有序数组的相应位置上去.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.古老的七桥问题第2章习题2.17.对下列断言进行证明:如果是错误的,请举例a. 如果tn∈Ogn,则gn∈Ωtnb.α0时,Θαgn Θgn解:a这个断言是正确的。
Python 算法设计练习题及答案
![Python 算法设计练习题及答案](https://img.taocdn.com/s3/m/fc776b9085254b35eefdc8d376eeaeaad1f316eb.png)
Python 算法设计练习题及答案一、找出列表中的最大数题目描述:给定一个整数列表,编写一个函数来找出列表中的最大数。
解题思路:遍历列表,比较每个元素与当前最大值,更新最大值。
代码实现:```pythondef find_max(nums):max_num = float('-inf')for num in nums:if num > max_num:max_num = numreturn max_num```二、计算斐波那契数列题目描述:斐波那契数列是一个数列,其中每个数字都是前两个数字的和。
编写一个函数来计算斐波那契数列的第n个数字。
解题思路:使用递归或迭代方式计算斐波那契数列。
代码实现(递归):```pythondef fibonacci_recursive(n):if n <= 1:return nreturn fibonacci_recursive(n-1) + fibonacci_recursive(n-2)```代码实现(迭代):```pythondef fibonacci_iterative(n):if n <= 1:return na, b = 0, 1for _ in range(n-1):a, b = b, a+breturn b```三、判断字符串是否为回文题目描述:给定一个字符串,编写一个函数来判断它是否是回文。
回文是指正着读和反着读都一样的字符串。
解题思路:将字符串分别从头尾进行比较,如果对应字符不相等,则不是回文。
代码实现:```pythondef is_palindrome(s):left, right = 0, len(s) - 1while left < right:if s[left] != s[right]:return Falseleft += 1right -= 1return True```四、统计单词频率题目描述:给定一个字符串,编写一个函数来统计每个单词出现的频率。
黄宇《算法设计与分析》课后习题解析(二)精选全文
![黄宇《算法设计与分析》课后习题解析(二)精选全文](https://img.taocdn.com/s3/m/f5776d4f6fdb6f1aff00bed5b9f3f90f76c64df3.png)
黄宇《算法设计与分析》课后习题解析(⼆)第2章:从算法的视⾓重新审视数学的概念2.1:(向下取整)题⽬:请计算满⾜下⾯两个条件的实数的区间解析:根据向下取整的含义,令,讨论a的取值范围即可解答:令,则可得:即:故的取值区间为:2.2: (取整函数)题⽬:证明:对于任意整数,(提⽰:将n划分为)。
解析:根据提⽰将n进⾏划分,根据取整函数的定义⽤k表⽰取整函数,即可证明;证明如下:因为对于任意整数,可划分为,则:① ;② ;综上:对于任意整数,, 得证;2.3: (斐波拉契数列)对于斐波拉契数列,请证明:1)题⽬:是偶数当且仅当n能被3整除解析:由斐波拉契数列的递归定义式,容易联想到数学归纳法;证明如下:(采⽤数学归纳法)i)当n = 1,2,3时,依次为1,1,2,符合命题;ii)假设当(k>=1)时命题均成⽴,则:① 当n = 3k+1时,是奇数,成⽴;② 当n = 3k+2时,是奇数,成⽴;③ 当 n = 3(k+1)时,是偶数,成⽴;综上:归纳可得为偶数当且仅当,得证;2)题⽬:x x =1+a (0<a <1)x =1+a (0<a <1)⌊x ⌋=1⇒⌊x ⌋=21⌊x ⌋=2⌊1+a +22a ⌋=1a +22a <1⇒0<a <−21⇒1<a +1<⇒21<x <2x (1,)2n ≥1⌈log (n +1)⌉=⌊logn ⌋+12≤k n ≤2−k +11n ≥12≤k n ≤2−k +11k +1=⌈log (2+k 1)⌉≤⌈log (n +1)⌉≤⌈log (2)⌉=k +1k +1=>⌈log (n +1)⌉=k +1k =⌊log (2)⌋≤k ⌊logn ⌋≤⌊log (2−k +11)⌋=k =>⌊logn ⌋=k n ≥1⌈log (n +1)⌉=k +1=⌊logn ⌋+1F n F n n ≤3k F =n F +n −1F =n −2F +3k F =3k −1>F 3k +1F =n F +3k +1F =3k >F 3k +2F =n F +3k +2F =3k +1>F 3k +3F n 3∣n F −n 2F F =n +1n −1(−1)n +1解析:同1)理,容易联想到数学归纳法证明如下:(采⽤数学归纳法)i)当n = 2时,, 易知成⽴;ii)假设当 n = k 时命题成⽴,① 若k = 2m, 则,当n = k+1 = 2m+1时,要证命题成⽴,即证: => ,代⼊递推式, 得:, 易知是恒等式,故命题成⽴;②当 k=2m+1时,同①理可证命题成⽴;综上:归纳可得,得证;2.4:(完美⼆叉树)给定⼀棵完美⼆叉树,记其节点数为,⾼度为,叶节点数为,内部节点数为1)题⽬:给定上述4个量中的任意⼀个,请推导出其他3个量解析:根据完美⼆叉树的结构特点易得解答:(仅以已知⾼度h推导其他三个量为例,其余同理)已知⾼度为h,可得:节点数:叶节点数:内部节点数:2)题⽬:请计算完美⼆叉树任意⼀层的节点个数:① 如果任意指定深度为的⼀层节点,请计算该层节点个数;② 如果任意指定⾼度为的⼀层节点,请计算该层节点个数;解析:根据完美⼆叉树的结构特点易得(注意节点深度和节点⾼度是互补的,相加为树⾼)解答:① ; ② ;2.5: (⼆叉树的性质)对于⼀棵⾮空的⼆叉树T,记其中叶节点的个数为,有1个⼦节点的节点个数为,有两个⼦节点的节点个数为1)题⽬:如果T是⼀棵2-tree,请证明。
《算法分析与设计》练习题一答案.docx
![《算法分析与设计》练习题一答案.docx](https://img.taocdn.com/s3/m/343cdd82f5335a8102d220fd.png)
《算法分析与设计》练习题一答案1.程序书写格式应该遵循哪四个原则?参考答案:(1)正确使用缩进:一定要有缩进,否则代码的层次不明显。
(2)在一行内只写一条语句。
(3), '}'位置不可随意放置。
(4)变量和运算符之间最好加1个空格2.什么是算法?参考答案:用计算机解决问题的过程可以分成三个阶段:分析问题、设计算法和实现算法。
算法可以理解为冇基本运算及规定的运算顺序所构成的完整的解题步骤,它是求解问题类的、机械的、统一的方法,它由有限多个步骤组成,对于问题类屮每个给定的具体问题,机械地执行这些步骤就可以得到问题的解答。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
3.什么是线性结构?什么是非线性结构?参考答案:线性结构:数据逻辑结构屮的一类。
它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所冇结点都冇R只冇一个直接前趋和一个直接后继。
线性表就是一个典型的线性结构。
栈、队列、串等都是线性结构。
非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接而趋和直接后继。
数组、广义表、树和图等数据结构都是非线性结构。
4.已知二叉树后序遍丿力序列是DABEC,屮序遍丿力序列是DEBAC,则前序遍历序列是什么?参考答案:前序遍历序列是CEDBA5.什么是数制?参考答案:数制是人们利用符号进行计数的一种科学方法。
数制也称计数制,是用一组固定的符号和统一的规则來表示数值的方法。
6.如果将十进制数106转换为八进制数,结果是多少?参考答案:1527.请问查找算法的效率用什么进行度量?参考答案:平均查找长度ASL:在查找其关键字等于给定值的过程小,需要和给定值进行比较的关键字个数的期望值称为查找成功吋的平均查找长度。
AS厶=£皿/=1其屮,n是结点的个数;是杳找第i个结点的概率,是找到第i个结点所需要的比较次数。
算法设计与分析考试题目及答案
![算法设计与分析考试题目及答案](https://img.taocdn.com/s3/m/bc05b210905f804d2b160b4e767f5acfa0c78351.png)
算法设计与分析考试题目及答案Revised at 16:25 am on June 10, 2021I hope tomorrow will definitely be better算法分析与设计期末复习题一、 选择题1.应用Johnson 法则的流水作业调度采用的算法是DA. 贪心算法B. 分支限界法C.分治法D. 动态规划算法塔问题如下图所示;现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置;移动圆盘时遵守Hanoi 塔问题的移动规则;由此设计出解Hanoi 塔问题的递归算法正确的为:B3. 动态规划算法的基本要素为C A. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质 C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用4. 算法分析中,记号O 表示B , 记号Ω表示A , 记号Θ表示D ; A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 E.非紧下界5. 以下关于渐进记号的性质是正确的有:A 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. Ofn+Ogn = Omin{fn,gn} D. f (n)O(g(n))g(n)O(f (n))=⇔=Hanoi 塔A. void hanoiint n, int A, int C, int B { if n > 0 {hanoin-1,A,C, B; moven,a,b;hanoin-1, C, B, A; } B. void hanoiint n, int A, int B, int C { if n > 0 {hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; }C. void hanoiint n, int C, int B, int A { if n > 0 { hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; }D. void hanoiint n, int C, int A, int B { if n > 0 {hanoin-1, A, C, B; moven,a,b;hanoin-1, C, B, A; }6.能采用贪心算法求最优解的问题,一般具有的重要性质为:AA. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按D策略,从根结点出发搜索解空间树;广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按A策略,从根结点出发搜索解空间树;A.广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块A是回溯法中遍历排列树的算法框架程序;A.B.C.D.10.xk的个数;11. 常见的两种分支限界法为DA. 广度优先分支限界法与深度优先分支限界法;B. 队列式FIFO分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式FIFO分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性Sn是指BA.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数;B.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的方格数的总和;C.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的平均方格数;D.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最小方格数;13. N P类语言在图灵机下的定义为DA.NP={L|L是一个能在非多项式时间内被一台NDTM所接受的语言};B.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};C.NP={L|L是一个能在多项式时间内被一台DTM所接受的语言};D.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};14. 记号O的定义正确的是A;A.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ fn ≤cgn };B.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ cgn ≤fn };>0使得对所有n≥n0C.Ogn = { fn | 对于任何正常数c>0,存在正数和n有:0 ≤fn<cgn };>0使得对所有n≥n0D.Ogn = { fn | 对于任何正常数c>0,存在正数和n有:0 ≤cgn < fn };15. 记号Ω的定义正确的是B;A.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ fn ≤cgn };B.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ cgn ≤fn };>0使得对所有n≥n0有:C.gn = { fn | 对于任何正常数c>0,存在正数和n0 ≤fn<cgn };D.gn = { fn | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cgn < fn };二、 填空题1. 下面程序段的所需要的计算时间为 2O(n ) ;2.3.4. 5.6. 用回溯法解题的一个显着特征是在搜索过程中动态产生问题的解空间;在任何时刻,算法只保存从根结点到当前扩展结点的路径;如果解空间树 中从根结点到叶结点的最长路径的长度为hn,则回溯法所需的计算空间通常为Ohn ;7. 回溯法的算法框架按照问题的解空间一般分为子集树算法框架与排列树算法框架;8. 用回溯法解0/1背包问题时,该问题的解空间结构为子集树结构; 9.用回溯法解批处理作业调度问题时,该问题的解空间结构为排列树结构; 10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:11. n m12. 用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时渐进时间上限Omn;13.;设分分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用fn个单位时间;用Tn表示该分治法解规模为|P|=n的问题所需的计算时间,则有:(1)1 ()(/)()1O nT nkT n m f n n=⎧=⎨+>⎩通过迭代法求得Tn的显式表达式为:log1log()(/)nmk j jmjT n n k f n m-==+∑试证明Tn的显式表达式的正确性;2. 举反例证明0/1背包问题若使用的算法是按照p i/w i的非递减次序考虑选择的物品,即只要正在被考虑的物品装得进就装入背包,则此方法不一定能得到最优解此题说明0/1背包问题与背包问题的不同;证明:举例如:p={7,4,4},w={3,2,2},c=4时,由于7/3最大,若按题目要求的方法,只能取第一个,收益是7;而此实例的最大的收益应该是8,取第2,3 个;3. 求证:Ofn+Ogn = Omax{fn,gn} ;证明:对于任意f1n∈ Ofn ,存在正常数c1和自然数n1,使得对所有n≥n1,有f1n≤ c1fn ;类似地,对于任意g1n ∈ Ogn ,存在正常数c2和自然数n2,使得对所有n≥n2,有g1n ≤c2gn ;令c3=max{c1, c2}, n3 =max{n1, n2},hn= max{fn,gn} ;则对所有的 n ≥ n3,有f1n +g1n ≤ c1fn + c2gn≤c3fn + c3gn= c3fn + gn≤ c32 max{fn,gn} = 2c3hn = Omax{fn,gn} .4. 求证最优装载问题具有贪心选择性质;最优装载问题:有一批集装箱要装上一艘载重量为c 的轮船;其中集装箱i 的重量为Wi;最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船; 设集装箱已依其重量从小到大排序,x 1,x 2,…,x n 是最优装载问题的一个最优解;又设1min{|1}i i nk i x ≤≤== ;如果给定的最优装载问题有解,则有1k n ≤≤;证明: 四、 解答题1. 机器调度问题;问题描述:现在有n 件任务和无限多台的机器,任务可以在机器上得到处理;每件任务的开始时间为s i ,完成时间为f i ,s i <f i ;s i ,f i 为处理任务i 的时间范围;两个任务i,j 重叠指两个任务的时间范围区间有重叠,而并非指i,j 的起点或终点重合;例如:区间1,4与区间2,4重叠,而与4,7不重叠;一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器;因此,在可行的分配中每台机器在任何时刻最多只处理一个任务;最优分配是指使用的机器最少的可行分配方案;问题实例:若任务占用的时间范围是{1,4,2,5,4,5,2,6,4,7},则按时完成所有任务最少需要几台机器提示:使用贪心算法画出工作在对应的机器上的分配情况;2. 已知非齐次递归方程:f (n)bf (n 1)g(n)f (0)c =-+⎧⎨=⎩ ,其中,b 、c 是常数,gn 是n 的某一个函数;则fn 的非递归表达式为:nnn i i 1f (n)cb b g(i)-==+∑;现有Hanoi 塔问题的递归方程为:h(n)2h(n 1)1h(1)1=-+⎧⎨=⎩ ,求hn 的非递归表达式;解:利用给出的关系式,此时有:b=2, c=1, gn=1, 从n 递推到1,有: 3. 单源最短路径的求解;问题的描述:给定带权有向图如下图所示G =V,E,其中每条边的权是非负实数;另外,还给定V 中的一个顶点,称为源;现在要计算从源到所有其它各顶点的最短路长度;这里路的长度是指路上各边权之和;这个问题通常称为单源最短路径问题;解法:现采用Dijkstra 算法计算从源顶点1到其它顶点间最短路径;请将此过程填入下表中;4. 请写出用回溯法解装载问题的函数; 装载问题:有一批共n 个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i 的重量为wi,且121ni i w c c =≤+∑;装载问题要求确定是否有一个合理的装载方案可将这n 个集装箱装上这2艘轮船;如果有,找出一种装载方案;解:void backtrack int i{用分支限界法解装载问题时,对算法进行了一些改进,下面的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同;初始时将;也就是说,重量仅在搜索进入左子树是增加,因此,可以在算法每一次进入左子树时更新bestw 的值;43 2 110030maxint10 - {1} 初始 dist5 dist4 dist3 dist2 u S 迭代7. 最长公共子序列问题:给定2个序列X={x 1,x2,…,xm }和Y={y 1,y2,…,yn },找出X 和Y 的最长公共子序列;由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系;用cij 记录序列Xi 和Yj 的最长公共子序列的长度;其中, Xi={x1,x2,…,xi};Y j={y1,y2,…,yj};当i=0或j=0时,空序列是Xi 和Yj 的最长公共子序列;故此时Cij=0;其它情况下,由最优子结构性质可建立递归关系如下:00,0[][][1][1]1,0;max{[][1],[1][]},0;i j i ji j c i j c i j i j x y c i j c i j i j x y ⎧==⎪=--+>=⎨⎪-->≠⎩在程序中,bij 记录Cij 的值是由哪一个子问题的解得到的;8.1.2.3.4.5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________;6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解;7.以深度优先方式系统搜索问题解的算法称为_____________;背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________;9.动态规划算法的两个基本要素是___________和___________;10.二分搜索算法是利用_______________实现的算法;二、综合题50分1.写出设计动态规划算法的主要步骤;2.流水作业调度问题的johnson算法的思想;3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai 和bi,且a 1,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,···,Xn}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表示S的二叉搜索树中搜索一个元素X,返回的结果有两种情形,1在二叉搜索树的内结点中找到X=Xi ,其概率为bi;2在二叉搜索树的叶结点中确定X∈Xi ,Xi+1,其概率为ai;在表示S的二叉搜索树T中,设存储元素Xi的结点深度为C i ;叶结点Xi,Xi+1的结点深度为di,则二叉搜索树T的平均路长p为多少假设二叉搜索树Tij={Xi ,Xi+1,···,Xj}最优值为mij,Wij= ai-1+bi+···+bj+aj,则mij1<=i<=j<=n递归关系表达式为什么6.描述0-1背包问题;三、简答题30分1.流水作业调度中,已知有n个作业,机器M1和M2上加工作业i所需的时间分别为ai 和bi,请写出流水作业调度问题的johnson法则中对ai和bi的排序算法;函数名可写为sorts,n2.最优二叉搜索树问题的动态规划算法设函数名binarysearchtree答案:一、填空1.确定性有穷性可行性 0个或多个输入一个或多个输出2.时间复杂性空间复杂性时间复杂度高低3. 该问题具有最优子结构性质4.{BABCD}或{CABCD}或{CADCD}5.一个最优解6.子问题子问题子问题7.回溯法8. on2n omin{nc,2n}9.最优子结构重叠子问题10.动态规划法二、综合题1.①问题具有最优子结构性质;②构造最优值的递归关系表达式;③最优值的算法描述;④构造最优解;2. ①令N1={i|ai<bi},N2={i|ai>=bi};②将N1中作业按ai的非减序排序得到N1’,将N2中作业按bi的非增序排序得到N2’;③N1’中作业接N2’中作业就构成了满足Johnson法则的最优调度;3.步骤为:N1={1,3},N2={2,4};N 1’={1,3}, N2’={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=∑=+ni 1Ci)(1*bi +∑=nj 0dj *aj{mij=0 i>j6.已知一个背包的容量为C,有n 件物品,物品i 的重量为W i ,价值为V i ,求应如何选择装入背包中的物品,使得装入背包中物品的总价值最大; 三、简答题 1.void sortflowjope s,int n {int i,k,j,l;fori=1;i<=n-1;i++ag=0 k++; ifk>n break;ag==0ifsk.a>sj.a k=j; swapsi.index,sk.index; swapsi.tag,sk.tag;} }l=i;<sj.b k=j;swapsi.index,sk.index; ag,sk.tag; }mij=Wij+min{mik+mk+1j} 1<=i<=j<=n,mii-1=0}2.void binarysearchtreeint a,int b,int n,int m,int s,int w{int i,j,k,t,l;fori=1;i<=n+1;i++{wii-1=ai-1;mii-1=0;}forl=0;l<=n-1;l++Init-single-sourceG,s2. S=Φ3. Q=VGQ<> Φdo u=minQS=S∪{u}for each vertex 3do 4四、算法理解题本题10分根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树;要求中间被舍弃的结点用×标记,获得中间解的结点用单圆圈○框起,最优解用双圆圈◎框起;五、算法理解题本题5分设有n=2k个运动员要进行循环赛,现设计一个满足以下要求的比赛日程表:①每个选手必须与其他n-1名选手比赛各一次;②每个选手一天至多只能赛一次;③循环赛要在最短时间内完成;1如果n=2k,循环赛最少需要进行几天;2当n=23=8时,请画出循环赛日程表;六、算法设计题本题15分分别用贪心算法、动态规划法、回溯法设计0-1背包问题;要求:说明所使用的算法策略;写出算法实现的主要步骤;分析算法的时间;七、算法设计题本题10分通过键盘输入一个高精度的正整数nn的有效位数≤240,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数;编程对给定的n 和s,寻找一种方案,使得剩下的数字组成的新数最小;样例输入178543S=4样例输出13一、填空题本题15分,每小题1分1.规则一系列运算2. 随机存取机RAMRandom Access Machine;随机存取存储程序机RASPRandom Access Stored Program Machine;图灵机Turing Machine3. 算法效率4. 时间、空间、时间复杂度、空间复杂度5.2n6.最好局部最优选择7. 贪心选择最优子结构二、简答题本题25分,每小题5分1、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同;对这k个子问题分别求解;如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解;2、“最优化原理”用数学化的语言来描述:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的;3、某个问题的最优解包含着其子问题的最优解;这种性质称为最优子结构性质;4、回溯法的基本思想是在一棵含有问题全部可能解的状态空间树上进行深度优先搜索,解为叶子结点;搜索过程中,每到达一个结点时,则判断该结点为根的子树是否含有问题的解,如果可以确定该子树中不含有问题的解,则放弃对该子树的搜索,退回到上层父结点,继续下一步深度优先搜索过程;在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造;5、PPolynomial问题:也即是多项式复杂程度的问题;NP就是Non-deterministicPolynomial的问题,也即是多项式复杂程度的非确定性问题;NPCNP Complete问题,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP里面最难的问题,这种问题就是NPC问题;三、算法填空本题20分,每小题5分1、n后问题回溯算法1 Mj&&Li+j&&Ri-j+N2 Mj=Li+j=Ri-j+N=1;3 tryi+1,M,L,R,A4 Aij=05 Mj=Li+j=Ri-j+N=0 2、数塔问题; 1c<=r2trc+=tr+1c 3trc+=tr+1c+1 3、Hanoi 算法 1movea,c2Hanoin-1, a, c , b 3Movea,c 4、1pv=NIL 2pv=u3 v ∈adju 4Relaxu,v,w四、算法理解题本题10分五、18天2分;2当n=23=8时,循环赛日程表3分;六、算法设计题本题15分 1贪心算法 Onlogn ➢ 首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包;若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包;依此策略一直地进行下去,直到背包装满为止; ➢ 具体算法可描述如下:void Knapsackint n,float M,float v,float w,float x {Sortn,v,w; int i;for i=1;i<=n;i++ xi=0; float c=M;for i=1;i<=n;i++ {if wi>c break; xi=1; c-=wi; }if i<=n xi=c/wi; }2动态规划法 Oncmi,j 是背包容量为j,可选择物品为i,i+1,…,n 时0-1背包问题的最优值;由0-1背包问题的最优子结构性质,可以建立计算mi,j 的递归式如下;void KnapSackint v,int w,int c,int n,int m11 {int jMax=minwn-1,c;for j=0;j<=jMax;j++ /mn,j=0 0=<j<wn/ mnj=0;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 4 6 5 8 7 2 1 4 37 8 5 6 3 4 1 28 7 6 5 4 3 2 1for j=wn;j<=c;j++ /mn,j=vn j>=wn/mnj=vn;for i=n-1;i>1;i--{ int jMax=minwi-1,c;for j=0;j<=jMax;j++ /mi,j=mi+1,j 0=<j<wi/mij=mi+1j;for j=wi;j<=c;j++/mn,j=vn j>=wn/mij=maxmi+1j,mi+1j-wi+vi;}m1c=m2c;ifc>=w1m1c=maxm1c,m2c-w1+v1;}3回溯法 O2ncw:当前重量 cp:当前价值 bestp:当前最优值voidbacktrack int i//回溯法 i初值1{ifi>n //到达叶结点{ bestp=cp; return; }ifcw+wi<=c //搜索左子树{cw+=wi;cp+=pi;backtracki+1;cw-=wi;cp-=pi;}ifBoundi+1>bestp//搜索右子树backtracki+1;}七、算法设计题本题10分为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符;然后回到串首,按上述规则再删除下一个数字;重复以上过程s次,剩下的数字串便是问题的解了;具体算法如下:输入s, n;while s > 0{ i=1; //从串首开始找while i < lengthn && ni<ni+1{i++;}deleten,i,1; //删除字符串n的第i个字符s--;}while lengthn>1&& n1=‘0’deleten,1,1; //删去串首可能产生的无用零输出n;。
algorithms 习题答案
![algorithms 习题答案](https://img.taocdn.com/s3/m/640fab3b30b765ce0508763231126edb6f1a7631.png)
algorithms 习题答案算法是计算机科学中的重要概念,它是一种解决问题的方法和步骤的有序集合。
在学习算法的过程中,习题是不可或缺的一部分。
通过解答习题,我们可以加深对算法的理解,提高我们的编程能力。
在本文中,我将为大家提供一些常见算法习题的答案。
一、排序算法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```2. 快速排序快速排序是一种常用的排序算法,它的基本思想是通过选择一个基准元素,将数组分为两部分,一部分小于基准元素,一部分大于基准元素,然后对这两部分分别进行递归排序。
以下是快速排序的实现代码:```pythondef quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[0]left = [x for x in arr[1:] if x <= pivot]right = [x for x in arr[1:] if x > pivot]return quick_sort(left) + [pivot] + quick_sort(right)```二、查找算法1. 二分查找二分查找是一种高效的查找算法,它的基本思想是将有序数组分为两部分,通过与目标值的比较,确定目标值在哪一部分中,然后再在该部分中进行查找。
以下是二分查找的实现代码:```pythondef binary_search(arr, target):left, right = 0, len(arr) - 1while left <= right:mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] < target:left = mid + 1else:right = mid - 1return -1```2. 哈希查找哈希查找是一种基于哈希表的查找算法,它的基本思想是通过将关键字映射到哈希表中的位置,从而快速定位到目标值。
算法期末考试练习题!!!
![算法期末考试练习题!!!](https://img.taocdn.com/s3/m/b301f76203768e9951e79b89680203d8ce2f6a4c.png)
算法期末考试练习题博主内推:⼀、选择题1.算法分析中,记号O表⽰(B),记号Ω标售(A),记号Θ表⽰(D)A 渐进下界B 渐进上界C ⾮紧上界D 紧渐进界E ⾮紧下界2.以下关于渐进记号的性质是正确的有:(A)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))3. 记号O的定义正确的是(A)。
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) };4. 记号Ω的定义正确的是(B)。
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 (g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤f(n)<cg(n) };D (g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cg(n) < f(n) };5. T(n)表⽰当输⼊规模为n时的算法效率,以下算法效率最优的是( C )A T(n)= T(n – 1)+1,T(1)=1B T(n)= 2n2C T(n)= T(n/2)+1,T(1)=1D T(n)= 3nlog2n6. 动态规划算法的基本要素为(C)A 最优⼦结构性质与贪⼼选择性质B 重叠⼦问题性质与贪⼼选择性质C 最优⼦结构性质与重叠⼦问题性质D 预排序与递归调⽤7.下列不是动态规划算法基本步骤的是( A )。
高中简单算法练习题及讲解
![高中简单算法练习题及讲解](https://img.taocdn.com/s3/m/bee2f049f08583d049649b6648d7c1c709a10b7c.png)
高中简单算法练习题及讲解### 练习题一:求和算法题目:编写一个程序,计算从1加到100的和。
解题思路:1. 初始化一个变量sum,用来存储累加的结果。
2. 使用for循环从1遍历到100。
3. 在循环中,将当前的数字加到sum上。
4. 循环结束后,打印sum的值。
代码实现:```pythonsum = 0for i in range(1, 101):sum += iprint(sum)```### 练习题二:阶乘算法题目:计算一个给定正整数n的阶乘。
解题思路:1. 定义一个函数factorial,接收一个参数n。
2. 使用递归或循环计算n的阶乘。
3. 如果n为0或1,返回1。
4. 否则,返回n乘以factorial(n-1)的结果。
代码实现(递归):```pythondef factorial(n):if n == 0 or n == 1:return 1else:return n * factorial(n-1)n = 5print(factorial(n))```### 练习题三:斐波那契数列题目:打印斐波那契数列的前10个数字。
解题思路:1. 斐波那契数列的特点是每一项都是前两项的和。
2. 初始化前两个数字为0和1。
3. 使用for循环,从第三个数字开始计算,直到第10个数字。
代码实现:```pythona, b = 0, 1for _ in range(10):print(a)a, b = b, a + b```### 练习题四:最大公约数题目:给定两个正整数a和b,求它们的最大公约数。
解题思路:1. 使用辗转相除法(欧几里得算法)。
2. 计算a除以b的余数。
3. 将b赋值给a,将余数赋值给b。
4. 重复上述步骤,直到余数为0,此时b的值即为最大公约数。
代码实现:```pythondef gcd(a, b):while b != 0:a, b = b, a % breturn aa = 48b = 18print(gcd(a, b))```### 练习题五:字符串反转题目:编写一个程序,将一个字符串反转。
算法案例 习题(含答案)
![算法案例 习题(含答案)](https://img.taocdn.com/s3/m/8cae94040722192e4536f6d8.png)
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时的值
计算机算法设计与分析习题及答案
![计算机算法设计与分析习题及答案](https://img.taocdn.com/s3/m/47420f12f121dd36a22d8211.png)
《计算机算法设计与分析》习题及答案一.选择题1、二分搜索算法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜索方式。
A、分支界限法B、动态规划法C、贪心法D、回溯法4. 回溯法解旅行售货员问题时的解空间树是( A )。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树5.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法6、衡量一个算法好坏的标准是( C )。
A 运行速度快B 占用空间少C 时间复杂度低D 代码短7、以下不可以使用分治法求解的是( D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题8. 实现循环赛日程表利用的算法是( A )。
A、分治策略B、动态规划法C、贪心法D、回溯法9.下面不是分支界限法搜索方式的是( D )。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先10.下列算法中通常以深度优先方式系统搜索问题解的是( D )。
A、备忘录法B、动态规划法C、贪心法D、回溯法11.备忘录方法是那种算法的变形。
( B )A、分治法B、动态规划法C、贪心法D、回溯法12.哈夫曼编码的贪心算法所需的计算时间为( B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)13.分支限界法解最大团问题时,活结点表的组织形式是( B )。
A、最小堆B、最大堆C、栈D、数组14.最长公共子序列算法利用的算法是( B )。
A、分支界限法B、动态规划法C、贪心法D、回溯法15.实现棋盘覆盖算法利用的算法是( A )。
A、分治法B、动态规划法C、贪心法D、回溯法16.下面是贪心算法的基本要素的是( C )。
A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解17.回溯法的效率不依赖于下列哪些因素( D )A.满足显约束的值的个数B. 计算约束函数的时间C.计算限界函数的时间D. 确定解空间的时间18.下面哪种函数是回溯法中为避免无效搜索采取的策略( B )A.递归函数 B.剪枝函数 C。
计算方法课后习题答案
![计算方法课后习题答案](https://img.taocdn.com/s3/m/3d818be51b37f111f18583d049649b6649d70918.png)
计算方法课后习题答案在计算方法课程中,学生通常会接触到各种数学问题的求解方法,包括但不限于数值分析、线性代数、微分方程等。
以下是一些课后习题的解答示例:习题一:求解线性方程组设线性方程组为:\[ \begin{align*}a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n &= b_1, \\a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n &= b_2, \\\vdots \quad \quad & \ \vdots \\a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n &= b_m,\end{align*} \]解答:使用高斯消元法或矩阵分解法求解上述方程组。
首先将系数矩阵转换为行简化阶梯形式,然后回代求解未知数 \( x_1, x_2,\ldots, x_n \)。
习题二:数值积分给定函数 \( f(x) \),需要在区间 \( [a, b] \) 上进行数值积分。
解答:可以使用梯形法、辛普森法等数值积分方法。
例如,使用梯形法的公式为:\[ \int_a^b f(x)dx \approx \frac{h}{2} \left( f(a) + 2f(a+h) + 2f(a+2h) + \cdots + 2f(b-h) + f(b) \right), \]其中 \( h = \frac{b-a}{n} \) 是区间的等分宽度,\( n \) 是等分数。
习题三:常微分方程的数值解给定一个常微分方程 \( y' = f(x, y) \),初始条件为 \( y(x_0) = y_0 \)。
解答:使用欧拉法或龙格-库塔法求解。
以欧拉法为例,其迭代公式为:\[ y_{n+1} = y_n + h f(x_n, y_n), \]其中 \( h \) 是步长,\( x_{n+1} = x_n + h \)。
算法分析与设计考试复习题及参考答案jing
![算法分析与设计考试复习题及参考答案jing](https://img.taocdn.com/s3/m/ab254d8dec3a87c24028c435.png)
一、填空题1、算法的复杂性是算法效率2、的度量,是评价算法优劣的重要依据。
1、设n为正整数,利用大“O(·)”记号,将下列程序段的执行时间表示为n的函数,则下面程序段的时间复杂度为O(n)2、。
i=1; k=0;while(i<n) { k=k+10*i;i++; }3、计算机的资源最重要的是时间和空间资源。
因而,算法的复杂性有时间复杂度和空间复杂度之分。
3、f(n)= 6×2n+n2,f(n)的渐进性态f(n)= O( 2n4、 )5、递归是指函数直接或者间接通过一些语句调用自身。
4、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立6、且与原问题相同。
二、选择题(本题20分,每小题2分)1、分支限界法与回溯法都是在问题的解空间树T上搜索问题的解,二者( B )。
A.求解目标不同,搜索方式相同B.求解目标不同,搜索方式也不同C.求解目标相同,搜索方式不同D.求解目标相同,搜索方式也相同2、回溯法在解空间树T上的搜索方式是( A)。
A.深度优先B.广度优先C.最小耗费优先D.活结点优先3、在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( B )。
A.回溯法B.分支限界法C.回溯法和分支限界法D.回溯法求解子集树问题4、以下关于判定问题难易处理的叙述中正确的是( C )。
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)的阶( A )g(N)的阶。
A.不高于B.不低于C.等价于D.逼近6、对于含有n个元素的子集树问题,最坏情况下其解空间的叶结点数目为( B )。
计算机算法复习题及答案(前三章)
![计算机算法复习题及答案(前三章)](https://img.taocdn.com/s3/m/84ef01cd2cc58bd63186bd8b.png)
计算机算法复习题及答案(前三章)第一章1、什么是绝对误差?什么是相对误差?答:绝对误差等于准确值与近似值差的绝对值。
相对误差是近似数的误差与准确值的比值。
2、什么是绝对误差限?什么是相对误差限?答:绝对误差限为绝对误差的“上界”相对误差限为相对误差绝对值的“上界”3、有效数字与绝对误差限有何关系?有效数字与相对误差限有何关系?答:(绝对)若近似值的绝对误差限是某一位上的半个单位,且该位直到的第一位非零数字一共有几位。
则称近似值有n位有效数字。
(相对)设近似值=±0.···×有n位有效数字,≠0,则真相对误差限为×设近似值=±0.···×的相对误差限为×,≠0,则它有n位有效数字。
4、例1.11、例1.12、例1.15、例1.16.例1.11.设x=4.26972,那么取2位,=4.3,有效数字为2位取3位,=4.27,有效数字为3位取4位,=4.270,有效数字为4位取5位,=4.2697,有效数字为5位例1.12,若=3587.64是x的具有6位有效数字的近似值,则误差限是|-x|≤×=×若=0.0023156是x的具有5位有效数字的近似值,则误差限是|-x|≤×≤×例1.15,若=2.72来表示e的具有3位有效数字的近似值,则相对误差限是=×=×例1.16要使的近似值的相对误差限小于0.1%,要取几位有效数字?由定理1.1,≤×.由于=4.4···,已知=4,故只要取n=4,就有≤0.125×=0.1%只要对的近似值取4位有效数字,其相对误差限就小于0.1%。
此时由开方表得≈4.472 5、课本13~14页习题1、2、3、4.习题1:下列各数都是经过四舍五入得到的近似数,试指出它们是具有几位有效数字的近似数,并确定++和的误差限答:=1.1021,5位,=0.031,2位,=385.6,4位|++|-|++|≤|-|+|-|+|-|=×+×+×=0.5055 η()≈||η()+|η()|=1.1021××+0.031××=0.00055105+0.00000155=0.0005526η()≈||η()+||η() =0.001708255+0.21308256 =0.2148习题2.已测得某场地长L 的值为=110m ,宽d 的值为=80m,已知|L-|≤0.2m ,|d-|≤0.1m ,试求面积S=Ld 的绝对误差限和相对误差限。
算法案例 习题(含答案)
![算法案例 习题(含答案)](https://img.taocdn.com/s3/m/cffb921d376baf1ffc4fad59.png)
算法案例 习题(含答案)一、单选题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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个自然数可以写成若干个小于等于自己的自然之和,这叫该自然数的一个分解。
不同的分解是表示这个自然数分解成的所有自然数不完全相同。
例如:3=2+1和3=1+1+1表示不同的分解。
而3=2+1和3=1+2为相同的分解。
现在的任务是,给出一个自然数,要求所有不同的分解方案数。
输入:输入文件的只有一个自然数N,N<=10000。
(input.txt)输出:输出文件只有一个数,为N的分解方案数。
(output.txt)varn:integer;x:integer;a:array [0..10000] of integer;procedure writestr();vari:integer;beginwrite(n,'=',a[1]);for i:=2 to x dobeginwrite('+',a[i]);end;writeln;end;function adda():integer;vars:integer;i:integer;begins:=0;for i:=1 to x dos:=s+a[i];adda:=s;end;function test(m:integer):boolean;vari:integer;beginif m<0 thenbeginx:=x-2;exit(false);end;if m=0 thenbeginwritestr();x:=x-2;exit(false);end;for i:=a[x] to n-1 dobeginx:=x+1;a[x]:=i;if (not test(n-adda())) thenbeginexit(true);end;end;test:=true;end;beginassign(input,'input.txt');assign(output,'output.txt');reset(input);rewrite(output);read(n);x:=0;a[0]:=1;test(n);close(input);close(output);end.我们知道,所谓的卡列列克运算,是指任意一个四位数,只要它们各个位上的数不全相同,就有这样的规律:程序名为step.pas把组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;把组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则此数不足四位);求出以上两数之差,得到一个新的四位数。
重复以上过程,总能得到最后结果是6174。
试编写一个程序,实现卡布列克运算,要求以下面的格式输出全部运算过程和结果,统计需要运算的步数(如下例为3步)。
输出格式:n=53466543-3456=30878730-378=83528532-2358=6174SETP=3varn:integer;x,max,min:integer;procedure getmaxmin(m:integer);vara:array [1..4] of integer;i,j,tmp:integer;begini:=1;while m>0 dobegina[i]:=m mod 10;m:=m div 10;i:=i+1;end;for i:=3 downto 1 dobeginfor j:=1 to i dobeginif a[j]>a[j+1] thenbegintmp:=a[j];a[j]:=a[j+1];a[j+1]:=tmp;end;end;end;max:=1000*a[4]+100*a[3]+10*a[2]+a[1];min:=1000*a[1]+100*a[2]+10*a[3]+a[4];end;procedure test(m:integer);vari:integer;beginif m=6174 thenbeginwrite('SETP=',x);halt;end;getmaxmin(m);writeln(max,'-',min,'=',max-min);x:=x+1;test(max-min);end;beginassign(input,'input.txt');assign(output,'output.txt');reset(input);rewrite(output);read(n);writeln('n=',n);x:=0;test(n);close(input);close(output);end.253、溢出 over.pas问题描述写一个程序,读入两个非负整数及一个运算符号判断两整数及运算结果是否超出了PASCAL语言中关于长整数类型的定义。
(长整数范围为-2147483648到2147483647)输入文件一行包含整数和运算符,运算符(‘+’,‘-’,‘*’,‘div’)输出文件先输出一遍原输入,并在后面输出0到3行适当内容,如:first number is too bigsecond number is too bigresult number is too big例如:输入输出300+3 300+3300000*300000 300000*300000result is too big9999999999999999999+1 9999999999999999999+1first number is too bigresult number is too big建议用int64来处理,范围大小是(-9223372036854775808 .. 9223372036854775807 )259、最大最小差(MaxMin)问题描述:现在有N个正整数,每一次去掉其中2个数a和b,然后加入一个数a*b+1,这样最后只剩下一个数P。
要求求出最大的P记为MaxP,最小的p记MinP,和他们的差K=MaxP-MinP。
对于给定的数列,编程计算出它的Max,Min和K。
输入文件(MAXMIN.IN):第一行是数列的长度N(不超过50),以下N行,每行一个正整数(不超过2位)。
输出文件(MAXMIN.OUT):输出一共三行,每行一个整数,依次为max,min,K。
输入输出样例:MAXMIN.IN MAXMIN.OUT211 22vararr:array [0..49] ofinteger;excepti:array [0..49] of integer;test:array [0..49] of integer;max,min,n:integer;procedure InitExcept();vari:integer;beginfor i:=0 to n-1 doexcepti[i] := -1;end;function IsIn(i:integer):boolean;varj:integer;beginfor j:=0 to n-1 dobeginif excepti[j]=i thenexit(true);end;IsIn:=false;end;procedure writestr();vari,r:integer;beginfor i:=0 to n-2 dobeginr:=test[i]*test[i+1]+1;test[i+1]:=r;end;if max<r thenmax:=r;if min>r thenmin:=r;end;procedure PaiLie(num:integer);vari:integer;beginif num = 0 thenbeginwritestr();exit;end;for i:=0 to n-1 dobeginif not IsIn(i) thenbeginexcepti[n-num]:=i;test[n-num]:=arr[i]; PaiLie(num-1);end;end;excepti[n-num]:=-1;end;procedure ReadArray();vari:integer;beginfor i:=0 to n-1 doread(arr[i]);end;beginassign(input,'MAXMIN.IN');assign(output,'MAXMIN.OUT');reset(input);rewrite(output);read(n);max:=0;min:=10000;ReadArray();InitExcept();PaiLie(n);writeln('max=',max);writeln('min=',min);write('k=',max-min);close(input);close(output);end.260、输入一个英文句子,例如:“This is a Book.",可以看到句子是以“.”来作为结束符号的,并且单词之间以一个空格来分隔。
接着再输入一个单词A,请找出首次在句子中出现的与A$相同的单词,是句子中的第几个单词,若不存在,则输出该句子中单词字符的总个数。
例如对上句子而言,若输入单词“is”,则应输出: 2若输入单词“isa”,则应输出:11varn,ls,la,i:integer;a,s,sf:string;beginreadln(s);readln(a);s:=copy(s,1,length(s)-1);n:=1;la:=length(a);ls:=length(s);sf:=s;while pos(' ',sf)<>0 dobegindelete(sf, pos(' ',sf),1);n:=n+1;end;sf:='';for i:=1 to ls-la+1 dobeginif (copy(s,i,la)=a)and(copy(s,i-1,1)=' ')and(copy(s,i+la,1)=' ') thenbeginsf:=copy(s,1,i+la-1);break;end;end;if sf<>'' thenbegini:=1;while pos(' ',sf)<>0 dobegini:=i+1;delete(sf,pos(' ',sf),1);end;endelsebeginwhile pos(' ',s)<>0 dobegindelete(s,pos(' ',s),1);end;i:=length(s)end;write(i);end.263、给出二个任意的正整数N,K(1<=N<=10000,0<=K<N),然后进行如下操作:(30%)(1)从N中连续减去2R(R=0,1,2,3,...)(2)当剩余的数不够减时,则将其加上K,再重复(1)的操作过程。