【数据结构实战C++】6 算法效率的度量
【摘要】
【数据结构实战C++】6 算法效率的度量
作者 CodeAllen ,转载请注明出处
常见的时间复杂度
常见时间复杂度的比较
O(1)< O(logn)<O(n)&l...
【数据结构实战C++】6 算法效率的度量
作者 CodeAllen ,转载请注明出处
常见的时间复杂度
常见时间复杂度的比较
O(1)< O(logn)<O(n)<O(n*logn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
基本身算法时间复杂度是O(2n)O(n!)O(nn)
的时候,运行时间就是不可接受的了
实例分析
分最好情况和最坏情况
一般没有特殊说明,分析算法的时间复杂度都是指最坏时间复杂度
算法的空间复杂度(space complexity)
-S(n) = S(f(n))
n为算法的问题规模
f(n)是空间使用函数,与n有关
空间复杂度实例
所需要的单位内存 : n +4
空间复杂度 :S(n + 4) = S(n)
空间与时间的策略
- -多数情况下,算法的时间复杂度更关注
- -有必要的话,可以通过增加额外的空间降低时间复杂度
- -同理,也可以通过增加算法的耗时降低空间复杂度
实例分析:空间换时间
/*
问题:
在一个由自然数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]++;
}
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表示法相同时,是够意味着两个算法的效率完全一样?
只能说明是同一个级别的,但是不能说明复杂度相同
小结
一般工程中,时间复杂度不超过0(n^3)
算法分析中,重点考虑的是最坏时间复杂度,时间复杂度也是最关注的
大O表示法童谣适合算法的空间复杂度
空间换时间是工程中经常用的策略
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/105523039
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)