时间复杂度与空间复杂度

时间复杂度与空间复杂度的概念

算法的时间复杂度反映了程序执行时间随着输入规模增长而增长的量级,能很好的反映出一个算法的优劣。
时间复杂度:评估执行程序所需要的时间。
空间复杂度:评估执行程序所需要的存储空间。

时间复杂度
一个算法所花费的时间与算法中语句的执行次数成正比,执行的次数多,即花费的时间也多。

T(n) = O( f(n) ) (n表示数据规模)

算法复杂度从三种情况考虑,最理想情况、平均情况和最坏情况评估。我们一般考虑最坏的情况。一般用大O表示法。

常见的时间复杂度:
O(1):常数时间阶 O(n):线性时间阶 O(logn):对数时间阶
O(nlogn):线性对数时间阶 O(n^2):平方时间阶 …

O(1)<O(log2n)<O(n)<O(nlogn)<O(n2)<O(n3)<…<O(2^n)<O(n!)

时间复杂度

时间复杂度的求解步骤:
(1)找出算法中的基本语句
算法中执行次数最多的那条语句就是基本语句,通常是内层循环。
(2)计算基本语句的执行次数的数量级
可忽略所有的低次幂和最高次幂的系数,只保留最高的次幂即可。
(3)用大O的渐进表示法表示
将基本语句的执行次数的数量级放入大O记号中。

例:

//时间复杂度为O(1)
int num = 0;
for(i = 0; i < 10; i++)
{
	num++;
}
//时间复杂度为O(n)
int num = 0;
for(i = 1; i <= n; i++)
{
	num++;
}
//时间复杂度为O(n^2)
int num = 0;
for(i = 1; i <= n; i++)
{
	for(j = 1; j <= n; j++)
	{
		num++;
	}
}

空间复杂度

空间复杂度:指程序运行时所需储存空间大小的度量。
空间复杂度的求解方法:

一般地,算法的空间复杂度指的是辅助空间。一维数组a[n]: 空间复杂度为O(n)
二维数组a[n][m]: 空间复杂度为O(n*m)

例:fibonacci的空间复杂度

//动态开辟了N个空间,空间复杂度为O(N)
long long* Fibonacci(int n)
{
	if(n==0)
		return NULL:
	long long* fibArray = new long long[n+1];
	fibArray[0] = 0;
	fibArray[1] = 1;
	for(int i = 2; i<= n; ++i)
	{
		fibArray[i] = fibArray[i-1] +fibArray[i-2];
	}
	return fibArray;

如今计算机的存储容量已经达到了很高的程度,所以我们不需要再特别关注一个算法的空间复杂度,需要更注重时间复杂度,可用空间来换取时间。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值