算法入门——时间复杂度与空间复杂度

 时间复杂度是一个单位概念,是衡量程序复杂程度或同等条件下程序运行快慢的标准。我们记输出,加减乘除四则运算的复杂度为O(1)(O在这里表示数学上的一个上界的概念),相应的,嵌套k层循环的程序复杂度就是n的k次方。但是要注意,时间复杂度是一个单位就是把O(1)定义为一个单位,不管是输出一个语句还是你打五个print输出五个语句,其复杂度都是O(1),同理如果有循环a{输出a,循环b{输出b}}应该为O(n²+n)的复杂度,因为其n对n²而言微不足道,故而其复杂度应该是O(n²),上面是错的,具体如下:

 对于while循环语句会有时候出现复杂度为O(logn)(即O(log₂n)因为计算机一般是二进制,别跟我说什么苏联的三进制计算机,早解体了呵呵呵,就可以省略下标2)

 因为上述程序循环是六次,每次相当于循环总数n除以二代入,所以n与2存在对数关系,故而表达为logn。思考:若把上述循环语句中n//2改为n-2,则时间复杂度应该是多少?

答案是O(n)因为改好后循环的次数从logn次变成n/2次,n/2与n属于一个单位的数量级,所以复杂度是O(n)空间复杂度相对于时间复杂度不是一个那么常用概念,就是说当代的大多数程序主要追求节省时间而非空间,在内存越来越廉价的当下,更多的会设计复杂度低内存大的程序,去换取时间上的优势。

空间复杂度也是一个单位概念,无论是一个变量a,还是几个变量a,b,c,d,e,f,g,都是空间复杂度为O(1)。而O(n)在空间复杂度里表示一维列表。O(mn)表示一个二维列表

部分图片参考自b站路飞学城python算法学习视频,本文仅供个人学习使用,特此声明

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值