第六课、算法效率的度量
2017-05-03 21:19
113 查看
一、常见的时间复杂度
常见时间复杂度的比较
二、算法分析
定义一个数组
此算法最好的情况时执行一次
而最坏的情况却要执行n次
注意:数据结构课程中,在没有特殊说明时,所分析算法的时间复杂度都是指最坏时间复杂度
三、算法的空间复杂度(space complexity)
(1)、定义:S(n) = S(f(n))n为算法的问题规模
f(n)为空间使用函数,与n相关
注:推导时间复杂度的方法同样适应空间复杂度
如:当算法所需空间是常数时,空间复杂度为S(1)
(2)、空间复杂度计算练习
四、时间与空间算法策略
(1)、多数情况下,算法的时间复杂度令人关注(2)、如果有必要,可以通过增加额外空间降低时间复杂度
(3)、同理,也可以通过增加算法的耗时降低空间复杂度
时间换空间的例子
/* 问题: 在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。 设计一个算法,找出出现次数最多的数字。 */ #include <iostream> using namespace std; void search(int a[], int len) //时间复杂度为 O(n) { int sp[1000] = {0}; int max = 0; for(int i=0; i<len; i++) { sp[a[i] - 1]++;//将对应数字的总数按顺序存储起来,如将1的个数存在sp[0]的位置,将2的个数存在sp[1]的位置 } for(int i=0; i<1000; i++) { if( max < sp[i] ) { max = sp[i]; } } for(int i=0; i<1000; i++) { if( max == sp[i] ) { cout << i + 1 << endl;//打印出数量最多的数(不一定只有一个) } } } int main(int argc, char* argv[]) { int a[] = {1, 1, 3, 4, 5, 6, 6, 6, 3, 3}; search(a, sizeof(a)/sizeof(*a)); return 0; }
五、笔试题
问:两个算法的大O表示法一样,是否意味着它们的算法效率完全一样?答:大O表示法完全相同只能说明它们属于同一级别的算法,并不能说明它们算法的执行效率完全一致
六、小结
(1)、一般而言,工程中使用的算法,时间复杂度不超过O(n^3)(2)、算法分析设计时,重点考虑最坏情况下的时间复杂度
(3)、数据结构课程中重点关心算法的时间复杂度
(4)、空间换时间是工程开发中常用的策略
相关文章推荐
- 第4课 - 程序灵魂的审判,第5课 - 算法的时间复杂度,第6课 - 算法效率的度量
- (1)算法效率的度量
- 算法效率的度量和存储空间需求
- 算法效率的度量方法
- 算法效率的度量方法
- 数据结构教程 第四课 算法效率的度量和存储空间需求
- 数据结构-算法效率的度量-时间复杂度和空间复杂度
- 算法的效率的度量方法
- (1)算法效率的度量
- [C语言] 数据结构-算法效率的度量方法-事前分析估算方法
- 第2章 算法效率的度量方法---《大话数据结构》读书笔记
- 数据结构简介和算法效率度量
- 第6课 算法效率的度量
- 算法效率的度量方法,算法时间复杂度、空间复杂度计算
- 数据结构初学过程中对算法效率度量的理解
- 算法-效率的度量和函数的渐进增长
- 第二章算法的效率度量
- 一种可用来测试算法效率的足够精确的计时方法
- 优秀程序员必须知道的32个算法,提高你的开发效率
- 耦合相似度计算度量算法(COS算法,即Coupled Object Similarity算法)的实现