算法设计与分析-第1章
算法设计与分析知到章节答案智慧树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。
算法分析与设计 第1章习题答案 1-1,1-2,1-3,1-6

第一章习题(1-1,1-2,1-3,1-6)1-1 求下列函数的渐进表达式3n2+10n = O(n2)n2/10+2n = O(2n)21+1/n = O(1)logn3 = O(logn)10log3n = O(n)知识点:如果存在正的常数C和自然数N0,使得:当N>=N0时有f(N)<=Cg(N),则称f(N)当N充分大时上有界,且g(N)是它的一个上界,记为f(N)=O(g(N)).这时,可以说f(N)的阶不高于g(N)的阶。
1-2 论O(1)和O(2)的区别O(1)和O(2)差别仅在于其中的常数因子,根据渐进上界记号O的定义可知,O(1)=O(2)。
1-3 从低到高排列以下表达式(按渐进阶排列以下表达式)结果:2 logn n2/320n 4n23n n! 分析:当n>=1时,有logn< n2/3当n>=7时,有3n < n!补充:当n>=4时,有logn> n1/31-6 对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或f(n)=Ω(g(n))或f(n)=Θ(g(n))。
知识点:f(n)的阶不高于g(n)的阶:f(n)=O(g(n));f(n)的阶不低于g(n)的阶:f(n)=Ω(g(n));f(n)与g(n) 同阶:f(n)=Θ(g(n)) (1)f(n)= logn2 ; g(n)= logn+5f(n)与g(n)同阶,故f(n)=Θ(g(n)) (2) f(n)= logn2 ; g(n)= n1/2当n>=8时,f(n)<=g(n),故f(n)=O(g(n))分析:此类题目不易直接看出阶的高低,可用几个数字代入观察结果。
如依次用n=1, 21, 22, 23, 26, 28, 210 (3) f(n)= n ; g(n)= log2nf(n)=Ω(g(n))(4) f(n)= nlogn+n; g(n)= lognf(n)=Ω(g(n))(5) f(n)= 10 ; g(n)= log10f(n)=Θ(g(n))(6) f(n)= log2n ; g(n)= lognf(n)=Ω(g(n))(7) f(n)= 2n ; g(n)= 100 n2f(n)=Ω(g(n))(8) f(n)= 2n ; g(n)= 3nf(n)=O(g(n))。
算法设计技巧与分析答案

算法设计技巧与分析参考答案第1章算法分析基本概念(a)6 (b)5 (c)6 (d)6算法执行了7+6+5+4+3+2+1=28次比较(a)算法MODSELECTIONSORT执行的元素赋值的最少次数是0,元素已按非降序排列的时候达到最小值。
(b) 算法MODSELECTIONSORT执行的元素赋值的最多次数是3(1)2n n ,元素已按非升序排列的时候达到最小值。
由上图可以看到执行的比较次数为1+1+2+2+2+6+2=16次。
由上图可以得出比较次数为5+6+6+9=26次。
FTF,TTT,FTF,TFF,FTF(a) 执行该算法,元素比较的最少次数是n-1。
元素已按非降序排列时候达到最小值。
(b) 执行该算法,元素比较的最多次数是(1)2n n -。
元素已按非升序排列时候达到最大值。
(c) 执行该算法,元素赋值的最少次数是0。
元素已按非降序排列时候达到最小值。
(d) 执行该算法,元素赋值的最多次数是3(1)2n n -。
元素已按非升序排列时候达到最大值。
(e)n 用O 符号和Ω符号表示算法BUBBLESORT 的运行时间:2()t O n =,()t n =Ω(f)不可以用Θ符号来表示算法的运行时间:Θ是用来表示算法的精确阶的,而本算法运行时间由线性到平方排列,因此不能用这一符号表示。
不能用p 关系来比较2n 和2100n 增长的阶。
∵221lim0100100n n n →∞=≠ 2n ∴不是2(100)o n 的,即不能用p 关系来比较2n 和2100n 增长的阶。
(a)当n 为2的幂时,第六步执行的最大次数是:12,2k k n j -==时,11[log ]log n ni i k n n n ====∑∑(b)由(a)可以得到:当每一次循环j 都为2的幂时,第六步执行的次数最大,则当33,22k kmn j ===(其中32k 取整)时,11[log(31)]log(1)n nkii i m n n ===-=-∑∑(c)用O 符号表示的算法的时间复杂性是(log )O n n 已证明n=2k 的情况,下面证明n=2k +1的情况:因为有⎥⎦⎥⎢⎣⎢+=⎥⎦⎥⎢⎣⎢21222k k所以n=2k +1时,第六步执行的最大次数仍是n log n 。
算法设计与分析-王-第1章-算法设计基础

2)有没有已经解决了的类似问题可供借鉴?
1.4 算法设计的一般过程
在模型建立好了以后,应该依据所选定的模型对问 题重新陈述,并考虑下列问题: (1)模型是否清楚地表达了与问题有关的所有重要
的信息?
(2)模型中是否存在与要求的结果相关的数学量? (3)模型是否正确反映了输入、输出的关系? (4)对这个模型处理起来困难吗?
程序设计研究的四个层次:
算法→方法学→语言→工具
理由2:提高分析问题的能力
算法的形式化→思维的逻辑性、条理性
1.2 算法及其重要特性
一、算法以及算法与程序的区别
例:欧几里德算法——辗转相除法求两个自然数 m 和 n 的最大公约数
m n
欧几里德算法
r
1.2 算法及其重要特性
欧几里德算法
① 输入m 和nห้องสมุดไป่ตู้如果m<n,则m、n互换;
对不合法的输入能作出相适应的反映并进行处理。 (2) 健壮性(robustness): 算法对非法输入的抵抗能力, 即对于错误的输入,算法应能识别并做出处理,而不是 产生错误动作或陷入瘫痪。 (3)可读性:算法容易理解和实现,它有助于人们对算 法的理解、调试和修改。 (4) 时间效率高:运行时间短。 (5) 空间效率高:占用的存储空间尽量少。
算法设计与分析
Design and Analysis of Computer Algorithms
高曙
教材:
算法设计与分析(第二版),清华大学出版社,王红梅, 胡明 编著
参考书目:
Introduction to Algorithms, Third Edition, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,机械工 业出版社,2012
算法设计与分析(第2版) 郑宗汉 第1章-1

8
Байду номын сангаас
学习要求
深刻理解每一类算法的思想及其实现
能熟练运用所学知识解决实际问题
培养提高计算思维能力
9
考核方式
Homework and Reading: 20%
Final Exam (Written Test): 80%
10
第1章 算法的基本概念
1.1 引言
1.1.1 算法的定义和特性
c %3 0
(1.1.3)
16
1.1.2 算法的设计和复杂性分析
百鸡问题的穷举法
输入:所购买的3种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[],m[],s[]
1. void chicken_question(int n, int &k, int g[], int m[], int s[]) 2. { 3. int a,b,c; 分析发现:只能买到n/5 4. k = 0; 只公鸡,n/3只母鸡,将 5. for (a = 0; a <= n; a++) { 算法进行改进。 6. for ( b = 0; b <= n; b++) { 7. for (c = 0; c <= n; c++) { 8. if ((a + b + c == n) && (5 * a + 3 * b + c / 3 == n) && (c%3 == 0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. } 14. } 15. } 16. } 17. }
《算法设计与分析》(全)

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章 算法引论
《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法及其分析》课后选择题答案及详解第1 章——概论1.下列关于算法的说法中正确的有()。
Ⅰ.求解某一类问题的算法是唯一的Ⅱ.算法必须在有限步操作之后停止Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊Ⅳ.算法执行后一定产生确定的结果A.1个B.2个C.3个D.4个2.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是()。
A.T(n)=T(n-1)+1,T(1)=1B.T(n)=2nC.T(n)= T(n/2)+1,T(1)=1D.T(n)=3nlog2n答案解析:1.答:由于算法具有有穷性、确定性和输出性,因而Ⅱ、Ⅲ、Ⅳ正确,而解决某一类问题的算法不一定是唯一的。
答案为C。
2.答:选项A的时间复杂度为O(n)。
选项B的时间复杂度为O(n)。
选项C 的时间复杂度为O(log2n)。
选项D的时间复杂度为O(nlog2n)。
答案为C。
第3 章─分治法1.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。
这要求原问题和子问题()。
A.问题规模相同,问题性质相同B.问题规模相同,问题性质不同C.问题规模不同,问题性质相同D.问题规模不同,问题性质不同2.在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n个元素进行划分,如何选择划分基准?下面()答案解释最合理。
A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。
但不同方法,算法复杂度上界可能不同3.对于下列二分查找算法,以下正确的是()。
A.intbinarySearch(inta[],intn,int x){intlow=0,high=n-1;while(low<=high){intmid=(low+high)/2;if(x==a[mid])returnmid;if(x>a[mid])low=mid;elsehigh=mid;}return –1;}B.intbinarySearch(inta[],intn,int x) { intlow=0,high=n-1;while(low+1!=high){intmid=(low+high)/2;if(x>=a[mid])low=mid;elsehigh=mid;}if(x==a[low])returnlow;elsereturn –1;}C.intbinarySearch(inta[],intn,intx) { intlow=0,high=n-1;while(low<high-1){intmid=(low+high)/2;if(x<a[mid])high=mid;elselow=mid;}if(x==a[low])returnlow;elsereturn –1;}D.intbinarySearch(inta[],intn,int x) {if(n>0&&x>=a[0]){intlow= 0,high=n-1;while(low<high){intmid=(low+high+1)/2;if(x<a[mid])high=mid-1;elselow=mid;}if(x==a[low])returnlow;}return –1;}答案解析:1.答:C。
算法设计与分析基础

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
的质因数分解式中,找出所有公因数。 第四步:将第三步找到的公因数相乘,结果为所求的
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
min{k 1 ( n k 1)t ik }
n
求解方法 • 贪心策略:加工时间短的先做 • 如何描述这个方法?这个方法是否对所有的实例都能得到 最优解?如何证明?这个方法的效率如何?
例2 排序算法的评价
已有的排序算法:考察元素比较次数
输入:数组L[1..n],其元素按照从小到大排列,数 x. 输出:若 x 在L中,输出 x 的位置下标 j;否则输出0. 1. j1 2. while jn and x>L[j] do jj+1 3. if x<L[j] or j>n then j0 4. return j
1.3 数学基础 :函数的渐近的界
有关阶的一些性质
定理1.2 (1) 如果 (2) 如果 (3) 如果 设 f, g, h是定义域为自然数集合的函数, f=O(g) 且 g=O(h),那么 f=O(h). f=(g) 且 g=(h),那么 f=(h). f=(g) 和 g=(h),那么 f=(h).
定理1.3 假设 f 和 g是定义域为自然数集合的函数,若对某 个其它的函数 h, 有 f=O(h) 和 g=O(h),那么 f + g = O(h).
定义1.1 设 f 和g是定义域为自然数集 N上的函数. (1) 若存在正数 c 和 n0使得对一切 n n0有0 f(n) cg(n) 成 立, 则称 f(n) 的渐近的上界是 g(n),记作 f (n) = O(g(n)). (2) 若存在正数 c 和 n0,使得对一切 n n0有 0 cg(n) f(n) 成立, 则称 f(n)的渐近的下界是 g(n),记作 f (n) = (g(n)).
结果:
2 , n! , n2n , ( 3 / 2)n , (logn)log n nlog log n , n3 , log(n! ) Θ( n logn), n Θ( 2log n ), log2 n, logn, n1 / log n Θ(1) logn , loglogn,
2n
k k
n
求和实例
例6 求和 (1) 解
1 k 1 k ( k 1)
n 1
n 1
(2) t 2
t 1
k
t 1
n 1 1 1 1 (1) ( ) k 1 k 1 k ( k 1) k 1 k n 1 1 n 1 1 1 n 1 1 1 n k 1 k k 1 k 1 k 1 k k 2 k n 1
检索问题的时间估计
检索问题
• • • • • 输入:非降顺序排列的数组 L,元素数为n; 数x 输出: j. 若x在L中,j 是 x 首次出现的序标;否则 j =0 算法: 顺序搜索 最坏情况下时间:W(n)=n 平均情况:假设 xL 的概率为 p,x 在 L 不同位置等概分 布. 实例集 S,实例IS的概率是 pI, 算法对I 的基本运算次 数为 tI,平均情况下的时间复杂度为
实例
10 6
c1
5 9
c2
c3
9
3
现状:至今没有找到有效的算法, 存在大量问题与它难度等价 问题:是否存在有效算法? 如何处理这类问题? c4
算法的基本概念
• 问题
需要回答的一般性提问,通常含有若干参数,对参数的一 组赋值就得到问题的一个实例.
• 算法
有限条指令的集合,这个指令集确定了解决某个问题的运 算或操作的序列.
对数函数
符号: log n log2 n log n (log n )
k k
log log n log(logn ) 性质: logb n o( n α ) α 0 a log
b
n
n log
b
a
logk n Θ ( logl n )
阶乘
Stirling公式
n! = o(nn)
上述的c为某个常数
例5:函数的阶
按照阶从高到低对以下函数排序:
log2 n, 1, n! , n2n , n1 / log n , ( 3 / 2)n ,
2n
logn , (logn)log n ,
2 , nlog log n , n 3 , loglogn, n logn, n, 2log n , logn, log(n! )
( 2)
t2
t 1 k t 1
k
t 1
t (2 2 ) t 2 t 2
t t 1 t t 1 t 1 t 1 k 1 t 0 t k 1 t 0
k
k
k
t 1
t 2 ( t 1)2t
t t 1 t 0
k
k 1
t 2 t 2 2t k 2k ( 2k 1) ( k 1)2k 1
取整函数
x:表示小于等于 x 的最大的整数 x:表示大于等于 x 的最小的整数 取整函数具有下述性质: (1) x1< x x x < x+1 (2) x+n = x+n, x+n = x+n,其中n为整数
(3) n n (4)
2 2 n
• 有穷个城市的集合C = { c1, c2, …, cm}, 距离 d(ci, cj) = d(cj, ci)Z+, 1 i < j m • 求 1, 2 …, m 的排列 k1, k2, …, km使得
min{ d (cki , cki1 ) d (ckm , ck1 )}
i 1 m 1
t
求和实例
k 例7 估计 k 的上界. k 1 3 解 由
n
k k 1 a k k , a k 1 k 1 3 3
得
ak 1 1 k 1 2 ak 3 k 3
k 1 2 k 1 1 ( ) k 3 k 1 3 k 1 3 3 n
1 1 2 3
实例:求最大公约数
算法1.1 Euclid(m,n)
输入:非负整数 m, n,其中m与n不全为0 输出:m 与 n 的最大公约数 1. while m>0 do 2. r n mod m 3. n m 4. m r 5. return n
实例:改进的顺序检索
算法1.2 Search(L,x)
n! = (2n) log(n!) = (nlogn)
n n 1 n! 2n ( ) (1 Θ( )) e n
log(n! ) ln(n! ) / ln 2 ln(n! ) lim lim n n log n n n ln n / ln 2 n n ln n n n c n ln( 2n ( )( 1 ( ))) ln 2n n ln e n lim e 1 lim n n n ln n n ln n lim
有关定理
定理1.1 设 f 和g是定义域为自然数集合的函数.
f ( n) (1) 如果 l i m 存在且等于某个常数c>0, 那么 n g ( n)
f(n)=(g(n)).
f ( n) im 0 ,那么 f(n)=o(g(n)). (2) 如果 l n g ( n) f ( n) im (3) 如果 l ,那么 f(n)=(g(n)). n g ( n)
A(n) IS t I pI
A( n) i
i 1 n
p p( n 1) (1 p)n (1 p)n n 2
1.2 算法的伪码描述
• • • • • • • 赋值语句: 分支语句:if …then … [else…] 循环语句:while, for,repeat until 转向语句:goto 输出语句:return 调用:直接写过程的名字 注释://…
算法设计与分析
2011
课程主要内容
近似 算法
随机 算法
处理难解问 题的策略
问题处理策略 计算复杂性理论 算法分析方法 算法设计技术 基础知识
NP 完全理论 算法分析与问题的计算复杂性 分治 动态 贪心 回溯与 策略 规划 算法 分支限界 数学基础、数据结构
第 1章
1.1 有关算法的基本概念
基础知识
实例
例4 设 f ( n)
1 2 n 3n , 证明 f(n) =(n2). 2
证 因为
1 2 n 3n 1 f ( n) lim 2 lim 2 2 n n n n 2
根据定理1.1有 f(n) =(n2). 可以证明:多项式函数,幂函数的阶低于指数函数
nd=o(rn),r>1,d>0
• 插入排序、冒泡排序:最坏和平均状况下都为O(n2) • 快速排序:最坏状况为O(n2),平均状况下为O(nlogn) • 堆排序、二分归并排序:最坏和平均状况下都为O(nlogn) …
问题
• 那个排序算法效率最高? • 是否可以找到更好的算法?排序问题的计算难度如何估计?
例3 货郎问题
货郎问题:
(3) 若对任意正数 c 都存在 n0,使得当 n n0 时有 0 f(n) < cg(n) 成立, 则记作 f(n)= o(g(n)).
(4) 若对于任意正数 c 都存在 n0,使得当 n n0 时有 0 cg(n) < f(n)成立, 则记作 f(n)= (g(n)). (5) 若 f (n) = O(g(n)) 且 f (n) = (g(n)), 则记作 f (n)=(g(n)). 例 f(n)=n2+n,f(n)=O(n2), f(n)=O(n3), f(n)=o(n3), f(n)=(n2)
几个例子 问题、算法、算法的时间复杂度
1.2 算法的伪码表示