汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-08-05 09:47] 算法度量及分析

对于一个问题, 可以有多种算法,那么如何来衡量算法的优劣呢?
人们一般从两个方面来衡量:
o:时间效率,即算法处理数据所耗费的时间,用时间复杂度来表示。
o:空间效率,即算法所需求的存储量的大小,用空间复杂度来表示。
两者不可同时兼顾,一般取时间效率,时间效率被认为重要一些。

1,时间复杂度分析
对于解决一个问题的算法, 执行时间短的显然比执行时间场的时间效率高。即执行时间短的算法比执行时间长的算法时间复杂度要低。
那么算法的执行时间的长短是如何度量的呢? 一种方法是编制一个程序实现这个算法, 然后输入不同的数据运行这个程序,测定该程序运行的时间,这成为“事后统计法”。另一种方法是分析算法运行的时间, 称为“事前统计法”,它不上机运行依算法编制的程序,而是分析影响算法执行时间的各种因素,从而估算出算法执行的时间。其中,一个最重要的因素是输入算法的数据量称为“问题规模”。因此, 一个算法的执行时间T可被表示为问题规模n的一个函数T(n)。
一般用算法中语句被执行的次数来表示算法的时间效率(算法的时间复杂度)。

2,常见的时间复杂度
(1)常量阶
算法的时间复杂度为常量,它不随问题规模n的大小而变化。
记为:T(n)=O(1)

(2)线性阶
算法的时间复杂度与问题规模n成线性关系。
记为:T(n)=O(n)

(3)平方阶和立方阶
算法的时间复杂度和问题规模n成平房或立方关系。
记为:T(n)=O(n²)或T(n)=O(n³)

(4)对数阶
算法的时间复杂度与问题规模n成对数关系。
记为:T(n)=O(㏒2n)

此外, 算法的时间复杂度还有指数阶O(2n)和阶乘阶O(n!)
这些时间复杂度之间的关系为:
O(1) < O(log2n) < O(n) < O(n log2n) < O(n²) < O(n³) < O(2的n次方) < O(n!) < O(n的n次方)

3,最坏情况下的时间复杂度
对于有些算法来说,时间复杂度除了和问题规模n有关以外, 还与算法的输入项有关。例如:
int i,m;
m=a[0];
for(i=1;i<n;i++)
if(a[i]>m)
m=a[i];
return m;
算法的关键在于“m=a[i]”,其执行的次数与输入的n个元素有关,如果第一元素即为最大值,则执行次数为0,时间复杂度为O(1),称为最好情况下的时间复杂度;如果最后一个元素为最大值, 则执行n-1次,时间复杂度为O(n),称为最坏情况下的时间复杂度。如果最大值出现的位置是随机的,则执行次数为n/2次, 时间复杂度为O(n),称为平均情况下的时间复杂度。 通常取最坏情况下的时间复杂度,即O(n)

4,空间复杂度分析
算法的空间复杂度就是算法或程序运行时所占用的存储空间。一般只统计数据部分所占用的存储空间,而不统计代码部分所占用的存储空间。

总结: 第一章的概述暂时告一段路。 了了几页纸,价值超千金呀!这几天把书里的习题做一做, 再用汇编程序替代书里的C程序实现几种简单的算法。
评论次数(0)  |  浏览次数(381)  |  类型(数据结构笔记) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码