算法分析与设计第_2章
算法设计与分析知到章节答案智慧树2023年天津大学

算法设计与分析知到章节测试答案智慧树2023年最新天津大学第一章测试1.下列关于效率的说法正确的是()。
参考答案:提高程序效率的根本途径在于选择良好的设计方法,数据结构与算法;效率主要指处理机时间和存储器容量两个方面;效率是一个性能要求,其目标应该在需求分析时给出2.算法的时间复杂度取决于()。
参考答案:问题的规模;待处理数据的初态3.计算机算法指的是()。
参考答案:解决问题的有限运算序列4.归并排序法的时间复杂度和空间复杂度分别是()。
参考答案:O(nlog2n);O(n)5.将长度分别为m,n的两个单链表合并为一个单链表的时间复杂度为O(m+n)。
()参考答案:错6.用渐进表示法分析算法复杂度的增长趋势。
()参考答案:对7.算法分析的两个主要方面是时间复杂度和空间复杂度的分析。
()参考答案:对8.某算法所需时间由以下方程表示,求出该算法时间复杂度()。
参考答案:O(nlog2n)9.下列代码的时间复杂度是()。
参考答案:O(log2N)10.下列算法为在数组A[0,...,n-1]中找出最大值和最小值的元素,其平均比较次数为()。
参考答案:3n/2-3/2第二章测试1.可用Master方法求解的递归方程的形式为()。
参考答案:T(n)=aT(n/b)+f(n) , a≥1, b>1, 为整数, f(n)>0.2.参考答案:对3.假定,, 递归方程的解是. ( )参考答案:对4.假设数组A包含n个不同的元素,需要从数组A中找出n/2个元素,要求所找的n/2个元素的中点元素也是数组A的中点元素。
针对该问题的任何算法需要的时间复杂度的下限必为。
( )参考答案:错5.使用Master方法求解递归方程的解为().参考答案:6.考虑包含n个二维坐标点的集合S,其中n为偶数,且所有坐标点中的均不相同。
一条竖直的直线若能把S集合分成左右两部分坐标点个数相同的子集合,则称直线L为集合S的一条分界线。
若给定集合S,则可在时间内找到这条分界线L。
第2章算法效率分析基础

★ 渐进符号和基本效率类型
上节指出,效率分析主要关心的是一个算法的基本操作数随问题规模的 增长率(增长次数),即问题规模 n 变大情况下,该算法的基本操作数 增长的快慢(它是规模 n 的函数——增长函数)。为了对增长函数作出 比较和归类,通常使用三种符号:O,Ω,Θ(theta). 下面就这些符号先作一个非正式介绍(便于理解)。 T(n) 和 g(n) :定义在自然数集合上的任意非负函数(n取自然数); T(n) :算法的运行时间函数(常用基本操作数增长函数 C(n) 表示); g(n) :与增长函数作比较的函数。
答:10倍。(t 增加10倍,C(n)不变)
不考虑每个操作步在机器上具体的执行时间 t ,则时间耗费即为:
T ( n) C (n) 时间耗费即为基本操作数,为输入规模n的函数。
n的一次、二次函数分别称线性、二次增长率。2n 称指数增长率。
8
增长次数(增长率)
基本操作数(时间耗费)是输入规模 n 的函数,记为T(n) 。T(n) 随着 n 次数的增加而增加。函数值T(n) 增加快慢,决定于这个增长函数特性; 也就是说,线性增长函数的函数值增加较慢,二次增长函数增加较快, 指数增长函数最快。因此,我们最关心的就是函数的增长率,它决定了 算法的时间耗费(效率)。若输入规模 n 很小,无论是高效的算法还是 低效的算法,时间耗费差距不明显,所以算法分析针对大规模输入。 增长函数表:对于算法分析具有重要意义的函数值(近似值)
6
基本操作的选取例: 大多数排序算法是通过比较排序元素(键)来进行工作,因此它的基本 操作应选为键的比较操作,即算法中键的比较次数。 矩阵乘法(或多项式运算)需完成两种操作:乘法和加法。对多数机器 而言,乘法比加法更耗费时间,所以选取乘法为基本操作。 在定义了算法的输入规模 n 和基本操作后,我们就可以建立起一个算法 时间效率的分析框架:对规模为 n 的算法,通过统计其基本操作的 执行次数来度量算法的时间效率。(时间耗费 T 为输入规模 n 的函数) 分析框架的应用: 设 t 为算法的一个基本操作在特定机器上的执行时间,C(n) 为该算法需 执行的基本操作数。用下式来估计该算法在该机器上的运行时间:
《算法设计与分析基础(第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.考虑下面的算法。
(陈慧南 第3版)算法设计与分析——第2章课后习题答案

因此 T (n) (n 2 ) (3) a 28, b 3, f n cn3
nlogb a nlog3 28 n3.033 ,则 f (n) c n 2 (nlogb a - ) ,其中可取 =0.04 。符合主定理
的情况 1 ,因此 T (n) (n3.033 )
21 21 当 n n0 时, f n g n ,所以 f n = g n 2 2
(2) f n n 2 logn , g n n log 2 n
2 当 n 4 时, f n n 2 logn n 2 , g n n log 2 n n 。因此可取 n0 4, c 1 ,当
g n
(1) f n 20n logn , g n n+ log 3 n
f n 20n logn 21n , g n n+ log 3 当 n 3 时, logn n log3 n 2n n 因此
因此可取 n0 3, c
f n g n ,所以 f n = g n
2-12 将下列时间函数按增长率的非递减次序排列
3 2
n
, log n , log 2 n , n log n , n ! , log(log(n)) , 2 n , n1 log n , n 2
答: n1 log n
f ( n ) ( n m )
证明:
f (n) am nm am1nm1 a1n a0 F (n) am n m am1 n m1
a1 n a0
由 F (n) 单调性易知,存在 nt 0 ,使得 F (n) 取 n 1 ,且 nt0 nt , F (nt0 ) 0 ,则 当 n nt0 时, F (n) 0 即: f (n) am n m am1 n m1
《算法设计与分析》(全)

1.1、算法与程序
程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。 例如操作系统,是一个在无限循环中执行的程序, 因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个 问题由操作系统中的一个子程序通过特定的算法来实 现。该子程序得到输出结果后便终止。
渐近分析记号的若干性质
(1)传递性: ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= O(g(n)), g(n)= O (h(n)) f(n)= O (h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= o(g(n)), g(n)= o(h(n)) f(n)= o(h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); (2)反身性: ➢ f(n)= (f(n));f(n)= O(f(n));f(n)= (f(n)). (3)对称性: ➢ f(n)= (g(n)) g(n)= (f(n)) . (4)互对称性: ➢ f(n)= O(g(n)) g(n)= (f(n)) ; ➢ f(n)= o(g(n)) g(n)= (f(n)) ;
巢湖学院计算机科学与技术系
渐近分析记号的若干性质
规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: ➢ 对于任意f1(n) O(f(n)) ,存在正常数c1和自然数n1,使得对
所有n n1,有f1(n) c1f(n) 。 ➢ 类似地,对于任意g1(n) O(g(n)) ,存在正常数c2和自然数
巢湖学院计算机科学与技术系
第1章 算法引论
算法-第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++版 王红梅 清华大学出版社)

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)所得实验结果依赖于计算机的软硬件等环境因素
算法设计与分析(霍红卫)-第2章-分治法

第2章 分 治 法
我们可以很容易解决这个问题。利用这样一个事实:渐近 表示法只要求对n≥n0,T(n)≤cn lb n成立,其中n0是一个可以选择 的常数。由于对于n>3,递归方程并不直接依赖T(1),因此可设 n0=2,选择T(2)和T(3)作为归纳证明中的边界条件。由递归方程 可得T(2)=4和T(3)=5。此时只要选择c≥2,就会使得T(2)≤c·2·lb 2 和 T(3)≤c·3·lb 3 成 立 。 因 此 , 只 要 选 择 n0=2 和 c≥2 , 则 有 T(n)≤cn lb n成立。
3ic(n/4i)2=(3/16) icn2 i=0,1,…,log4n-1
深度为log4n的最后一层有3log4 n nlog4 3 个结点,每个结点的
开销为T(1),该层总开销为 nlog4 3T (1) ,即 Θ(nlog4 3)。
第2章 分 治 法
将所有层的开销相加得到整棵树的开销:
T (n) cn2
T(n)=2T(n/2)+n ≤2(c[n/2]lb[n/2])+n =cn lb n/2+n =cn lb n-cn lb 2+n =cn lb n-cn+n =cn lb n-(c-1)n
最后一步在c≥1时成立。≤cn lb n
第2章 分 治 法
下面证明猜测对于边界条件成立, 即证明对于选择的常 数c,T(n)≤cn lb n对于边界条件成立。 这个要求有时会产生 一些问题。 假设T(1)=1是递归方程的惟一边界条件,那么对 于n=1,T(1)≤c·1·lb 1=0与T(1)=1发生矛盾。因此,归纳法中 的归纳基础不成立。
3
cn2
3
2
cn2
3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:若算法的两个部分的时间复杂度分别为 T1(n)=O(f(n)) 和 T2(n)=O(g(n)),
则总的时间复杂度为: T(n)=T1(n)+T2(n)=O(max(f(n),g(n)))。
2020/6/21
2020/6/21
23
哈尔滨工业大学(威海)
在图上定义的许多组合优化问题是NP完全问题。 这类问题属于较难解的问题,至今没有找到多项式时 间算法,也很可能根本没有多项式时间算法。遇到这 类问题时,通常从以下几个方面来考虑并寻求解决办 法:
1)特殊情形特殊方法
2)动态规划和分枝限界方法
3)概率分析
4)近似算法
定义3:当 f(N)=Ο(g(N)) 且 f(N)=Ω(g(N))时,则记 f(N)=θ(g(N))。也就是说f(N)与g(N)同阶。
定义4:如果对于任意给定的S≥0,都存在非负整数N0,使 得当N≥N0时有f(N)≤Sg(N),则称函数f(N)当N充分大时, 比g(N)低阶,记为f(N)=o(g(N))。
2020/6/21
16
哈尔滨工业大学(威海)
6.算法时间复杂度的最好情况和最坏情况
确定能反映出算法在各种情况下工作的数据集, 选取的数 据要能够反映、代表各种计算情况下的估算, 包括最好情 况下的时间复杂度(时间复杂度下界, 一般记为Tmax)、最 坏情况下的时间复杂度(时间复杂度上界, 一般记为Tmin)、 平均情况下的时间复杂度(一般记为Tavg)和有代表性的情 况, 通过使用这些数据配置来运行算法,以了解算法的性能。
2020/6/21
6
哈尔滨工业大学(威海)
3.时间复杂度估算
因为:
算法=控制结构+原操作(固有数据类型的操作)
所以:
算法的执行时间= 原操作的执行次数*原操作
语句的频度指的是该语句重复执行的次数。
一个算法转换为程序后所耗费的时间,除了与所用的计算软、 硬件环境有关外,主要取决于算法中指令重复执行的次数,即语 句的频度相关。
(1) x=0;y=0;
(2) for(k=1;k<=n;k++)
(3)
x++;
(4) for(i=1;i<=n;i++)
(5)
for( j=1;j<=n;j++)
(6)
y++;
该算法段的时间复杂度为T(n)=Ο(n2)。 当有若干个循环语句时,算法的时间复杂度是由嵌套层 数最多的循环语句中最内层语句的频度f(n)决定的。
算法的空间复杂度是指算法在执行过程中所占辅助存储 空间的大小(也有课本定义为所占全部存储空间的大小), 用 S(n)表示。与算法的时间复杂度相同,算法的空间复杂度 S(n)也可表示为:
S(n)=Ο(g(n)) 表示随着问题规模n的增大, 算法运行所需存储量的增长率 与g(n)的增长率相同。
2020/6/21
2020/6/21
22
哈尔滨工业大学(威海)
复杂性理论中最具理论意义的当数NP完全性问题, 这类问题在下述意义下具有同等的难度:即要么每个NP 完全问题都存在多项式时间的算法(即通常所指的有效 算法);要么所有NP完全问题都不存在多项式时间的算 法。
目前已知的NP完全问题就有2000多个,其中有许多是 非常重要的问题,如:货郎问题、调度问题、最大团问题、 最大独立集问题、Steiner树问题、背包问题、装箱问 题、…等等。
for( j=1;j<=n;++j) { c[i,j]=0;
for(k=0;k<=n;++k) c[i,j]= c[i,j]+a[i,k]*b[k,j];
}
该算法的基本操作是乘法操作,时间复杂度为n3
2020/6/21
9
哈尔滨工业大学(威海)
当一个算法的算法运行时间为n2+n+1时,由于
n2+n+1与n2的数量级相等,称算法的渐进时间复杂度 (简称算法的时间复杂度)为:
2020/6/21
7
哈尔滨工业大学(威海)
一个算法中所有语句的频度之和构成了该算 法的运行时间。
例如: for( j=1;j<=n;++j) for(k=1;k<=n;++k) ++x;
语句“++x、k<=n、++k”的频度是n2, 语句“ j=1”的频度是1, 语句“j<=n;++j 、k=1”的频度是n。 算法运行时间为:3*n2+3n+1
可以在多项式时间内验证一个解是否正确的问题称为P 问题,亦称为易验证问题类。
简单地说,存在多项式时间的算法的一类问题,称 之为P类问题,而像梵塔问题、推销员旅行问题等问题, 至今没有找到多项式时间算法解的一类问题,称之为NP 类问题。
NP问题中复杂性最高的一个子类,就是NP完全问 题(NPC问题,C代表complete)。NPC问题存在着一个令 人惊讶的性质,即如果一个NPC问题存在多项式时间的算 法 , 则 所 有 的 NP 问 题 都 可 以 在 多 项 式 时 间 内 求 解 , 即 P=NP成立!! 一般认为NPC问题是难解的问题类。
第2章算法分析基础
主要内容
算法分析体系及计量 算法分析实例
2020/6/21
1
哈尔滨工业大学(威海)
2.1 算法分析体系及计量
算法分析的任务: 对设计出的每一个具体的算法,利用数
学工具,讨论其复杂度。
2020/6/21
2
哈尔滨工业大学(威海)
2.1.1 算法分析的评价体系
对算法的评价有两个大的方面:
2020/6/21
14
哈尔滨工业大学(威海)
定义1:如果存在两个正常数c和n0,对于所有的n=n0,有 |f(n)|≤c|g(n)|,则记作 : f(n)=Ο(g(n))。
定义2:如果存在两个正常数c和n0,对于所有的n=n0,有 |f(n)|≥c|g(n)|,则记作 : f(n)=Ω(g(n))。
5)启发式算法
2020/6/21
24
哈尔滨工业大学(威海)
2.2 算法分析实例
具体算法的时间复杂度和空间复杂度往往是 不独立的,在算法设计中要在时间效率和空间效率 之间折衷。
2.2.1 非递归算法分析
1.仅依赖于问题规模的时间复杂度
有一类简单的问题,其操作具有普遍性,也 就是说对所有的数据均等价地进行处理,这类算法 的时间复杂度,很容易分析。
13
哈尔滨工业大学(威海)
4.问题时间复杂度的上界和下界
复杂度的上界和下界是用以估计问题所需某 资源的复杂程度的界限函数。如果找到解某问 题的算法,其资源的复杂度都必须小于u(n), 则 u(n)是问题本身复杂度的一个上界。如果对任 何算法,其复杂度都必需大于l(n),则l(n)是问 题复杂度的一个下界。
2020/6/21
25
哈尔滨工业大学(威海)
【例1】交换i和j的内容。
temp=i;i=j;j=temp;
以上三条单个语句的频度均为1,该算法段的执行时间 是一个与问题规模n无关的常数。算法的时间复杂度为常 数阶,记作T(n)=Ο(1)。
2020/6/21
26
哈尔滨工业大学义5:若g(N)=o(f(N)), 即当N充分大时, f(N)的阶比g(N) 高,则记f(N)=ω(g(N))。
2020/6/21
15
哈尔滨工业大学(威海)
5.平均性态
用各种特定输入下的基本运算次数的带权平均值来度量 算法的时间复杂度。
f (n) p( x)t ( x) xDn
x 代表所有可能输入中的某个特定输入 p(x)是x出现的概率 t(x)是算法输入为x时所执行的基本运算次数 Dn表示当规模为n时,算法执行时所有可能输入的集合
一、人对算法的维护的方便性
算法的维护工作:编写、调试、改正和功能扩充
算法的要求:可读性、适用范围、通用性、可重用性
可扩充性。
二、算法在实现运行时占有的机器资源的多少即
算法的运行的时间和空间效率
算法在完成功能的前题下最好是占用空间少而且执行
时间短。
另外在算法实现时,要考虑算法在运行过程中与使用者进
行交互的情况。这就要求,算法的交互部分要具有友好性和健
W (n) max{t(x)} xDN
B(n) min{t(x)} xDn
2020/6/21
17
哈尔滨工业大学(威海)
2.1.3 算法的空间复杂性
算法的存储量
1) 输入数据所占空间; 2) 算法本身所占空间; 3) 辅助变量所占空间。
2020/6/21
18
哈尔滨工业大学(威海)
研究算法的空间效率, 只需要分析除输入和算法之外的 额外空间。 若所需额外空间相对于输入数据量来说是常数, 则称此算法为原地工作, 否则,它应当是规模的一个函数。
2020/6/21
27
哈尔滨工业大学(威海)
【例3】变量计数之二。
(1) x=1;
(2) for(i=1;i<=n;i++)
(3) for(j=1;j<=i;j++)
(4) for(k=1;k<=j;k++)
(5)
x++;
试等等。
2020/6/21
4
哈尔滨工业大学(威海)
2.1.2 算法的时间复杂性
1.和算法执行时间相关的因素
1)问题中数据存储的数据结构 2)算法采用的数学模型 3)算法设计的策略 4)问题的规模 5)实现算法的程序设计语言 6)编译算法产生的机器代码的质量 7)计算机执行指令的速度