算法分析基础

合集下载

算法设计与分析基础课后习题答案solu4

算法设计与分析基础课后习题答案solu4
Solving it by backward substitutions for n = 2k yields the following:
C(2k) = 2C(2k−1) + 1 = 2[2C(2k−2) + 1] + 1 = 22C(2k−2) + 2 + 1 = 22[2C(2k−3) + 1] + 2 + 1 = 23C(2k−3) + 22 + 2 + 1 = ... = 2iC(2k−i) + 2i−1 + 2i−2 + ... + 1 = ... = 2kC(2k−k) + 2k−1 + 2k−2 + ... + 1 = 2k − 1 = n − 1.
Design a divide-and-conquer algorithm for this problem.
2
Hints to Exercises 4.1
1. In more than one respect, this question is similar to the divide-and-conquer computation of the sum of n numbers. Also, you were asked to analyze an almost identical algorithm in Exercises 2.4.
b. Set up and solve a recurrence relation for the number of multiplications made by this algorithm.
c. How does this algorithm compare with the brute-force algorithm for this problem?

《算法设计与分析基础(第3版)》第一,二章部分习题答案

《算法设计与分析基础(第3版)》第一,二章部分习题答案

作业一学号:_____ 姓名:_____说明:1、正文用宋体小四号,1.5倍行距。

2、报告中的图片、表格中的文字均用宋体五号,单倍行距。

3、图片、表格均需要有图片编号和标题,均用宋体五号加粗。

4、参考文献用宋体、五号、单倍行距,请参照参考文献格式国家标准(GB/T 7714-2005)。

5、公式请使用公式编辑器。

P144.用伪代码写一个算法来求方程ax2+bx+c=0的实根,a,b,c 是任意实系数。

(可以假设sqrt(x)是求平方根的函数。

)算法:Equate(a,b,c)//实现二元一次方程求解实数根//输入:任意系数a,b,c//输出:方程的实数根x1,x2或无解If a≠0p←b2−4acIf p>0x1←−b+sqrt(p)2ax2←−b−sqrt(p)2areturn x1,x2else if p=0return −b2aelsereturn “no real roots”elseif b≠0return −cbelseif c≠0return “no real numbers”elsereturn “no real roots”5.写出将十进制正整数转换为二进制整数的标准算法。

a.用文字描述。

b.用伪代码描述。

a.解:输入:一个正整数n输出:正整数n相应的二进制数第一步:用n 除以2,余数赋给K[i](i=0,1,2...),商赋给n第二步:如果n=0 ,则到第三步,否则重复第一步第三步:将K[i]按照i从高到低的顺序输出b.解:算法:DecToBin(n)//实现正整数十进制转二进制//输入:一个正整数n//输出:正整数n对应的二进制数组K[0..i]i ←1while n≠0 doK[i]←n%2n←(int)n/2i ++while i≠0doprint K[i]i - -p462.请用O,Ω 和θ的非正式定义来判断下列断言是真还是假。

a. n(n+1)/2∈O(n3)b. n(n+1)/2∈O(n2)c. n(n+1)/2∈θ(n3)d. n(n+1)/2∈Ω(n)解:断言为真:a,b,d断言为假:cP535.考虑下面的算法。

算法设计与分析基础课后习题答案

算法设计与分析基础课后习题答案

Program算法设计与分析基础中文版答案习题5..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立.Hint:根据除法的定义不难证明:如果d整除u和v, 那么d一定能整除u±v;如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。

数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。

故gcd(m,n)=gcd(n,r)6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?Hint:对于任何形如0<=m<n的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcd(m,n)=gcd(n,m)并且这种交换处理只发生一次..对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?(1次)b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?(5次)gcd(5,8)习题1.(农夫过河)P—农夫 W—狼 G—山羊 C—白菜2.(过桥问题)1,2,5,10---分别代表4个人, f—手电筒4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c=0的实根,写出上述算法的伪代码(可以假设sqrt(x)是求平方根的函数)算法Quadratic(a,b,c)描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答:a.将十进制整数转换为二进制整数的算法输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Ki(i=0,1,2...),商赋给n第二步:如果n=0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪代码算法 DectoBin(n).n]中i=1while n!=0 do {Bin[i]=n%2;n=(int)n/2;i++;}while i!=0 do{print Bin[i];i--;}9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略)对这个算法做尽可能多的改进.算法 MinDistance(A[0..n-1])n-1]a.应用该算法对列表”60,35,81,98,14,47”排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表”60,35,81,98,14,47”排序的过程如下所示:b.该算法不稳定.比如对列表”2,2*”排序c.该算法不在位.额外空间for S and Count[]4.(古老的七桥问题)习题1.请分别描述一下应该如何实现下列对数组的操作,使得操作时间不依赖数组的长度.a.删除数组的第i个元素(1<=i<=n)b.删除有序数组的第i个元素(依然有序)hints:a. Replace the i th element with the last element and decrease the array size of 1b. Replace the ith element with a special symbol that cannot be a value of the array’s element., 0 for an array of positive numbers ) to mark the i th position is empty. (“lazy deletion”)第2章习题7.对下列断言进行证明:(如果是错误的,请举例)a. 如果t(n)∈O(g(n),则g(n)∈Ω(t(n))b.α>0时,Θ(αg(n))= Θ(g(n))解:a. 这个断言是正确的。

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

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

算法设计与分析基础习题参考答案5..证明等式gcd(m,n)=gcd(n,m mod n)对每⼀对正整数m,n都成⽴.Hint:根据除法的定义不难证明:●如果d整除u和v, 那么d⼀定能整除u±v;●如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意⼀对正整数m,n,若d能整除m和n,那么d⼀定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也⼀定能整除m=r+qn和n。

数对(m,n)和(n,r)具有相同的公约数的有限⾮空集,其中也包括了最⼤公约数。

故gcd(m,n)=gcd(n,r)6.对于第⼀个数⼩于第⼆个数的⼀对数字,欧⼏⾥得算法将会如何处理?该算法在处理这种输⼊的过程中,上述情况最多会发⽣⼏次? Hint:对于任何形如0<=m并且这种交换处理只发⽣⼀次.7.a.对于所有1≤m,n≤10的输⼊, Euclid算法最少要做⼏次除法?(1次)b. 对于所有1≤m,n≤10的输⼊, Euclid算法最多要做⼏次除法?(5次)gcd(5,8)习题1.21.(农夫过河)P—农夫W—狼G—⼭⽺C—⽩菜2.(过桥问题)1,2,5,10---分别代表4个⼈, f—⼿电筒4. 对于任意实系数a,b,c, 某个算法能求⽅程ax^2+bx+c=0的实根,写出上述算法的伪代码(可以假设sqrt(x)是求平⽅根的函数)算法Quadratic(a,b,c)//求⽅程ax^2+bx+c=0的实根的算法//输⼊:实系数a,b,c//输出:实根或者⽆解信息D←b*b-4*a*cIf D>0temp←2*ax1←(-b+sqrt(D))/tempx2←(-b-sqrt(D))/tempreturn x1,x2else if D=0 return –b/(2*a)else return “no real roots”else //a=0if b≠0 return –c/belse //a=b=0if c=0 return “no real numbers”else return “no real roots”5.描述将⼗进制整数表达为⼆进制整数的标准算法a.⽤⽂字描述b.⽤伪代码描述解答:a.将⼗进制整数转换为⼆进制整数的算法输⼊:⼀个正整数n输出:正整数n相应的⼆进制数第⼀步:⽤n除以2,余数赋给Ki(i=0,1,2...),商赋给n第⼆步:如果n=0,则到第三步,否则重复第⼀步第三步:将Ki按照i从⾼到低的顺序输出b.伪代码算法DectoBin(n)//将⼗进制整数n转换为⼆进制整数的算法//输⼊:正整数n//输出:该正整数相应的⼆进制数,该数存放于数组Bin[1...n]中i=1while n!=0 do {Bin[i]=n%2;n=(int)n/2;i++;}while i!=0 do{print Bin[i];i--;}9.考虑下⾯这个算法,它求的是数组中⼤⼩相差最⼩的两个元素的差.(算法略) 对这个算法做尽可能多的改进.算法MinDistance(A[0..n-1])//输⼊:数组A[0..n-1]//输出:the smallest distance d between two of its elements习题1.31.考虑这样⼀个排序算法,该算法对于待排序的数组中的每⼀个元素,计算⽐它⼩的元素个数,然后利⽤这个信息,将各个元素放到有序数组的相应位置上去.a.应⽤该算法对列表‖60,35,81,98,14,47‖排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表‖60,35,81,98,14,47‖排序的过程如下所⽰:b.该算法不稳定.⽐如对列表‖2,2*‖排序c.该算法不在位.额外空间for S and Count[]4.(古⽼的七桥问题)习题1.41.请分别描述⼀下应该如何实现下列对数组的操作,使得操作时间不依赖数组的长度. a.删除数组的第i 个元素(1<=i<=n)b.删除有序数组的第i 个元素(依然有序) hints:a. Replace the i th element with the last element and decrease the array size of 1b. Replace the ith element with a special symbol that cannot be a value of the array ’s element(e.g., 0 for an array of positive numbers ) to mark the i th position is empty . (―lazy deletion ‖)第2章习题2.17.对下列断⾔进⾏证明:(如果是错误的,请举例) a. 如果t(n )∈O(g(n),则g(n)∈Ω(t(n)) b.α>0时,Θ(αg(n))= Θ(g(n)) 解:a. 这个断⾔是正确的。

算法分析基础——主定理

算法分析基础——主定理

算法分析基础——主定理
对于形为T(n) = aT(n / b) + f(n)的递推⽅程,我们有如下结论:
主定理(MasterTheorem)设a≥1,b>1 为常数,f(n)为函数,n为⾮负整数,且 T(n) = aT(n / b) + f(n),则有以下结果:
1. 若存在ε>0,使得f(n) = O(n log b a-ε),则T(n) = Θ(n log b a)
2. 若f(n) = Θ(n log b a),则T(n) = Θ(n log b a logn)
3. 若存在ε>0,使得f(n) = Ω(n log b a+ε),并且对于某个常数c<1和所有充分⼤的n,有af(n / b)≤cf(n),则T(n) = Θ(f(n))
证明:详见教材(推导过程略复杂,不想写了qwq)。

由主定理可以直接得到下述推论:
推论1 依主定理条件,递推⽅程为T(n)= aT(n / b) + c,则
1. 当a≠1时,T(n) = Θ(n log b a)
2. 当a=1时,T(n) = Θ(logn)
推论2 依主定理条件,递推⽅程为T(n) = aT(n / b) + cn,则
1. 当a>b时,T(n) = Θ(n log b a)
2. 当a=b时,T(n) = Θ(nlogn)
3. 当a<b时,T(n) = Θ(n)
例根据主定理及其推论,我们可以直接得到⼆分检索算法的平均时间复杂度为Θ(logn),⽽⼆分归并排序的平均时间复杂度为Θ(nlogn)。

算法设计与分析基础

算法设计与分析基础

2023/12/21
20
LingJie/GDUT
1.2.6 详细表述该算法的方法
• 可以用到的工具有自然语言(nature
language)、伪代码(pseudocode)以及程序 流程图(flow chart)等。
• 当对一个问题有了概要的理解后,下面的工作
就是把这个问题的想法进行细化。所谓的细化 就是把它们表示成算法的步骤。
令执行顺序以及同步等问题。并行算法的设计 有相应的理论,这里仅考虑串行算法。
2023/12/21
17
LingJie/GDUT
1.2.3 选择精确或者近似的算法
• 解决问题下一步要考虑的是使用精确的还是近
似的算法。并不是每一个可解的问题都有精确 的算法,例如求一个数的平方根,求非线性方 程的解等。有时候一个问题有精确的解法但是 算法的执行效率很差,例如旅行家问题。因此 如果待处理的问题涉及到上述那些方面,则要 考虑是选择精确的还是近似的算法。
2023/12/21
10
LingJie/GDUT
-- 2* 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
-- 2 3*
5
7
9
11
13
15
17
19
21
23
25
-- 2 3
5*
7
11
13
17
19
23
25
-- 2 3
5
7
11
13
第一步:找出m的所有质因数。 第二步:找出n的所有质因数。 第三步:从第一步求得的m的质因数分解式和第二步求得的n
的质因数分解式中,找出所有公因数。 第四步:将第三步找到的公因数相乘,结果为所求的

算法-第2章-算法效率分析基础

算法-第2章-算法效率分析基础

The Big-O and Related Notations
2.2.7 基本的效率类型
1 log n n n log n n2 n3 2n n! constant logarithmic linear n log n quadratic cubic exponential factorial
思考
2.2.2 符号О
定义1 我们把函数t(n)属于O(g(n)) ,记作t(n) ∈ O(g(n)) ; 它的成立条件是:对于所有足够大的n, t(n) 的上界由g(n) 的常数倍数所确定,也就是说,存在大于0的常数c和非负 的整数n0,使得: 对于所有的n≥ n0来说, t(n) ≤c g(n)
cg(n)
2.2 渐进符号和基本效率类型
2.2.1 非正式的介绍
O(g(n)) 是增长次数小于等于g(n) (以及其常数倍,n趋 向于无穷大)的函数集合。 n∈O(n2),100n+5∈O(n2), n(n-1) /2 ∈O(n2),n3∈/ O(n2), Ω(g(n)),代表增长次数大于等于g(n)(以及其常数倍,n趋 向于无穷大)的函数集合。 n3∈ Ω(n2), n(n-1) /2 ∈ Ω(n2),但是100n+5 ∈/ Ω(n2) Θ(g(n))是增长次数等于g(n) )(以及其常数倍,n趋向于无 穷大)的函数集合。因此,每一个二次方程an2+bn+c在 a>0的情况下都包含在Θ(n2)中,除了无数类似于n2+sin n和n2+log n的函数(你能解释原因吗?)。
t(n) cg(n)
n0之前的情 况无关重要
n n0 符号Ω:t(n)∈Ω(g(n))
2.2.4 符号Θ
定义 3 我们把函数t(n)属于Θ(g(n)) ,记作t(n) ∈Θ(g(n)) ; 它的成立条件是:对于所有足够大的n, t(n) 的上界和下 界都由g(n)的常数倍数所确定,也就是说,存在大于0的 常数c1,c2和和非负的整数n0,使得: 对于所有的n≥ n0来说, c2g(n) ≤t(n) ≤ c1g(n)

第2章 算法分析基础(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)

第2章 算法分析基础(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)

3
Page 11
2.1.2 算法的渐近分析
常见的时间复杂度:
Ο(1)<(log2n)<(n)<(nlog2n)<(n2)<(n3)<…<(2n)<(n!)
多项式时间,易解问题


指数时间,难解问题
设 计 与




时间复杂度是在不同数量级的层面上比较算法
版 )




时间复杂度是一种估算技术(信封背面的技术)
Page 7
2.1.2 算法的渐近分析
3
每条语句执行次数之和 = 算法的执行时间 = 每条语句执行时间之和
基本语句的执行次数 for (i = 1; i <= n; i++)
单位时间





执行次数 × 执行一次的时间
分 析 (

for (j = 1; j <= n; j++)
版 )
x++;
指令系统、编译的代码质量
算法设计:面对一个问题,如何设计一个有效的算法








计 与 分 析 ( 第 版


) 清

华 大



算法分析:对已设计的算法,如何评价或判断其优劣

3
Page 3
2.1.1 输入规模与基本语句
如何度量算法的效率呢?
事后统计:将算法实现,测算其时间和空间开销
缺点:(1)编写程序实现算法将花费较多的时间和精力 (2)所得实验结果依赖于计算机的软硬件等环境因素
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/8/21
h
6
程序(Program)
• 程序是算法用某种程序设计语言的具体实现。 • 程序可以不满足算法的有限性的性质。例如操作系统,是一个
在无限循环中执行的程序,因而不是一个算法。 • 操作系统的各种任务可看成是单独的问题,每一个问题由操作
系统中的一个子程序通过特定的算法来实现。该子程序得到输 出结果后便终止。
2020/8/21
h
8
好的算法所具备的意义
2020/8/21
h
9
衡量算法性能的标准
• 衡量算法性能一般有下面几个标准
– 正确性 – 易读性 – 健壮性 – 算法的时间和空间性能:高效率和低存储空间
我们这里主要讨论算法的时间和空间性能,并以此作为衡 量算法性能的重要标准。而且我们主要侧重于时间方面。
• l.8.4 The e-notation
• 1.8.5 MamPles
• 1.8.6 Complekity classes and the o-notation
• 1.9 Space Complexity
• 1.10 Optimal Algorithms
2020/8/21
h
3
1. 1 引言
➢Donald E. Knuth: 计算机科学就是算法的 研究.
➢每个领域: 依赖 有效算法设计 ➢运行时间: 由例子到理论 ➢时间是衡量算法有效性的最好测度
➢算法的几个方面:
➢输入 ➢有限指令集 ➢输出 (存在? Y/N)
2020/8/21
h
4
算法概念
➢ 算法是程序设计的精髓,程序设计的实质就是细化构造解 决问题的算法,将其解释为计算机语言。
➢ 算法是在有限步骤内求解某一问题所使用的一组定义明确
《算法设计技巧与分析》
第1章 算法分析基本概念
曹霑懋 caozhanmao@
h
1
Chapter 1 Basic Concepts in Algorithmic Analysis 内容
• 1.1 Introduction • l.2 Historical Background • 1.3 Binary Search • 1.3.1 Analysis of the binary search algorithm • 1.4 Merging Two Sorted Lists • 1.5 Selectinn Sort • 1.6 Insertion Sort • 1.7 Bottom-Up Merge Sorting • 1.7.1 Analysis of bottom-up merge sorting •
的指令(规则)。通俗点说,就是计算机解题的过程。在 这个过程中,无论是形成解题思路还是编写程序,都是在 实施某种算法。前者是推理实现的算法,后者是操作实现 的算法。
➢ 一个算法应该具有以下五个重要的特征:
➢ 有穷性: 一个算法必须保证执行有限步之后结束; ➢ 确切性: 算法的每一步骤必须有确切的定义;
2. “算法”的现代诠释 算法的现代意义十分类似于处方、过程、方法、规程、程
序,一个算法就是有穷规则的集合。其中,规则规定了一个 解决某一特定类型的问题的运算序列。
3. 学习“算法”的方法
一个算法应该是可以信赖的,而且学习一个算法直到彻 底掌握的最好方法是反复进行试验。
因此,遇到一个算法时,应该找出这个算法的一个例子, 给出该例子的要点进行试验。
2020/8/21
h
7
1.2 历史背景
20世纪,早期, 30年代 能否用有效的过程来求解问题受到关注
问题分类为:可解、不可解(存在有效过程来求解问题) 计算模型:存在模型,用此模型能建立一求解某问题的算法,--入- -可解的类 模型列举:歌德尔的递归函数,Church的Lamda演算,Post的波斯特机, Turing机。 Church论断:所有4个模型等效。如果一个问题在某一模型上可解,那么 在其他模型上都是可解的。=>“几乎所有”问题都是不可解的。
➢ 输入:一个算法有0个或多个输入,以刻画运算对象的初始情况; ➢ 输出:一个算法有一个或多个输出,以反映对输入数据加工后的
结果。没有输出的算法是毫无意义的; ➢ 可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限
次运算后即可完成。
2020/8/21
h
5
算法 几点说明
1. “算法”的 几个词:Algorithm、Logarithm、Algorism
2020/8/21
h
11
算法的描述方法
自然语言; 图表; 框图; 计算机语言或程序设计语言等。
如,汇编、C++、Java。
2020/8/21
h
12
1.3 二分搜索
• 假定元素满足:线序集合 • A[1…n] 中有x吗?
• 从头到尾的扫描,比较n次: 顺序搜索 • 顺序搜索适合无序的集合
• 有序的集合:BinarySearch P4
2020/8/21
h
2
Chapter 1 Basic Concepts in Algorithmic Analysis 内容
• 1.8 Time Complexity
• 1.8.1 Order of growth
• 1.8.2 The O-notation
• 1.8.3 The fl-notation
确定一个包含N个变量的多项式方程是否有整数解 简单理由陈述:P3Top
可判定性-〉可计算性理论, 可解性-〉计算理论; 有Digital Computer后,对可解问题的研究的要求越来越多。
程序,资源量,尽可能少使用资源(时间,空间)的有效算法的需求。 效率:指解决问题所需时间和空间 排序一组元素的算法作为研究的实例表明:设计了许多有效算法,解决 问题的效率将不会因其他方法而有大的提高。
• 要求能够写出:这个简单的算法,并分析
运算量。
2020/8/21
h
13
1.3- (例) 线性查找的时间评估
最小查找时间? 最好情况, A[1]=X
平均查找时间?P(i)=1/n, Tavg(n)=n/2
2020/8/21
h
10
算法的表达机制
【表达算法的选用该问题的一 个数学模型。
接着,弄清该问题数学模型在已知条件下的初 始状态和要求的结果状态,以及这两个状态之 间的隐含关系。
然后探索从数据模型的已知初始状态到达要求 的结果状态所需的运算步骤。
相关文档
最新文档