知识大全 概论- 算法的描述和分析(二)
Posted 语句
篇首语:人生不是一种享乐,而是一桩十分沉重的工作。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 概论- 算法的描述和分析(二)相关的知识,希望对你有一定的参考价值。
算法分析
评价算法好坏的标准
求解同一计算问题可能有许多不同的算法 究竟如何来评价这些算法的好坏以便从中选出较好的算法呢?
选用的算法首先应该是 正确 的 此外 主要考虑如下三点
① 执行算法所耗费的时间;
② 执行算法所耗费的存储空间 其中主要考虑辅助存储空间;
③ 算法应易于理解 易于编码 易于调试等等
算法性能选择
一个占存储空间小 运行时间短 其它性能也好的算法是很难做到的 原因是上述要求有时相互抵触 要节约算法的执行时间往往要以牺牲
更多的空间为代价;而为了节省空间可能要耗费更多的计算时间 因此我们只能根据具体情况有所侧重
① 若该程序使用次数较少 则力求算法简明易懂;
② 对于反复多次使用的程序 应尽可能选用快速的算法;
③ 若待解决的问题数据量极大 机器的存储空间较小 则相应算法主要考虑如何节省空间
算法的时间性能分析
( )算法耗费的时间和语句频度
一个算法所耗费的时间=算法中每条语句的执行时间之和
每条语句的执行时间=语句的执行次数(即频度(Frequency Count))×语句执行一次所需时间
算法转换为程序后 每条语句执行一次所需的时间取决于机器的指令性能 速度以及编译所产生的代码质量等难以确定的因素
若要独立于机器的软 硬件系统来分析算法的时间耗费 则设每条语句执行一次所需的时间均是单位时间 一个算法的时间耗费就是该算法中所
有语句的频度之和
【例 】求两个n阶方阵的乘积 C=A×B 其算法如下:
# define n // n 可根据需要定义 这里假定为
void MatrixMultiply(int A[a] int B [n][n] int C[n][n])
//右边列为各语句的频度
int i j k;
( ) for(i= ; i
(2) for (j=0;j
(3) C[i][j]=0; n 2
(4) for (k=0; k
(5) C[i][j]=C[i][j]+A[i][k]*B[k][j]; n 3
该算法中所有语句的频度之和(即算法的时间耗费)为:
T(n)=2n 3 +3n 2 +2n+1 (1.1)
分析:
语句(1)的循环控制变量i要增加到n,测试到i=n成立才会终止。WInGWit.故它的频度是n+1。但是它的循环体却只能执行n次。语句(2)作为语句(1)循
环体内的语句应该执行n次,但语句(2)本身要执行n+1次,所以语句(2)的频度是n(n+1)。同理可得语句(3),(4)和(5)的频度分别是n 2 ,n 2
(n+1)和n 3 。
算法MatrixMultiply的时间耗费T(n)是矩阵阶数n的函数。
(2)问题规模和算法的时间复杂度
算法求解问题的输入量称为问题的规模(Size),一般用一个整数表示。
【例3.4】矩阵乘积问题的规模是矩阵的阶数。
【例3.5】一个图论问题的规模则是图中的顶点数或边数。
一个算法的时间复杂度(Time Complexity, 也称时间复杂性)T(n)是该算法的时间耗费,是该算法所求解问题规模n的函数。当问题的规模
n趋向无穷大时,时间复杂度T(n)的数量级(阶)称为算法的渐进时间复杂度。
【例3.6】算法MatrixMultidy的时间复杂度T(n)如(1.1)式所示,当n趋向无穷大时,显然有
>
这表明,当n充分大时,T(n)和n 3 之比是一个不等于零的常数。即T(n)和n 3 是同阶的,或者说T(n)和n 3 的数量级相同。记作T(n)=O(n 3
)是算法MatrixMultiply的渐近时间复杂度。
数学符号"O"的严格的数学定义:
若T(n)和f(n)是定义在正整数集合上的两个函数,则T(n)=O(f(n))表示存在正的常数C和n0,使得当n≥n0时都满足0≤T(n)≤C·f(n)。
cha138/Article/program/sjjg/201311/23403相关参考
()渐进时间复杂度评价算法时间性能 主要用算法时间复杂度的数量级(即算法的渐近时间复杂度)评价一个算法的时间性能 【例】有两个算法A和A求解同一问题时间复杂度分别是T(n)=nT(n)=n
循环语句 WHILE(条件) 语句 DO 语句 WHILE(条件) FOR(初始条件;终结条件;语句) 语句 函数 所有算法以如下函数形式表示
算法 一个算法一般具有下列五个重要特性 有穷性一个算法必须总是在执行有限步之后结束 确定性算法中的每一条指令必须有确切的含义不能产生多义性 可行性算法中的每一条指令必须是切实可行的即原则上是可以
数 据 结 构概论基本概念和术语基本概念和术语(一)习题练习答案概论基本概念和术语(二)学习数据结构的意义学习数据结构的意义算法的描述和分析算法的描述和分析线性表线性表的
为了解决理解与执行这两者之间的矛盾人们常常使用一种称为伪码语言的描述方法来进行算法描述伪码语言介于高级程序设计语言和自然语言之间它忽略高级程序设计语言中一些严格的语法规则与描述细节因此它比程序设计
判断下列各对函数f(n)和g(n)当时n→∞哪个函数增长更快? 试用数学归纳法证明 试写一算法自大至小依次输出顺序读入的三个
算法与数据结构的关系紧密在算法设计时先要确定相应的数据结构而在讨论某一种数据结构时也必然会涉及相应的算法下面就从算法特性算法描述算法性能分析与度量等三个方面对算法进行介绍 算法特性 算法(Al
第章 绪论 简述下列术语数据数据元素数据对象数据结构存储结构数据类型和抽象数据类型 解数据是对客观事物的符号表示在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称
二课程内容和考核目标第一章绪论 本章介绍了数据结构的内容和方法几种基本数据结构以及抽象数据类型的概念阐述了问题数学模型算法与程序之间的关系对算法算法设计目标算法的描述以及算法分析方法作了较详细的介绍
在程序设计中常用下列三种不同的出错处理方式 ()用exit语句终止执行并报告错误 ()以函数的返回值区别正确返回或错误返回