算法分析与设计第_2章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定义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
6
哈尔滨工业大学(威海)
3.时间复杂度估算
因为:
算法=控制结构+原操作(固有数据类型的操作)
所以:
算法的执行时间= 原操作的执行次数*原操作
语句的频度指的是该语句重复执行的次数。
一个算法转换为程序后所耗费的时间,除了与所用的计算软、 硬件环境有关外,主要取决于算法中指令重复执行的次数,即语 句的频度相关。
2020/6/21
22
哈尔滨工业大学(威海)
复杂性理论中最具理论意义的当数NP完全性问题, 这类问题在下述意义下具有同等的难度:即要么每个NP 完全问题都存在多项式时间的算法(即通常所指的有效 算法);要么所有NP完全问题都不存在多项式时间的算 法。
目前已知的NP完全问题就有2000多个,其中有许多是 非常重要的问题,如:货郎问题、调度问题、最大团问题、 最大独立集问题、Steiner树问题、背包问题、装箱问 题、…等等。
算法的空间复杂度是指算法在执行过程中所占辅助存储 空间的大小(也有课本定义为所占全部存储空间的大小), 用 S(n)表示。与算法的时间复杂度相同,算法的空间复杂度 S(n)也可表示为:
S(n)=Ο(g(n)) 表示随着问题规模n的增大, 算法运行所需存储量的增长率 与g(n)的增长率相同。
2020/6/21
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
23
哈尔滨工业大学(威海)
在图上定义的许多组合优化问题是NP完全问题。 这类问题属于较难解的问题,至今没有找到多项式时 间算法,也很可能根本没有多项式时间算法。遇到这 类问题时,通常从以下几个方面来考虑并寻求解决办 法:
1)特殊情形特殊方法
2)动态规划和分枝限界方法
3)概率分析
4)近似算法
T(n)=O(n2) 数量级相等是这样定义的,设f(n)是一个关于正整数n 的函数,若存在一个常数C,使
n
则称f(n)与g(n)是同数量级的函数。
2020/6/21
10
哈尔滨工业大学(威海)
算法(渐进)时间复杂度,一般均表示为以下几种数量级的形式 (n为问题的规模,c为一常量):
Ο(1)称为常数级 Ο(logn)称为对数级 Ο(n)称为线性级 Ο(nc)称为多项式级 Ο(cn)称为指数级 Ο(n!)称为阶乘级
壮性。
2020/6/21
3
哈尔滨工业大学(威海)
算法的分析和评价:一般应考虑正确性、可维护性、 可读性、运算量及占用存储空间等诸多因素。 评价算法的三条主要标准是:
(1) 算法实现所耗费的时间; (2) 算法实现所耗费的存储空间,其中
主要考虑辅助存储空间; (3) 算法应易于理解,易于编码,易于调
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++;
如果一个判定性问题的复杂度是该问题的一个实例的 规模n 的多项式函数,则我们说这种可以在多项式时间内 解决的判定性问题属于P类问题。P类问题就是所有复杂 度为多项式时间的问题的集合。通俗地称所有复杂度为多 项式时间的问题为易解的问题类,否则为难解的问题类。
2020/6/21
21
哈尔滨工业大学(威海)来自百度文库
试等等。
2020/6/21
4
哈尔滨工业大学(威海)
2.1.2 算法的时间复杂性
1.和算法执行时间相关的因素
1)问题中数据存储的数据结构 2)算法采用的数学模型 3)算法设计的策略 4)问题的规模 5)实现算法的程序设计语言 6)编译算法产生的机器代码的质量 7)计算机执行指令的速度
2020/6/21
5
哈尔滨工业大学(威海)
2.算法效率的衡量方法
通常有两种衡量算法效率的方法: 1)事后统计法(有缺点,较少使用) 2)事前分析估算法
算法的时间效率是问题规模的函数。假如,随着问题规 模n的增长,算法执行时间的增长率和f(n)的增长率相同,则 可 记 作 :T(n)=Ο(f(n)), 称 T(n) 为 算 法 的 渐 近 时 间 复 杂 度 (Asymptotic Time Complexity),简称时间复杂度。Ο是 数量级的符号。
2020/6/21
25
哈尔滨工业大学(威海)
【例1】交换i和j的内容。
temp=i;i=j;j=temp;
以上三条单个语句的频度均为1,该算法段的执行时间 是一个与问题规模n无关的常数。算法的时间复杂度为常 数阶,记作T(n)=Ο(1)。
2020/6/21
26
哈尔滨工业大学(威海)
【例2】变量计数之一。
5)启发式算法
2020/6/21
24
哈尔滨工业大学(威海)
2.2 算法分析实例
具体算法的时间复杂度和空间复杂度往往是 不独立的,在算法设计中要在时间效率和空间效率 之间折衷。
2.2.1 非递归算法分析
1.仅依赖于问题规模的时间复杂度
有一类简单的问题,其操作具有普遍性,也 就是说对所有的数据均等价地进行处理,这类算法 的时间复杂度,很容易分析。
对于较复杂的算法,可将它分隔成容易估算的几个部分,然 后再利用"O"的求和原则得到整个算法的时间复杂度。
例:若算法的两个部分的时间复杂度分别为 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
第2章算法分析基础
主要内容
算法分析体系及计量 算法分析实例
2020/6/21
1
哈尔滨工业大学(威海)
2.1 算法分析体系及计量
算法分析的任务: 对设计出的每一个具体的算法,利用数
学工具,讨论其复杂度。
2020/6/21
2
哈尔滨工业大学(威海)
2.1.1 算法分析的评价体系
对算法的评价有两个大的方面:
2020/6/21
11
哈尔滨工业大学(威海)
以上时间复杂度级别是由低到高排列的,其随规模n的增长 率,由图2-1可见一斑:
图2-1 T(n)与规模n的函数关系
2020/6/21
12
哈尔滨工业大学(威海)
一般来说如果选用了阶乘级的算法,则当问题规模等于或者 大于10时就要认真考虑算法的适用性问题。所以, 原则上一个 算法的时间复杂度, 最好不要采用指数级和阶乘级的算法, 而应 尽可能选用多项式级或线性级等时间复杂度级别较小的算法。
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
19
哈尔滨工业大学(威海)
2.1.4 NP完全问题
NP完全性问题属于“计算复杂性”研究的 课题。所谓计算复杂性,通俗说来,就是用计算 机求解问题的难易程度。其度量标准:
•计算所需的步数或指令条数(时间复杂度)。 •计算所需的存储单元数量(空间复杂度)。
2020/6/21
20
哈尔滨工业大学(威海)
问题的复杂性和算法的复杂性的区别: 时间复杂性:算法的复杂性是指解决问题的一个具体的 算法的执行时间;问题的复杂性是指这个问题本身的复杂 程度。
2020/6/21
8
哈尔滨工业大学(威海)
对较复杂的算法计算算法的运行时间,经常从算法中选取一 种对于所研究的问题来说是基本(或主要) 的原操作,以该基本操 作在算法中重复执行的次数作为算法运行时间的衡量准则。这 个原操作,多数情况下是最深层次循环体内的语句中的原操作。 例如: for(i=1;i<=n;++i)
(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)决定的。
可以在多项式时间内验证一个解是否正确的问题称为P 问题,亦称为易验证问题类。
简单地说,存在多项式时间的算法的一类问题,称 之为P类问题,而像梵塔问题、推销员旅行问题等问题, 至今没有找到多项式时间算法解的一类问题,称之为NP 类问题。
NP问题中复杂性最高的一个子类,就是NP完全问 题(NPC问题,C代表complete)。NPC问题存在着一个令 人惊讶的性质,即如果一个NPC问题存在多项式时间的算 法 , 则 所 有 的 NP 问 题 都 可 以 在 多 项 式 时 间 内 求 解 , 即 P=NP成立!! 一般认为NPC问题是难解的问题类。
2020/6/21
16
哈尔滨工业大学(威海)
6.算法时间复杂度的最好情况和最坏情况
确定能反映出算法在各种情况下工作的数据集, 选取的数 据要能够反映、代表各种计算情况下的估算, 包括最好情 况下的时间复杂度(时间复杂度下界, 一般记为Tmax)、最 坏情况下的时间复杂度(时间复杂度上界, 一般记为Tmin)、 平均情况下的时间复杂度(一般记为Tavg)和有代表性的情 况, 通过使用这些数据配置来运行算法,以了解算法的性能。
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:若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
哈尔滨工业大学(威海)
研究算法的空间效率, 只需要分析除输入和算法之外的 额外空间。 若所需额外空间相对于输入数据量来说是常数, 则称此算法为原地工作, 否则,它应当是规模的一个函数。
13
哈尔滨工业大学(威海)
4.问题时间复杂度的上界和下界
复杂度的上界和下界是用以估计问题所需某 资源的复杂程度的界限函数。如果找到解某问 题的算法,其资源的复杂度都必须小于u(n), 则 u(n)是问题本身复杂度的一个上界。如果对任 何算法,其复杂度都必需大于l(n),则l(n)是问 题复杂度的一个下界。
相关文档
最新文档