理解算法时间复杂度与空间复杂度

程序员写的代码,代码的质量除了阅读性要好,可扩展性外,更重要的是耗时要尽量少,占用的内存尽量少。在代码里,耗时多少则用时间复杂度表示,占用的内存多少则可以用空间复杂度表示。

(1)什么是时间复杂度?

例如:小明和小花同时阅读一篇n页的书,小明每天读1页,小花每天读一半(以页为单位,剩余1页时直接读完),那么他们多少天可以读完?

可以看出,小明需要n天,小花需要天。

那么小明的时间复杂度就是:O(n),小花的时间复杂度就是

(2)程序的时间复杂度

简单的来说,一个循环的时间复杂度为n,双重循环时间复杂度为n的二次方,三重循环就是n的三次方,以此类推。

(3)什么是空间复杂度?

例子:已知一亩地一年可以收获水稻1千斤,那么要收获n千斤水稻需要多少时间,多少地?

下面是小明和小花的做法:

第一种:小明一次性种了n亩水稻,那么一年则可以达到目标,但这个方式需要耗费了大量的土地。

第二种:小花一年种1亩水稻,那么n年则可以达到目标,这个方式虽然节约了不少土地,但却需要耗费大量的时间。

不难看出,不管多少目标产量,

小明的时间始终为1年,则时间复杂度记为O(1);小花的时间则需要n年,时间复杂度记为O(n)。

程序的数据都是存在内存上的,空间复杂度好比这里的土地,都是一个单位一个单位的,只从耗内存方面来说,肯定是花的越少越好。

所以,从空间复杂度来说,小明的方式则需要n亩地,记为O(n);小花的方式则始终为1亩地,则记为O(1);

(4)程序的空间复杂度

两复杂度表示方法

时间复杂度和空间复杂度都用O(f(n))表示,这里f(n)为n的表达式,如何具体区分呢?

由于时间的单词是Time,空间的单词是Space。于是通常用T(n)表示时间复杂度,S(n)表示空间复杂度。

那么上面水稻的问题,小明和小花的时间复杂度和空间复杂度就可以具体的描述出来了。

小明:T(n) = 1,S(n) = n;

小花:T(n) = n,S(n) = 1;

两复杂度关系

在书写一段代码的时候,时间复杂度和空间复杂度往往是呈反相关的。即时间尽可能的少的时候,往往牺牲的内存比较大,即程序员口中常说的 “拿内存换性能” 之说。

一段代码逻辑是否有真的存在最优解?即耗时少,消耗内存较低的写法。

答案是肯定的,《数据结构与算法》就是研究的这个,只要算法学习好了,代码的质量就会获得提高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值