2021-03-08

通俗理解“以空间复杂度换时间复杂度”的效率提升方法

所谓时间复杂度,说白了就是程序运行的时间。之前在刷OJ和PTA时,经常听到老师说到这个概念,但是对于我而言,这种“复杂度”等比较晦涩的概念,我是拒绝听的。所谓时间复杂度,说白了就是程序运行的时间。之前在刷OJ所谓时间复杂度,说白了就是程序运行的时间。之前在刷OJ和PTA时,经常听到老师说到这个概念,但是对于我而言,这种“复杂度”等比较晦涩的概念,我是拒绝听的。

直到上周实验室同门在给我讲数组排序时讲到这个问题,听完才发现,复杂度问题并没有想象中的那么复杂。接下来,我们就简单来说一下时间复杂度与空间复杂度。
比如在C语言中,一个for循环的时间复杂度为O(n),那么双重for循环的时间复杂度就是O(n²)。可想而知,如果一个运行时间为1秒的循环,嵌套多层循环之后,其复杂度是呈指数上升的。所以,在这种情况下,我们倾向于以空间复杂度来替换时间复杂度。

所谓空间复杂度,顾名思义,就是程序在运行时所消耗的内存空间。即程序在运行时所消耗的内存容量的多少。拿刚才的for循环例子来说,相比于双重for循环,如果我们能以两个并列的for循环来实现需求,那么所需的时间复杂度只是两个O(n),即2 O(n)。但在描述的时候,我们通常取两个并列循环当中的消耗最大的程序为标准,直接以它的空间复杂度为最终复杂度,也就是O(n)。

这样一来,程序的效率就会提高。但也要注意,以空间复杂度换时间复杂度的效率提升方法只是众多效率提升的方法之一,还需要具体问题具体分析。
和PTA时,经常听到老师说到这个概念,但是对于我而言,这种“复杂度”等比较晦涩的概念,我是拒绝听的。
直到上周实验室同门在给我讲数组排序时讲到这个问题,听完才发现,复杂度问题并没有想象中的那么复杂。接下来,我们就简单来说一下时间复杂度与空间复杂度。
比如在C语言中,一个for循环的时间复杂度为O(n),那么双重for循环的时间复杂度就是O(n²)。可想而知,如果一个运行时间为1秒的循环,嵌套多层循环之后,其复杂度是呈指数上升的。所以,在这种情况下,我们倾向于以空间复杂度来替换时间复杂度。
所谓空间复杂度,顾名思义,就是程序在运行时所消耗的内存空间。即程序在运行时所消耗的内存容量的多少。拿刚才的for循环例子来说,相比于双重for循环,如果我们能以两个并列的for循环来实现需求,那么所需的时间复杂度只是两个O(n),即2 O(n)。但在描述的时候,我们通常取两个并列循环当中的消耗最大的程序为标准,直接以它的空间复杂度为最终复杂度,也就是O(n)。
这样一来,程序的效率就会提高。但也要注意,以空间复杂度换时间复杂度的效率提升方法只是众多效率提升的方法之一,还需要具体问题具体分析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值