算法分析(时间复杂度、空间复杂度)

一:时间复杂度

1、时间复杂度的概念

时间复杂度是用来表示某一特定算法的所需时间的一种方法,它所代表的是算法中需要进行的基本计算的步骤的多少,但为什么要搞的那么复杂?为什么不直接使用时间来度量呢?

如果我们直接使用时间来度量算法之间的快慢,会发现相同的算法在不同的硬件环境下,所使用的时间并不相同,正如人力计算和机器计算的区别,拿一个深度学习的算法让人力进行计算,很可能需要几百年,几万年甚至更高,但一台超级计算机则可以在几天,甚至几分钟的时间内得到结果,这就是硬件环境带来的差异,但实际上计算量是相同的。

于是就提出了时间复杂度的概念,直接将算法中的基本运算的多少进行统计,用以表示一个算法的复杂程度。

所谓基本运算,比如加法,就是一个基本运算,对应的还有减法,乘法,除法,判断等。

2、常见时间复杂度

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
在这里插入图片描述

3、主定理

主定理公式:T(n)= aT(n / b)+ f (n)
在这里插入图片描述
a:递归调用所产生的子问题个数
b:子问题的规模
f(n):调用前的操作以及调用后把子问题的解组合成原问题的解的总工作量

二:空间复杂度

空间复杂度指数据存储所用存储空间的多少,与时间复杂度对应。在互联网时代,我们更关注时间复杂度,而非空间复杂度,因为存储不足的问题可以很容易得到解决,通过购买更多的硬件即可。

但是时间复杂度是与算法息息相关的,并且对于一个应用来说,快速的反应和计算是基本的需求,比如对于游戏来说,我们希望游戏中我们丢出去的攻击能够即时反馈到屏幕上,如果计算这一效果的算法时间复杂度太高,那么我们看到的就不会是流畅的画面。

公司希望推荐系统可以根据用户的行为快速更新,那推荐算法就不能有太高的时间复杂度,不然新的结果进行更新的时候用户的行为已经改变,而用户得到的推荐就不是他真正喜欢的内容了。

通常,我们可以使用较高的空间复杂度来换取较低的时间复杂度,举个简单的例子:

计算闰年,如果每一次都对输入的年份进行计算,那么时间复杂度会比较大。

但是换一个思路,我们也可以事先计算好并储存1-10000年,并标好哪一年是闰年,这样输入一个年份,就可以直接查表得到结论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小本科生debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值