时间复杂度与空间复杂度

一、时间复杂度

概念:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度
时间复杂度:
1、衡量算法的运行速度
2、通过数指令(基本指令)个数,来间接地测量运行速度
3、具体的结果:关于数据规模(n)的函数关系
4、为了便于估算,使用大O标识符进行化简:
(1)只保留最高次项
(2)最高次项的系数为1
(3)O(n)/O(n^2)…
5.理论上应该区分 最好/最坏/平均情况,但为了便于估算,一般只需要估算最坏情况即可
1.计算时间复杂度的方法
最常见的方式:数循环次数(基本够用)借助图形去理解:二分查找
借助调用栈画图:递归(了解)
2.对常见的复杂度做个排序
o(1)<O(log(n))< O(n)< O(n * log(n))<O(n^2) <O(n^3)<O(2^n)

例如:

//计算阶乘递归factorial的时间复杂度?
long factorial(int N) {
return N < 2 ? N : factorial(N-1) * N;
}

基本操作递归了2N次,时间复杂度为O(2N)

二、空间复杂度

概念:空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法
例如:

// 计算阶乘递归Factorial的时间复杂度?
long factorial(int N) {
return N < 2 ? N : factorial(N-1)*N;
}

该递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。空间复杂度为O(N)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值