时间复杂度和空间复杂度(面试被问常用的算法有哪些?你能答上来些,若继续追问:那你了解他们时间复杂度么?时间复杂度的计算规则是?)

时间复杂度和空间复杂度

前言:

你是否有被面试官问到:常用的算法有哪些?也许你能答上来些。但如果追问:那你了解他们时间复杂度么?时间复杂度的计算规则是…以下文章做了大致讲述,本人觉得不错,转载了,以下是正文

算法设计的要求:正确性,可读性,健壮性和效率与低存储量需求.

为了比较同一问题的不同算法,通常的做法是,从算法中选取一种,对于所研究的问题来说,是基本操作的原操作,以该操作的重复执行次数,作为算法的时间量度。

例如:

for(i=1;i<=n;i++){

    for(j=1;j<=n;j++){

        sum=i*j;

}}

在代码中,乘法是该循环的基本操作,整个算法的执行与该基本操作重复的次数n^2
成正比,记作T(n)=O(n^2 )。

1.时间复杂度:

T(n)=O(f(n))

他表示随规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称为算法的渐进时间复杂度,简称时间复杂度.

如何使用时间复杂度描述?

首先我们需要确定一个基本操作n,根据这个基本操作的重复次数来表示O(f(n)).

例如:

常量阶O(1),线性阶O(n),平方阶O(n^k),对数阶O(logN),指数阶O( 2^n)

等等.

看样子回头又得补高数了…

补充:

由于算法的时间复杂度,考虑的只是,对于问题规模n的增长率,则在难以精确计算,基本操作执行次数的情况下,只需求出它,关于n的增长率,或阶即可

补充:

for(i=1;i<=n;i++){a++};

for(i=1;i<=n;i++){for(j=1;j<=n;j++){a++;}

第一个for循环时间复杂度是

  • O(n)

第二个是

  • O(n^2 )

那么整个就是

  • O(n+n^2)

一般来说,只要算法中不存在循环语句,时间复杂度就为

  • O(1)

2.空间复杂度

通常来说,只要算法不涉及到动态分配的空间,以及递归、栈所需的空间,空间复杂度通常为O(1);

一般的递归算法空间复杂度为O(n^2),

原作者:八斗东流
链接:https://www.jianshu.com/p/dba2164935f2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值