算法复杂度

算法复杂杜旨在计算输入数据量N的情况下,算法的“时间使用”和“空间使用”情况;体现算法运行使用的时间和空间随着【数据大小N】而增大的速度。

算法复杂度主要可以从时间、空间两个角度评价:

  • 时间:假设各操作的运行时间为固定常数,统计算法运行的【计算操作的数量】,以代表算法运行所需要的时间;
  • 空间:统计在最差情况下,算法运行所需要的使用的【最大空间】

【输入数据大小N】指算法处理的输入量数据;根据不同算法,具有不同定义,例如:

  • 排序算法:N代表需要排序的元素数量
  • 搜索算法:N代表搜索范围的元素总数,例如数组大小、矩阵大小、二叉树节点数、图节点和边数等。

【时间复杂度】
数件复杂度是指输入数据大小为N时候,算法运行所需要花费的时间。

  • 统计的是算法的【计算操作数量】,而不是【运行的绝对时间】。计算机操作数量和运行绝对时间呈正相关关系,并不相等。算法运行时间受到编程语言、计算机处理速度、运行环境等多种因素影响。例如,同样的算法使用Python或者C++实现、使用CPU或者GPU、使用本地IDE或者其他编译工具,运行时间都不一样;
  • 体现的是计算操作随着数据大小N变化时的变化情况。假设算法运行总共需要1次操作、100次操作,次两种情况的时间复杂度都为O1;需要N次操作,100N此操作的时间复杂度都为O(N)

【空间复杂度】

空间复杂度涉及的空间类型有:

  • 输入空间:存储输入数据所需要的空间大小
  • 暂存空间:算法运行过程中,存储所有中间变量和对象等数据所需要的空间大小
  • 输出空间:算法运行返回时,存储输出数据所需要的空间大小
  • 通常情况下,空间复杂度是指在输入数据为N时候,算法运行使用的【暂存空间】+【输出空间】的总体大小

根据不同来源,算法使用的内存空间分为3类:

  • 指令空间:编译后,程序指令所使用的内存空间
  • 数据空间:算法中各项变量使用的空间,包括:声明的常量、变量、动态数组等使用的内存空间。
  • 栈帧空间:程序调用函数时基于栈帧实现的,函数在调用期间,占用常量大小的栈帧空间,直至返回后释放。

常见种类
根据从小到大排列,常见的算法空间复杂度有:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值