算法设计第一章

合集下载

算法分析与设计 第1章习题答案 1-1,1-2,1-3,1-6

算法分析与设计 第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章-算法设计基础

算法设计与分析-王-第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

计算机专业课《算法》_第一章算法概述

计算机专业课《算法》_第一章算法概述

几个复杂性参照函数
若干符号及其意义:O(f),(f),(f),o(f)
• 在下面的讨论中,对所有n,f(n) 0,g(n) 0。
(1)渐近上界记号O O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
0 f(n) cg(n) }
(2)渐近下界记号 (g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
有限的计算步后停止。
2.确定性:每一条规则都是明确、无二义的。 3. 可行性:每一计算步都是基本的、可实现的。
4. 输入: 算法开始执行执行之前指定初始值 (有零个或多个输入) 。 5. 输出:产生与输入相关的量(有至少一个)。 二、算法的又一描述方式
设:四元组(Q, I, , f ).
其中:Q:状态集合; I, :Q的子集,分别代表输入和输出 f: 定义在Q之上的一个映射,
1.2 算法复杂性分析(1) • • • • 计算机资源:时间、空间 复杂性:所需资源多少 算法复杂性:算法运行时所需资源的量 算法复杂性分析目的:分析问题复杂性、 选择最好算法 • 时间复杂性:所需时间资源的量T(n) • 空间复杂性:所需空间资源的量S(n)
• 其中n是问题的规模(输入大小)
算法复杂性分析(2) • 算法是否可行? • 可计算理论 • 时间复杂性细化 • 三种典型的复杂性: 最坏、最好、平均复杂性
且有:若q Q ,则:f(q) = q。
1. 计算序列描述:
若对于I 的每一个输入x,由f 定义一个计算序列: y0 , y1 , y2 , …… 。 其中:y0 = x; yk+1 = f( yk ) (k 0)。
若一个计算序列在第k步终止,且k是使yK 的最小整数,则称yk是由x产生的输出。 2. 算法描述: 一个算法是对于I 中所有输入x, 都能在有穷步 内终止的一个计算序列。

算法设计与分析(第2版) 郑宗汉 第1章-1

算法设计与分析(第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. }

(陈慧南 第3版)算法设计与分析——第1章课后习题答案

(陈慧南 第3版)算法设计与分析——第1章课后习题答案
此时i1即在本次循环中先执行swapa0a1将第二个元素与第一个元素互换下面执行perma1n根据假设可知该语句产生以a1为第一个元素余下k1个元素的全排列
第一章课后习题
姓名:赵文浩 学号:16111204082 班级:2016 级计算机科学与技术
1-4 证明等式 gcd(m,n)=gcd(n mod m, m) 对每对正整数 m 和 n,m>0 都成立。
1-13 写一个递归算法和一个迭代算法计算二项式系数:
#include<stdio.h> int Coef_recursive(int n,int m);//递归算法 int Coef_iteration(int n,int m);//迭代算法 int Factorial(int n);//计算 n 的阶乘 int main() { int n,m;
1-12 试用归纳法证明程序 1-7 的排列产生器算法的正确性。
证明:主函数中,程序调用 perm(a,0,n),实现排列产生器。 ① 当 n=1 时,即数组 a 中仅包含一个元素。函数内 k=0,与(n-1)=0 相等,因此函 数内仅执行 if(k==n-1)下的 for 语句块,且只执行一次。即将 a 数组中的一个元 素输出,实现了对一个元素的全排列。因此当 n=1 时,程序是显然正确的; ② 我们假设程序对于 n=k-1 仍能够满足条件, 将 k-1 个元素的全排列产生并输出; ③ 当 n=k 时,程序执行 else 下语句块的内容。首先执行 swap(a[0],a[0]),然后执 行 Perm(a,1,n),根据假设②可知,该语句能够产生以 a[0]为第一个元素,余下 (k-1)个元素的全排列; 然后再次执行 swap(a[0],a[0]), 并进行下一次循环。 此时 i=1, 即在本次循环中, 先执行 swap(a[0],a[1]), 将第二个元素与第一个元素互换, 下面执行 Perm(a,1,n), 根据假设②可知, 该语句产生以 a[1]为第一个元素, 余下(k-1)个元素的全排列; 以此类推,该循环每一次将各个元素调到首位,通过执行语句 Perm(a,1,n)以及 基于假设②,能够实现产生 k 个元素的全排列。 因此 n=k 时,程序仍满足条件。 ④ 综上所述,该排列器产生算法是正确的,证毕。

算法设计与分析王红梅第1章绪论

算法设计与分析王红梅第1章绪论

2021/6/12
}
15
清华大学出版社
算法设计与分析
⑷ 伪代码——算法语言
伪代码(Pseudocode):介于自然语言和 程序设计语言之间的方法,它采用某一程序 设计语言的基本语法,操作指令可以结合自 然语言来设计。
优点:表达能力强,抽象性强,容易理解
使用方法:7 ± 2
2021/6/12
16
清华大学出版社
欧几里德算法
1. r = m % n; 2. 循环直到 r 等于0
2.1 m = n; 2.2 n = r; 2.3 r = m % n; 3. 输出 n ;
2021/6/12
算法设计与分析
17
清华大学出版社
算法设计与分析
1.1.4 算法设计的一般过程
1.理解问题
2.预测所有可能的输入
3. 在精确解和近似解间做选择
算法设计与分析
1.1 算法的基本概念
1.1.1 为什么要学习算法 1.1.2 算法及其重要特性 1.1.3 算法的描述方法 1.1.4 算法设计的一般过程 1.1.5 重要的问题类型
2021/6/12
5
清华大学出版社
算法设计与分析
1.1.1 为什么要学习算法
理由1:算法——程序的灵魂
➢ 问题的求解过程:
14
清华大学出版社
算法设计与分析
#include <iostream.h>
int CommonFactor(int m, int n)

{ int r=m % n;

while (r!=0)

{ m=n;

n=r;

r=m % n; }

算法设计与分析知识点

第一章算法概述1、算法的五个性质:有穷性、确定性、能行性、输入、输出。

2、算法的复杂性取决于:(1)求解问题的规模(N) , (2)具体的输入数据(I),( 3)算法本身的设计(A),C=F(N,I,A。

3、算法的时间复杂度的上界,下界,同阶,低阶的表示。

4、常用算法的设计技术:分治法、动态规划法、贪心法、回溯法和分支界限法。

5、常用的几种数据结构:线性表、树、图。

第二章递归与分治1、递归算法的思想:将对较大规模的对象的操作归结为对较小规模的对象实施同样的操作。

递归的时间复杂性可归结为递归方程:1 11= 1T(n) <aT(n—b) + D(n) n> 1其中,a是子问题的个数,b是递减的步长,~表示递减方式,D(n)是合成子问题的开销。

递归元的递减方式~有两种:1、减法,即n -b,的形式。

2、除法,即n / b,的形式。

2、D(n)为常数c:这时,T(n) = 0(n P)。

D(n)为线形函数cn:r O(n) 当a. < b(NT(n) = < Ofnlog^n) "n = blljI O(I1P)二"A bl吋其中.p = log b a oD(n)为幕函数n x:r O(n x) 当a< D(b)II JT{ii) = O(ni1og b n) 'ia = D(b)ll].O(nr)D(b)lHJI:中,p= log b ao考虑下列递归方程:T(1) = 1⑴ T( n) = 4T(n/2) +n⑵ T(n) = 4T(n/2)+n2⑶ T(n) = 4T(n/2)+n3解:方程中均为a = 4,b = 2,其齐次解为n2。

对⑴,T a > b (D(n) = n) /• T(n) = 0(n);对⑵,•/ a = b2 (D(n) = n2) T(n) = O(n2iog n);对⑶,•/ a < b3(D(n) = n3) - T(n) = 0(n3);证明一个算法的正确性需要证明两点:1、算法的部分正确性。

计算机算法设计与分析(第5版)第1章

• 其中I是问题的规模为n的实例,p(I)是实 例I出现的概率。
算法渐近复杂性
• T(n) , as n ; • (T(n) - t(n) )/ T(n) 0 ,as n; • t(n)是T(n)的渐近性态,为算法的渐近复杂性。 • 在数学上, t(n)是T(n)的渐近表达式,是T(n)略去低阶
问题求解(Problem Solving)
理解问题 精确解或近似解
选择数据结构 算法设计策略
设计算法 证明正确性
分析算法 设计程序
算法复杂性分析
• 算法复杂性 = 算法所需要的计算机资源 • 算法的时间复杂性T(n); • 算法的空间复杂性S(n)。 • 其中n是问题的规模(输入大小)。
算法的时间复杂性
项留下的主项。它比T(n) 简单。
渐近分析的记号
• 在下面的讨论中,对所有n,f(n) 0,g(n) 0。 • (1)渐近上界记号O • O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
0 f(n) cg(n) } • (2)渐近下界记号 • (g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
• (1)最坏情况下的时间复杂性 • Tmax(n) = max{ T(I) | size(I)=n } • (2)最好情况下的时间复杂性 • Tmin(n) = min{ T(I) | size(I)=n } • (3)平均情况下的时间复杂性
• Tavg(n) = p(I )T (I ) size(I )n

for x > -1,
x ln(1 x) x 1 x

for any a > 0,
Hale Waihona Puke log b nlim

算法与程序设计第一章如何用计算机解决问题课件


水仙花数流程图描述
开始 N=100 N<=999 Y
N
N的个位数的三次方+N 的十位数的三次方+N的 Y 百位数的三次方=N N N=N+1 输出N值
结束
用伪代码描述水仙花数算法 For N=100 to 999 if N的个位数的三次方+N的十位数的三次方+N的百位数的三次方=N then 输出n end if next1
课堂练习: 分别用自然语言和流程图描述求解 1、所有水仙花数的问题。水仙花数是指一个三位数, 它的各位数的立方和正好等于该数本身。如 153=13+53+33。 2、设计统计前1000个自然数中的奇数的个数的流程图
3、设计算法:找出乘积为840的两个相邻偶数
水仙花数自然语言描述 1、将N的初始值赋为100 2、如果N的个位数的三次方加上N的十位数的三次 方再加上N的百位数的三次方等于N,输出N值,否则转 入第3步 3、如果N<=999,将N的值加1,转到第2步,否则转入 第4步 4、输出运算结果,结束程序
算法独立于任何具体的程序设计语言,一个算法 可以用多种程序设计语言来实现。
算法的特征
算法要有一个清晰的起始步,表示处理问题的起点, 且每一个步骤只能有一个确定的后继步骤(1算法的 确定性),从而组成一个步骤的有限序列(2算法的有 穷性);要有一个终止步(序列的终止)表示问题得到 解决或不能得到解决;每条规则必须是确定的、可 行的(3算法的可行性)、不能存在二义性。算法总是 对数据进行加工处理,因此,算法的执行过程中通 常要有数据4输入(0个或多个)和数据5输出(至少一 个)的步骤。
人解决问题的一般过程 观察问题→分析问题→脑中收集信息→根据已有的 知识、经验判断、推理→采用方法和步骤解决 简单地概括 ⑴明确问题 ⑵提出假设 ⑶验证假设

算法设计与分析 第1章


例1 f(n) = 2n + 3 = O(n) 当n≥3时,2n+3≤3n,所以,可选c = 3,n0 = 3。对于n≥n0,f(n) = 2n + 3≤3n,所以,f(n) = O(n),即2n + 3O(n)。这意味着,当n≥3 时,例1的程序步不会超过3n,2n + 3 = O(n)。
例2 f(n) = 10n2 + 4n + 2 = O(n2) 对于n≥2时,有10n2 + 4n + 2≤10n2 + 5n,并 且当n≥5时,5n≤n2,因此,可选c = 11, n0 = 5;对于n≥n0,f(n) = 10n2 + 4n + 2≤11n2,所 以f(n) = O(n2)。
算法设计与分析
湖南人文科技学院计算机系 授课:肖敏雷
邮箱:minlei_xiao@
关于本课程
课程目的:计算机算法设计与分析导引

不是一门试验或程序设计课程 也不是一门数学课程
教材:计算机算法设计与分析-王晓东 前导课:数据结构+程序设计 参考资料:

算法设计与分析—C++语言描述 陈慧南编 电子工业出版社 计算机算法基础(第三版) 余祥宣 华中科技大学
渐近时间复杂度 使用大O记号及下面定义的几种渐近表示法 表示的算法时间复杂度,称为算法的渐近时间复 杂度(asymptotic complexity)。 只要适当选择关键操作,算法的渐近时间复 杂度可以由关键操作的执行次数之和来计算。一 般地,关键操作的执行次数与问题的规模有关, 是n的函数。 关键操作通常是位于算法最内层循环的语句。
当 n≥n0 时 , 有 f(n)≥cg(n) , 则 记 做 f(n)=Ω
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、复杂性的计量
算法的复杂性(C):算法执行所需的时间和空间 的数量。
时间复杂性(T)
算法的复杂性(C)
空间复杂性(S)
11
1.2 算法复杂性分析
C F ( N , I , A)
问题的规模 输入 算法
T T ( N , I , A)
S S ( N , I , A)
12
1.2 算法复杂性分析
且 g (N ) 是它的一个上界,记为 f ( N ) O( g ( N )) , 也称 f (N ) 的阶不高于 g (N ) 的阶。
20
2)渐进性态的阶
1) N 1 ,有 3N 4 N ,所以 3N O( N )
2) N 1 ,有 N 1024 1025 N ,所以 N 1024 O( N )
4. 如果 g ( N ) O( f ( N )) ,则 O( f ) O( g ) O( f ) 5. 6.
f O( f )
O(Cf ( N )) O( f ( N ))
24
2)渐进性态的阶
(2)大表示法 (算法运行时间的下限)
如果存在正常数 C 和自然数 N 0 使得当 N N 0 时, 有 f ( N ) Cg ( N ) ,则称函数 f (N ) 在 N 充分大时 有下限,且 g (N ) 是它的一个下限,记为 f ( N ) ( g ( N )) , 也称 f (N ) 的阶不低于 g (N ) 的阶。
掌握算法渐进复杂性的数学表达
掌握用C++语言描述算法的方法
了解NP类问题的基本概念
6
1.1 算法与程序
1、算法
一系列将问题的输入转换为输出的计算 或操作步骤。
7
2.算法的性质
输入: 有外部提供的量作为算法的输入。
输出: 算法产生至少一个量作为输出。
确定性:组成算法的每条指令是清晰、无歧义的。 有限性:算法中每条指令的执行次数是有限的, 执行每条指令的时间也是有限的。
解: 复杂性 原来处理问题规模 速度提高以后
1000N
S1
2
10S1
3.16S2
10N 2
N
S2
S3
S3 +log10≈S3+3.32
29
练习:
例2:问题P的算法复杂度为T(n)=n3(毫秒),现改 善为T(n)=n2(毫秒)。问原来运行一小时的问题实 例,现在要运行多少时间?
解:设实例大小为n,
(2) n12 64n2 n1 8n
(3)由于 T (n) 为常数,因此算法可以解任意规模的问题。
14
1.2 算法复杂性分析
最坏情况:
Tmax ( N ) maxT ( N , I ) max ti ei ( N , I )
I DN I DN i 1 k
t i ei ( N , I * ) T ( N , I * )
i 1
k
最好情况: Tmin ( N ) minT ( N , I ) ti ei ( N , I ) T ( N , I )
I DN i 1
k
~
~
15
1.2 算法复杂性分析
平均情况:
Tavg ( N ) Fra bibliotekI D N
P( I )T ( N , I ) P( I ) t e ( N , I )
T (N ) T (N ) 0 T (N )
~
~
称 T ( N ) 是 T (N ) 当 N 时的渐进性态或渐进复杂性.
~
18
2、 复杂性的渐进性态
例: T ( N ) 3N 4N log N 7 ,则 T ( N ) 3N 2 。
2
~
~
T (N ) T (N ) 4 N log N 7 0( N ) 2 T (N ) 3N 4 N log N 7
常数级 对数级 线性级 多项式级
O(c ) O( N!)
N
指数级 阶乘级
27
4 算法复杂度的影响
a)对问题处理能力、运行时间有影响的因素有:
硬件设备的性能
系统软件
输入数据
b)起决定性作用的是算法渐近复杂度。 c)在问题规模较小时,常数因子也不可忽视。 d)实际工作中考虑的因素
28
练习:
例1:解决某问题有三种算法,复杂性分别为1000N、10N2、2N, 在一台机器上可处理问题的规模分别为S1、S2、S3 。若机器速 度提高到原来的10倍,问在同样时间内可处理问题的大小如何?
i i I D N i 1
k
输入I的概率
16
例 题 1-2
在一维整型数组 A[n] 中顺序查找与给定值 k 相等的元素(设计该 数组中有且仅有一个元素值为 k ),顺序查找算法如下:
Int Find(int A[], int n) { i:=0; while i<n i:=i+1; a t (a+s)
P类问题
NP类问题
Nondeterministic Polynomial
TSP, Subset-sum, vertex-cover, 3-SAT
32
小结:

算法的概念
算法的空间复杂度和时间复杂度。
大O表示法 、大 表示法、表示法。
33
时间复杂性:
元运算种类
T T ( N , I ) ti ei ( N , I )
i 1
k
元运算时间
元运算次数

13
例 题 1-1
(P7 1-4)
(1)设新机器在用同一算法在同样的时间 t 内能解输入规模 为 n1 的问题。
3 2 n1 t 3 2n , n1 n 6 64
3) N 10 ,有 2N 2 11N 10 3N 2 ,所以
2N 2 11N 10 O( N 2 )
21
2)渐进性态的阶
练习:1) f (n) 3n2 10n
n2 2) f (n) 2n 10
1 3) f (n) 21 n
3n2 10n O(n2 )
则 n3=3600*1000
n=153.3 ∴ 现在需要时间t=153.32毫秒≈ 23.5秒
30
1.3 NP完全性理论
O(1) O(log N ) O( N ) O( N )
c
常数级 对数级 线性级 多项式级
O(c ) O( N!)
N
指数级 阶乘级
易解问题
31
1.3 NP完全性理论
8
3、程序与算法的区别与内在联系
程序是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。
4、算法描述语言
自然语言、 流程图、 程序设计语言、 伪代码等。
9
5、问题求解(Problem Solving)
理解问题
数学模型
设计算法 证明正确性 设计程序
算法分析
10
1.2 算法复杂性分析
计算机算法设计与分析
1
algorithm@
123456
网易网盘
算法2013
2
参考书目:
1)
2)
王红梅,算法设计与分析,清华大学出版社,2006。
吕国英,算法设计与分析,清华大学出版社,2009。
3)
Alfred V. Aho等,(黄林鹏等译)计算机算法的设
计与分析,机械工业出版社,2007。 R. C. T. Lee,(王卫东译)算法设计与分析导引, 机械工业出版社,2007。
n2 2 n O(2 n ) 10
21
1 O(1) n
4) f (n) logn3 5) f (n) 10log3n
log n3 O(logn)
10log3n O(n)
22
2)渐进性态的阶
f (n) 3n 10n
2
g (n) n
2
3n 10n O(n )
最好情况:Tmin 3a 2t s
n
If A[i]==k
Break Reture i a
t
最坏情况: Tmax 2a (2t a s)n
}
分析:问题的规模为n,设元运算执行时间为赋值:a,判断:t,加法:s。
17
2、 复杂性的渐进性态
1)渐进性态
设 T (N ) 为算法 A 的时间复杂性函数,则它是 N 的单增函数, 如果存在一个函数 T ( N ) ,使得当 N 时,有
2 2
h( n ) n
3
3n2 10n O(n3 )
??
*上界的阶越低,结果就越有价值。
23
2)渐进性态的阶
运 算 法 则
1. 2. 3.
O( f ) O( g ) O(max( f , g ))
O( f ) O( g ) O( f g )
O( f ) O( g ) O( f g )
4)
3
内容安排:
一 算法概述 二 递归与分治策略(I) 三 动态规划 (I,H) 四 贪心算法 (I) 五 回溯法 (H) 六 分支限界法 (H)
4
第一章 算法概述
Algorithm Introduction
5
学习要求:
理解算法的概念 理解什么是程序,程序与算法的区别和内在联系 掌握算法计算复杂性的概念
25
2)渐进性态的阶
(3)表示法
f ( N ) ( g ( N ))
当且仅当 f ( N ) O( g ( N )) 且 f ( N ) ( g ( N )) , 称函数 f (N ) 和 g (N ) 同阶。
相关文档
最新文档