目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

Python全系列 教程

3567个小节阅读:5930.8k

收藏
全部开发者教程

鸿蒙应用开发

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(273)
赞(0)

空间复杂度

image-20231130150851240

空间复杂度用于衡量算法占用内存空间随着数据量变大时的增长趋势。

这个概念与时间复杂度非常类似,只需将“运行时间”替换为“占用内存空间

算法相关空间

算法在运行过程中使用的内存空间主要包括以下几种:

  • 输入空间:用于存储算法的输入数据。
  • 暂存空间:用于存储算法在运行过程中的变量、对象、函数上下文等数据。
  • 输出空间:用于存储算法的输出数据。

一般情况下,空间复杂度的统计范围是“暂存空间”加上“输出空间”

暂存空间可以进一步划分为三个部分。

  • 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。

  • 栈帧空间:用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函数返回后,栈帧空间会被释放。

  • 指令空间:用于保存编译后的程序指令,在实际统计中通常忽略不计。而空间复杂度更关注于数据的存储。指令空间的大小通常是固定的,与输入规模无关。

    image-20231130124039032

计算空间复杂度

空间复杂度的推算方法与时间复杂度大致相同,只需将统计对象从“操作数量”转为“使用空间大小”

而空间复杂度只关注最差空间复杂度

常见类型

O(1)<O(logn)<O(n)<O(n2)<O(2n)<<线<<

常数级 $O(1)$

常数级常见于数量与输入数据大小 $n$ 无关的常量、变量、对象。

注意

在循环中初始化变量或调用函数而占用的内存,在进入下一循环后就会被释放,因此不会累积占用空间,空间复杂度仍为 $O(1)$

线性级 $O(n)$

线性级复杂度,常见于元素数量与 $n$ 成正比的数组、链表、栈、队列等:

平方级 $O(n^2)$

平方级复杂度,常见于矩阵和图,元素数量与 $n$ 成平方关系

指数级 $O(2^n)$

指数级复杂度随着输入数据规模的增加,运行空间呈爆炸性增长。常见于二叉树

image-20231129220243458

对数级 $O(logn)$

与指数级相反,对数级反映了"每轮缩减到一半"的情况。设输入数据大小为 $n$ ,由于每轮缩减到一半

image-20230314135530663

时间与空间优化

理想情况下,我们追求算法在时间和空间两方面都能取得最佳的性能。然而,实际上,提升时间复杂度通常需要牺牲空间复杂度,而反之亦然。这导致了一个经典的权衡:是选择“以空间换时间”还是“以时间换空间”

在实际编码中,通常更重视时间效率,因此“以空间换时间”的策略更为常见。这意味着我们愿意使用更多的内存空间来提高算法的执行速度。当然,在处理大规模数据时,控制空间复杂度也变得至关重要。

实时效果反馈

1. 以下关于算法空间复杂度的说法错误的是?

A 常数级空间复杂度不随问题规模增大而改变

B 算法占用更少存储空间,空间复杂度也越低

C 算法中递归层数越深,空间复杂度一般越高

D 代码优化不会改变算法的空间复杂度

答案

1=>D

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2