数据结构学习:时间复杂度和空间复杂度

理解时间与空间复杂度
本文通过计算1至100求和的例子,对比两种不同算法的时间复杂度和空间复杂度,介绍了这两个概念的基本含义及如何衡量算法效率。

前一段去面试,被问到了时间复杂度和空间复杂度,其实这是两个并不复杂的概念,但是从大学开始就没弄明白,就一直搁浅。。。面试过后大受刺激,决定弥补自己的这段漏洞。

  1. 干什么的

先来说说它们是用来干什么的,举个简单的例子,比如让你计算1+2+3+……..100,一个简单的程序,相信大部分人抬手就写出了如下代码。

 

A:  For(i=1;i<101;i++)

{

   sum=sum+i;

}

这段很简单没什么问题,但是计算这个问题还有另一种算法,相信大家还记得数列的求和公式(数学家高斯计算的时候就用的是这个方法),(1+n)n/2,相信大家还记得,首项加末项乘以项数除以2(这句好像有点多余。),如果使用了这个公式的话,算法就变成了。

           B: Sum=(1+100)*100/2

相信大家已经发现了区别,上面的代码运行了100次(也就是N次),下面的代码无论n为几,都只运行了一次,那么这种区别如何描述呢,就引入了时间复杂度这个词。

  1. 代表什么意思

时间复杂度可以理解为计算机处理这段代码所需的时间(当然你要抛开硬件问题,不能用286和现在的电脑比运行时间。。),那如何来表示呢。A段代码我们要处理n个数,要运行n次,那么我们用一个函数f(n)来表示代码运行的次数,括号里面的n代表你要处理的数,A段代码中要运行n次,那么对于A来说f(n)=n,同样B段代码,只运行了一行代码,所以f(n)=1,所以我们用f(n)来表示代码运行的次数。

时间复杂度的表达式是 T(n)=O(f(n)),f(n)之前已经解释过了,那么O(f(n))就代表运行f(n)所需要的时间,那么对于A段代码的时间复杂度就表示为O(n),B段代码为O(1),那么比较A和B,随着n的增大,O(n)明显远大于O(1)。

  1. 空间复杂度

这个其实和时间复杂度差不多,空间复杂度的主要作用是用来空间来赢得时间,比如之前从1加到100,如果事先建好了一个数组,里面记录了1到100的值,比如sum[1]=1,sum[2]=3………….sum[100]=5050,那么这样再计算代码A的时候只需要一句代码去数组里面查找key对应的value就可以了,只需要一次查找所以时间复杂度是0(1),虽然赢得了时间,但是浪费了内存空间,所以空间复杂度为O(n),到底什么时候需要利用空间换取时间都要根据具体的情况来定。

 

有不对的地方还希望大家批评指正,互相交流学习。

转载于:https://www.cnblogs.com/angry-elephant/p/3231791.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值