数据结构——时间复杂度和空间复杂度

目录

时间复杂度是什么?

大O渐进法

大O渐进法的规则

空间复杂度是什么?

时间复杂度是什么?

在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的运行时间。

简而言之就是这个算法执行耗费的时间。

那我们是怎么计算时间复杂度的呢?


大O渐进法

我们一般使用大O渐进法来计算时间复杂度,我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数


大O渐进法的规则

1.如果有常数,将常数变成1

2.取最高阶项数,其他的都不要

3.最高项数的前面有系数的,要将系数变成1

我们接下来举个例子来用一下大O渐进法的规则吧

所以结果为N^2 +2N +10

然后我们再遵循大O渐进法的法则1,将结果变为N^2 +2N +1

法则2,结果变为N^2 

法则3,因为N前面没有系数了

所以最终结果为O(N^2)

在实际中一般情况关注的是算法的最坏运行情况


最终结O(M+N)


 遵循法则1,所以最终结果为O(1)


这是一个等差数列,利用求和公式,N^2 / 2

遵循大O渐进法规则,最后的结果为O(N^2)


 这是一个二分查找,假设原来是N,每次都会减一半,最后就变成1了

按照这个规律,N/2^X=1     X=logN(这里是log以二为底的嗷)


递归,递归的时间复杂度 的规则是  递归的次数 * 每次递归后代码执行的次数 

这里进入递归后每次也就执行一次代码,没有进入for循环啊while循环啊之类的,递归的次数是N,每次递归后执行代码的次数为1

所以这个代码的时间复杂度为O(N)


 这是一个斐波那契递归,这里递归后每次也就执行一次代码,而递归的次数还要计算一下

我们不难发现这是一个等比数列,公比是2

我们可以用等比数列的求和公式来进行计算结果为2^N,所以这个的时间复杂度为O(2^N)


空间复杂度是什么?

空间复杂度 是对一个算法在运行过程中临时占用存储空间大小的量度

看问题的规模和临时占用的空间有没有关系

规则:也是用大O渐进法来求

接下来,我们举几个例子

所以根据分析可得这个的空间复杂度为O(1)


 所以根据分析可得这个的空间复杂度为O(N)


 

 计算斐波那契递归的空间复杂度,可以带入数字进行类比

 我们发现每次在计算左边的时候右边还没被计算,在计算右边的时候,左边的已经计算完了,并且空间也被收回了,所以我们只用看极端情况,也就是这个最深到哪,所以有N个,最后空间复杂度为O(N)


总结

时间复杂度和空间复杂度不应该光看代码就得出结果,还要结合这个代码的思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值