考研时间复杂度和空间复杂度的计算看这一篇就够了

本文详细介绍了时间复杂度的定义、计算方法,通过折半查找、递归累乘、递归累加和斐波拉切数列的例题来说明。同时,讨论了空间复杂度的概念,以冒泡排序、开辟数组和递归调用为例,探讨了空间利用与函数栈帧对空间复杂度的影响。

目录

一.时间复杂度定义

二.时间复杂度的计算方法

三.例题 

3.1 折半查找时间复杂度

3.2 递归累乘的时间复杂度 

3.3:递归累加 

3.4 斐波拉切数列 

四.空间复杂度

4.1 空间复杂度是数额外空间。

4.2 计算方法 

4.3 例题

3.3.1 冒泡排序 

3.3.2 开辟数组

3.3.3 递归调用和斐波拉切数列的空间复杂度 


一.时间复杂度定义

1.时间复杂度是估计,O(n),最坏情况。

二.时间复杂度的计算方法

1. 常数O(1)

2. 直观的数循环

3.不直观的用思想去做。

三.例题 

3.1 折半查找时间复杂度

3.2 递归累乘的时间复杂度 

 

累乘n次调用了n次函数,所以时间复杂度为O(n)。

 

 

3.3:递归累加 

 

这里N,循环执行N次,调用函数Fac,循环9次,直到循环0次是一个等差数列。 

 

3.4 斐波拉切数列 

 

 

我们会发现这里类似于等比数列求和,可以用错位相减。 所以时间复杂度为O(2^{N}

 

四.空间复杂度

4.1 空间复杂度是数额外空间。

空间复杂度不是O(N),就是O(1),除了快排O(log N),二维数组(N^{2}

4.2 计算方法 

数自己额外定义的变量,指针,数组等。

4.3 例题

3.3.1 冒泡排序 

 

这里我们定义了 size_t,exchange,i。等虽然定了很多变量但任然是常数,所以空间复杂度为 O(1) 

3.3.2 开辟数组

这里我们发现,我们定义了一个n+1个空间的数组,所以我们额外用了n+1个空间。所以我们时间复杂度为O(n) 

3.3.3 递归调用和斐波拉切数列的空间复杂度 

注意(❁´◡`❁) 

1. 递归的过程不是同时调用的,先让+号左边的递归完,在让+后的递归

2. 时间是累计的,一去不复返。

2. 空间虽然也是累加,但是空间是可以重复利用的。

 

这里用到了函数栈帧的知识。

在Fib(N-1)调用完了之后,就会销毁。但是空间会留下来,给右边的Fib(N-2)使用,所以空间可以重复使用。 Fib1和Fib2调用是一块栈帧的空间。

所以这题空间复杂度是O(N) 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值