时间复杂度和空间复杂度

时间复杂度和空间复杂度表示了一个算法的好坏情况。

一般来说在写题的时候允许的时间是1-2s,Java可能会稍长一些
而空间复杂度基本上不会在写题的时候给我们造成障碍。
不过空间复杂度可能更常见于算法优化的情况下。

总的来说,为了完成一个问题的消耗几乎是差不多的,也就是说,一般情况下,时间和空间是不可兼得的,我们能做的也就无非是牺牲时间换空间,牺牲空间换时间这两种罢了。

那么首先我们来看一下时间复杂度的计算方式,常见的量级有以下几种(由小到大):

  • 常数阶O(1):执行的次数是有限的,可以数的,没有循环等复杂结构,和我们输入数据的规模无关的
  • 对数阶O(logN):是二分的时间复杂度,可以理解成不到一次循环,按2,4,8。。。。这样的方式循环
    常见例子如下:
int i = 1;
while(i<n)
{
    i = i * 2;
}

从上面代码可以看到,在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。我们试着求解一下,假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2^n
1 +1/2+1/3 +1/4 + 1/5+ 1/6+1/7+1/8 +…1/n也等于logN
(我也推不明白,记住了就完事了ahhhh)

  • 线性阶O(n):一次循环
  • 线性对数阶O(nlogN):可以理解成将对数的那种循环n次,
  • 平方阶O(n^2):双重循环
  • 立方阶O(n^3):三重循环
  • K次方阶O(n^k):k次循环
  • 指数阶(2^n):一般是树结构的,n为数的层数,01枚举,二叉树,叶子节点的个数

下面是y总的时间复杂度和数据范围的量级的写题时的对应关系:
在这里插入图片描述
目前先记着:
1E5要求n(logN)就行,
特别小的数乱写就行,
特别大的数就想O(N)的算法

还有 平均时间复杂度、最坏时间复杂度、最好时间复杂度 ,我们放在讲排序的时候讲。

空间复杂度就好说很多了,比较常用的有:O(1)、O(n)、O(n²)。
就是常数,一维数组,二维数组这种罢了,很好想。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值