数据结构:算法复杂度

0e218271751d44cf8c45cfa02acf933e.png

(图片在线看可能不清晰可长按保存到手机查看)

时间复杂度

同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。[1]这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。

eg1: O(N^2)

94fc2784cdd24360896bd53b851dda1b.png

eg2: O(1)

6ab43ff1094c4b1daf97ed6de7787ff3.png

eg3:O(N)

95bdd65832154e1ea4d6cd512c890c48.png

eg4:冒泡排序时间复杂度 

e9ac2f1feb85449aa1c2e43dd0723db1.png

eg5: 二分查找时间复杂度

be91d33deee54ec5a9df7b380e87ff5e.png

eg6:递归 斐波那契数列时间复杂度 

 860f879b28124e3586b211ff96bef01c.png

 空间复杂度

一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。程序执行时所需存储空间包括以下两部分。

(1)固定部分。这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。

(2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。

eg1:循环 斐波那契数列

8e0320174ead4bc9b9be92f0ce5b697e.png

eg2:阶乘空间复杂度 

该函数虽然未创建任何变量,但每当调用函数时都会创建空间,该空间里边含有函数变量,寄存器等等 ,故该阶乘写法虽未创建变量但一样会开辟空间

cb94d9b0f48849f3bcbe37169cb10ca7.png

 eg3:递归 斐波那契数列

函数栈帧调用的实质 :

栈区空间是极小的,故不像时间一样,他是一层层调用,当该层空间调用结束后再重新调用该空间

830d84b396064060a098758fc8489701.png

 

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

食懵你啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值