算法与数据结构学习笔记(1)_时间和空间复杂度

复杂度

  1. 时间复杂度
  2. 空间复杂度

基本概念:
复杂度用于分析程序运行消耗的时间(1),和硬件资源(2)的程度。

时间复杂度

算法的时间复杂度是一个函数,算法中进行的基本操作次数,为算法的时间复杂度。
一般使用大O的渐进表示法表示。

推导大O阶方法:

  1. 常数1取代运行时间中的所有加法常数;
  2. 在修改后的运行次数函数中,只保留最高项阶;
  3. 如果最高阶存在且不为1,置1,得到结果即为大O阶。

算法存在不同输入下的时间复杂度差异情况:
最坏:任意输入规模的最大运行次数
最好:任意输入规模的最小运行次数
平均:任意输入规模的期望运行次数

在一个长度为n的数组中查找一个数x:
最坏:n
最好:1
平均:n/2

而一般情况下我们关注的是算法的最坏运行情况,因此其时间复杂度为O(n)。

冒泡排序的时间复杂度:
运算的次数相当于其中每个数和除此数以外的所有数做一次比较。结果为1~(n-1)的等差数列之和。
最坏情况:(n-1)*n/2—>O(n^2)
最好情况:原本数列就是有序的,只需全部遍历一边,O(n)

二分查找的时间复杂度(以数组有序为前提):
由于二分查找每次将数组的查找范围减半,那么意味着最差的情况下是只剩最后一个数的时候找到目标数。那么此时假设已经进行了x 次减半,就意味着数组大小n<=2^x。所以x>=log(2)n
最坏情况:O(log(2)n)
最好情况:1

以递归算法计算阶乘的时间复杂度
由于递归算法的时间复杂度为:递归次数*每次递归函数的次数
阶乘递归n次,因此时间复杂度为O(n)

不同算法对时间复杂度的影响

求出斐波那契数列

  • 方法1,使用递归计算
    fib(n)=fib(n-1)+fib(n-2)
    其每次向下递归一次,单层递归次数*2。最终的递归次数相当于一个1+2+22+…+2n-1的等比数列求和过程,其运算次数近似等于2n-1,时间复杂度为O(2n)。

  • 方法2,使用指针数组算法
    申请一个空间为n个整数的数组,将前两项的和存储在第三项中,依次类推,那么得到第n项的值只需要进行n次运算,时间复杂度为O(n)。

空间复杂度

空间复杂度计算的是占用变量的个数。

如递归阶乘的调用次数为n阶,每次调用都要多开辟一块存储空间,空间复杂度为O(n)。

斐波那契数列的指针数组解法,由于其占用的运算资源是申请的数组大小和常数的变量申请,空间复杂度为O(n)。

springboot052基于Springboot+Vue旅游管理系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值