当前位置:文档之家› 数据结构算法性能分析与量

数据结构算法性能分析与量

i++; if ( i == n ) return -1; return i; }
6
第1章 数据结构概论
1.5 算法性能分析与度量
1.5.2 算法的后期测试
插装 time( ) 的计时程序
void TimeSearch(){
事实上,算法运行时间要
int a[1001],n; double start, stop; for(int j=0;j<=1000;j++)
例 求两个n阶方阵的乘积C = AB
v{ o一id般M地atri,xM称ultipnly是(in问t A题[n的][n规], i模nt B。[n则][n时], i间nt复C[杂n][度n])
Tf(onr)(in是t i 问= 0题; i规< n模; i++n) 的函数
…2(n+1)
当f{且orC仅([iin]当[tj]j存== 00在;; j正< 整n; j数++c)和n0,使得T(n)≤……cf(nnn(22)n对+2所)
什么是算法?算法的描述方法有哪些?
1
第1章 数据结构概论
知识回顾
➢将一个正整数分解质因数。例如:输入90,打印 出90=2*3*3*5。 算法描述:
1.令k=2 2.当k不大于n时
2.1 如果这个质数恰等于n,输出k,结束 2.2 如果n≠k,但n能被k整除,则输出k,并修改n
的值(n=n/k),重复执行2.1。 2.3 如果n不能被k整除,则用k+1作为k的值,重复执
有的fno≥r n(i0n成t k立= 0,; k则<称n;该k+算+) 法的时间增长…率n在2(2n+2)
O(f(n))C中[i,][j]记= 为C[iT][(j]n+) A=[Oi][(kf](*n)B)[k][j]; ─ 大…On表3 示法
}
}
语句的频度之和是n的函数 T(n)=3n3 + 5n2 + 4n +2
T(n) = O(n3)
11
第1章 数据结构概论
1.5 算法性能分析与度量
1.5.4 算法的渐进分析 1.渐进的时间复杂度
【例】考察函数f(n)=5 当n=0时,c=5,所以f(n)=O(1)
【例】考察函数f(n)=3n+2 当n≥2时,3n+2≤4n,所以f(n)=O(n)
【例】考察函数f(n)=10n2+4n+2 当n≥5时,10n2+4n+2≤11n2,所以f(n)=O(n2)
}
7
第1章 数据结构概论
1.5 算法性能分析与度量
1.5.3算法的事前估计
主要包括时间复杂性和空间复杂性的分析: ➢ 问题的规模:如:矩阵的阶数、图的结点
个数、被分类序列的正整数个数等。 ➢ 空间复杂性:算法所需空间和问题规模的
函数。记为 S(n)。当 n 时的时间复 杂性,称为渐进空间复杂性。 ➢ 时间复杂性:算法所需时间和问题规模的 函数,记为 T(n)。当 n 时的时间复 杂性,称为渐进时间复杂性。
1.5 算法性能分析与度量
1.5.2 算法的后期测试
例如顺序搜索 (Sequenial Search)算法 int seqsearch(int a[ ], int n, int x ) {
//在a[0],…,a[n-1]中搜索与给定值 //x相等的元素,函数返回其位置.
int i = 0; while ( i < n && a[i] != x )
8
第1章 数据结构概论
1.5 算法性能分析与度量
空间复杂度度量
存储空间的固定部分 程序指令代码的空间,常数、简单变量、定 长成分(如数组元素、结构成分、对象的数 据成员等)变量所占空间
可变部分 尺寸与实例特性有关的成分变量所占空间、 引用变量所占空间、递归栈所用空间、通过 new和delete命令动态使用空间
类型和模块化要求,每个算法只完成一个功能 ➢ 可读性(Readability) 算法应该容易阅读。以有利
于阅读者对程序的理解。 ➢ 效率 效率指的是算法执行的时间和空间利用率。通
常这两者与问题的规模有关。 ➢ 健壮性 (Robustness) 算法应具有容错处理的功能。
当输入非法数据时,算法应对其作出反应,而不应产 生莫名其妙的输出结果。 ➢ 简单性(simplicity)指算法所采用的数据结构和方 法的简单程度。算法的简单性便于用户编写、分析和 调试
行2.1 (演示程序)
如何衡量一个算法的性能
2
第1章 数据结构概论
1.5 算法性能分析与度量
算法的性能标准 算法的后期测试 算法的事前估计
3
第1章 数据结构概论
1.5 算法性能分析与度量
1.5.1 算法的性能标准
➢ 正确性 (Correctness ) ity) 算法设计必须符合抽象数据
4
第1章 数据结构概论
1.5 算法性能分析与度量
算法效率的度量后 事期 前测 估试 计
1.5.2 算法的后期测试
➢ 事后测试要求在算法执行后通过算法执行的 时间和实际占用空间的统计资料来分析。
➢ 事后分析要求在算法中的某些部位插装时间 函数time ( ),测定算法完成某一功能所花 费时间。
5
第1章 数据结构概论
9
第1章 数据结构概论
1.5 算法性能分析与度量
时间复杂度度量
编译时间 运行时间
程序步 语法上或语义上有意义的一段指令序 列;而且这段指令序列的执行时间与 问题规模无关; 例如:声明语句:程序步数为0; 表达 式:程序步数为1
10
第1章 数据结构概论
1.5 算法性能分析与度量
1.5.4 算法的渐进分析 1.渐进的时间复杂度
第1章 数据结构概论
知识回顾
数据结构的研究内容是什么?
➢ 数据的逻辑结构、存储结构以及算法
抽象数据类型的三元组表示格式是什么,其 中的三元指什么?
➢ ADT抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义>
}ADT抽象数据类型名 ➢ 数据对象、关系集、基本操作集
a[j]=j+1; cin>>n;
受输入规模、利用编译程 序生成的目标代码的质量、 计算机程序指令系统的品 质和速度等制约。
time(&start);
int k = seqsearch (a, n, x);
time(&stop);
double runTime = stop - start;
cout << " " << n << " " << runTime << endl;
相关主题