计算机算法设计与分析PPT
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法复杂性分析
• 算法复杂性 = 算法所需要的计算机资源
• 算法的时间复杂性T(n);
• 算法的空间复杂性S(n)。
• 其中n是问题的规模(输入大小)。
算法的时间复杂性
• (1)最坏情况(Worst case)下的时间复杂性 •
Tmax(n) = max{ T(I) | size(I)=n }
• (2)最好情况(Best case)下的时间复杂性
>0使得对所有n n0有:0 cg(n) < f(n) }
• 等价于 f(n) / g(n) ,as n。 • f(n) (g(n)) g(n) o (f(n))
• (5)紧渐近界记号
• (g(n)) = { f(n) | 存在正常数c1,c2和n0使得对所有n
Running Time
n0时, 有0 cg(n) f(n), 则称函数
f (n ) c g ( n)
•算法运行时间的下限 •下界的阶越高,则评估就越精确,结果 就越有价值。例:Even though T(n)=3n2 is in (n), we prefer (n2).
n0
Input Size
n0有:c1g(n) f(n) c2g(n) },称为记号(Theta
notation)。
c 2 g (n )
Running Time
f (n )
c 1 g (n )
n0
Input Size
算法分析中常见的复杂性函数 1 constant
log2 n
logarithmic
linear
程序(Program)
• 程序是算法用某种程序设计语言的具体实现。
• 程序可以不满足算法的性质(4)有限性。
• 例如操作系统,是一个在无限循环中执行的程序,因
而不是一个算法。 • 操作系统的各种任务可看成是单独的问题,每一个问 题由操作系统中的一个子程序通过特定的算法来实现。 该子程序得到输出结果后便终止。
例如
T(n)=3n2+4nlogn+7, 则 Ť(n)可以是3n2.
若进一步假定算法中所有不同元运算的单位执行时间相同,则可不 考虑Ť(n)所包含的系数或常数因子。 渐进分析适用于n充分大的情况,当问题的规模很小时,或比较的两 算法同阶时,则不能做这种简化.
Meaning: for all data sets big enough (i.e., n>n0), the algorithm 渐近复杂性分析的记号 always executes in less than C|g(n)| steps in [best, average, worst case]. 在下面的讨论中,对所有n,f(n) 0,g(n) 0。
Hui Gao
18
1/9/2013
• (3)非紧上界记号o • o(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0
>0使得对所有n n0有:0 f(n)<cg(n) }
• 等价于 f(n) / g(n) 0 ,as n。 • (4)非紧下界记号 • (g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0
Big- Example
Example 1. T(n)= C1n2+C2n Solution: C1n2+C2n >= C1n2 for all n > 1, |T(n)|>=C|n2| for C=c1 and n0=1. Therefore, T(n) is in (n2). Example 2. T(n) = C. We say T(n) is in (1).
template<class Type>
int seqSearch(Type *a, int n, Type k) { for(int i=0;i<n;i++) if (a[i]==k) return i; return -1; }
• (1)Tmax(n) = max{ T(I) | size(I)=n }=n
本课程主要内容
第1章 第2章 第3章 第4章 第5章 第6章 算法概述 递归与分治策略 动态规划 贪心算法 回朔法 分支限界法
第1章 算法概述
学习要点: 理解算法的概念。 理解什么是程序,程序与算法的区别和内在联系。
掌握算法的计算复杂性概念。
掌握算法渐近复杂性的数学表述。
• 软件(software):程序及其各种文档资料的总称 • 程序(algorithm)=算法+数据结构 • 算法(procedure):解的描述(程序的灵魂)
对规模较小的问题,决定算法工作效率的可能是算 法的简单性而不是算法执行的时间.
当比较两个算法的效率时,若两个算法是同阶的,必须 进一步考察阶的常数因子才能辨别优劣.
举例:
例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时,程序2-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)。 例3: f(n) = n!= O(nn) 对于n≥1,有n(n 1)(n 2) … 1≤nn,因此,可选c = 1,n0 = 1。对于n≥n0,f(n) = n!≤nn,所以,f(n) = O(nn)。
算法分析与设计
Design and Analysis of Computer Algorithm 教材:计算机算法设计与分析(第3版) 王晓东 编著 主讲教师: 何平
E-mail: heping@scse.hebut.edu.cn
课程简介
算法分析与设计是计算机的核心课程之一,在众多的 计算机系统软件和应用软件中都要用到本课程的内容。它 的先修课有高等数学、程序设计、数据结构,而它又是操 作系统、编译原理等课程的先行课程。算法分析与设计在 计算机的理论体系中占有极其重要的位置。 通过本课程的学习,使学生掌握算法分析与设计的基 本理论和基本方法。本课程主要介绍算法设计的基本方法, 包括递归技术、分治、动态规划、贪心算法、图的遍历等 技术。通过本课程的学习,能够在掌握算法设计基本方法 的基础上,加深对计算机领域中常用的非数值计算方法的 理解和应用。
Example 2. T(n)= C1n2+C2n Solution: C1n2+C2n <= C1n2+C2n2 = (C1+C2)n2 for all n > 1. Therefore, T(n) is in O(n2) for n0=1 and C= C1+C2 . Example 3. T(n) = C. We say T(n) is in O(1).
• (2)Tmin(n) = min{ T(I) | size(I)=n }=1
• (3)在平均情况下,假设: • • (a) 搜索成功的概率为p ( 0 p 1 ); (b) 在数组的每个位置i ( 0 i < n )搜索成功的概率相同,均为
p/n。
Tavg (n)
size ( I ) n
O(1)< O(logn)< O(n)< O(nlogn)<O(n2)< O(n3)
常见的指数阶有:
O(2n)<O(n!)< O(nn)
多项式时间复杂度算法 -p类问题 指数时间复杂度算法 -NP类问题
执行时间随n的增长而增长的情况
log2 n n
n log2 n
0
2 8 24 64 160
n2
1
• 数据结构(data structure):现实世界的数据模型
• 语言(language):实现的工具
算法(Algorithm)
• 算法是指解决问题的一种方法或一个过程。
• 算法是若干指令的有穷序列,满足性质:
• (1)输入:有外部提供的量作为算法的输入。
• (2)输出:算法产生至少一个量作为输出。 • (3)确定性:组成算法的每条指令是清晰,无歧义的。 • (4)有限性:算法中每条指令的执行次数是有限的,执 行每条指令的时间也是有限的。
5)算法的程序实现
将算法正确地编写成机器语言程序.
6)算法分析
对执行该算法所消耗的计算机资源进行估算.
算法设计的要求
通常设计一个“好”的算法应考虑达到以下目标: • 正确性:4个层次
• 可读性:有助于对算法的理解
• 健壮性:输入数据非法,作出适当反应或进行处理 • 高效率与低存储要求:效率是指算法执行的时间
4 16 64 256 1024
n3
1
8 64 512 4096 32768
2n
n!
0
1 2 3 4 5
1
2 4 8 16 32
2
4 16 256 65536
1
2 24 40320 20922789888000 32!
429496729 6
时间复杂度的优劣次序如下(n>=16):
O(1)<O(log2 n)<O(n)<O(n log2 n)<O(n2)<O(n3)<O(2n)<O(n!)
•
Tmin(n) = min{ T(I) | size(I)=n }
• (3)平均情况(Average case)下的时间复杂性 •
Tavg(n) =
size ( I ) n
p( I )T (I )
其中I是问题的规模(input size)为n的实例,p(I)是实 例I出现的概率。
• 例:顺序搜索算法 在具有n个元素的数组a[1...n]中找出值等于k的元素的位置。
(1)渐近上界记号O(Big-O)
若存在正常数c和自然数n0 使得当 n n 0 时,有0 f ( n ) cg ( n ) 则称函数 f(n )在n充分大时有上 界, 且g(n)是它的一个上界, 记为 f(n) =O(g (n) ) , 也称 f(n) 的 阶 不 高 于 g ( n ) 的 阶 。
c g ( n)
Running Time
f (n )
n0
Input Size
ห้องสมุดไป่ตู้
•算法运行时间的上限 •上界的阶越低,则评估就越精确,结果就越有价 值。例:T(n) =3n2 ,T(n)=O(n2),而n2= O(n3), 取前者。
Big-O Example
Example 1. Finding value X in an array. Solution: T(n) = Csn/2. For all values of n>1, Csn/2 <= Csn. Therefore, by the definition, T(n) is in O(n) for n0=1 and C= Cs .
p(I )T (I )
p p p p 1 2 3 n n 1 p n n n n
p n p(n 1) i n1 p n(1 p) n i 1 2
算法渐近复杂性
设T(n)为算法A的时间复杂性函数,则它是n的单增函数,如果存在 一个函数 Ť(n) 使得当n ,有 T(n)- Ť(n)) / T(n)0 称Ť(n) 是T(n)当 n 时的渐进性态或 渐进复杂性 。 在数学上,T(n)与 Ť(n)有相同的最高阶项.可取 Ť(n)为略去T(n)的 低阶项后剩余的主项.当n充分大时我们用Ť(n)代替T(n)作为算法复 杂性的度量,从而简化分析.
n n log2 n n2 n3
2n
n log n
quadratic cubic
exponential
factorial
n!
算法的渐进复杂性的阶对于算法的效率有着决定性的意义: 多项式阶算法:时间复杂性与规模n的幂同阶。 指数阶算法:时间复杂性与规模n的一个指数函数同阶。 最优算法:时间复杂性达到其下界的算法。 常见的多项式阶有:
问题的求解(Problem Solving):
1)问题的陈述
用科学规范的语言,对所求解的问题做准确的描述.
2)建立数学模型
通过对问题的分析,找出其中的所有操作对象及操作对象之间 的关系并用数学语言加以描述.
3)算法设计
根据数学模型设计问题的计算机求解算法.
4)算法的正确性证明
证明算法对一切合法输入均能在有限次计算后产生正确输出.
Hui Gao 16 1/9/2013
Meaning: for all data sets big enough (i.e., n>n0), the algorithm always executes in more than C|g(n)| steps. (2)渐近下界记号 (Big- )
如果正常数c和自然数n0使得当 n f(n)在n充分大时有下限, 且 g(n)是 它的一个下限,记为f(n) = (g (n) ) 也称f(n)的阶不低于g(n)的阶。