数据结构chapter1绪论剖析.ppt

数据结构chapter1绪论剖析

1.4 算法和算法分析 2.算法的评价 ⑴ 正确性(correctness):指的是应能满足具体问题的要求,是设计和评价一个算法的首要条件。 ⑵ 可读性(readability):指算法供人们阅读的方便程度。 ⑶ 健壮性(robustness):主要指对出错情况/异常情况的处理能力。 ⑷ 效率高和低存储量要求(efficiency):效率描述的是算法的执行时间;存储量要求指的是算法执行过程所需要的最大存储空间。不论是效率,还是存储量要求往往与问题的规模密切相关。 3.算法效率的衡量方法和准则 1.4 算法和算法分析 算法效率——用依据该算法编制的程序在计算机上执行所消耗的时间来度量 通常有两种衡量算法效率的方法: 1.事后统计——利用计算机内记时功能,不同算法的程序可以用一组或多组相同的统计数据区分 缺点:?必须先运行依据算法编制的程序 ?所得时间统计量依赖于硬件、软件等环境因素,掩盖算法本身的优劣 2.事前分析估计——一个高级语言程序在计算机上运行所消耗的时间取决于: ?依据的算法选用何种策略 ?问题的规模 ?程序语言 ?编译程序产生机器代码质量 ?机器执行指令速度 同一个算法用不同的语言、不同的编译程序、在不同的计算机上运行,效率均不同,———所以使用绝对时间单位衡量算法效率不合适 算法 = 控制结构 + 原操作 (固有数据类型的操作) 算法的执行时间 = 原操作(i)的执行次数×原操作(i)的执行时间 算法的执行时间 与 原操作执行次数之和 成正比 1.4 算法和算法分析 3.算法效率的度量---时间复杂度 (Time Complexity) 从算法中选取一种对于所研究的问题来说是 基本操作 的原操作,以该基本操作 在算法中重复执行的次数(称为语句的频度) 作为算法运行时间的衡量准则。 假如,随着问题规模 n 的增长,算法执行时间的增长率和 f(n) 的增长率相同,则可记作: T (n) = O(f(n)) f(n)是问题规模n的某个函数 称T (n) 为算法的(渐近)时间复杂度。 语句的频度指的是该语句重复执行的次数。 一个特定算法的“运行工作量” 的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。 1.4 算法和算法分析 例一、下面的算法是在有n个元素的数组a中求最大值。 … … temp=a[0]; for(i=1;in;i++){ if(a[i]temp)temp=a[i]; } 显然,比较是该算法的基本操作,由if语句完成,共执行了n-1次,if语句的频度为n-1,算法的执行时间为T(n)=n-1。 可以看出,算法的执行时间是问题规模n的函数。另外,当n增大时,算法的执行时间按n的一次方的速度增长。 1.4 算法和算法分析 例二、以下是两个n阶方阵相乘的算法。 … … for(i=0;in;i++) for(j=0;jn;j++){ c[i][j]=0; for(k=0;kn;k++){ c[i][j]+=a[i][k]*b[k][j]; } } 显然,乘法是矩阵相乘的基本操作,通过最后一个语句完成。该语句共执行了n3 次,语句的频度为n3,算法的执行时间为T(n)=n3。 可以看出,当n增大时,算法的执行时间按n3的速度增长。 1.4 算法和算法分析 例三、以下是选择排序的算法。 … … for(i=0;in-1;i++){ k=i; for(j=k+1;jn;j++) if(a[j]a[k])k=j; t=a[k];a[k]=a[i];a[i]=t; } 显然,比较是基本操作,通过if语句完成。该语句共执行了n(n-1)/2次,语句的频度为n(n-1)/2 ,算法的执行时间为T(n)=n(n-1)/2 。 可以看出,当n增大时,算法的执行时间按n2的速度增长。 例如,在下列三个程序段中: (a) x=x+1; (b) for(i=1;i=n;i++) x=x+1; (c) for(j=1;j=n;j++) for(k=1;k=n;k++) x=x+1; 语句x=x+1的频度分别为1、n和n2,则(a)、(b)、(c)的时间复杂度分别是O(1)、O(n)、O(n2)。由此可见,随着问题规模的增大,其时间消耗也在增大。 1.4 算法和算法分析 一般情况下,算法的执行时间是问题规模n的某个函数f(n)。但是,对于较复杂算法,很

文档评论(0)

1亿VIP精品文档

相关文档