news 2026/11/4 19:32:22

3.空间复杂度

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3.空间复杂度

如果不考虑时间和空间的因素,所有的问题都可以通过穷举法解决。

这也是一开始做AI的强调算力的原因。

一,概念

空间复杂度是指算法在执行过程中所需要的存储空间。

包括算法运行时使用的变量/数组/链表 等数据结构所占用的内存空间。

通俗一点说,就是一个算法,内存用了多少(空间复杂度),执行了多长时间(时间复杂度)

所以,其实程序设计很简单,空间复杂度尽量低,时间复杂度尽量低。当然了,在没有bug的前提下。

以前的程序员,很在意这两个指标,是因为以前的计算机或者芯片存储有限,cpu性能弱,现在的计算机,存储大大的,性能过剩,所以,这两个指标弱一点也没关系。除非一些特殊的需求,例如某些ADC采集,要在尽量小的时间内将采样数据计算完毕。

二,常见数据结构的空间复杂度

下面是常见数据结构和算法操作的时间复杂度与空间复杂度对照表:

一、常见数据结构操作复杂度

数据结构

操作

平均时间复杂度

最坏时间复杂度

空间复杂度

数组

访问

O(1)

O(1)

O(n)

搜索

O(n)

O(n)

插入

O(n)

O(n)

删除

O(n)

O(n)

链表

访问

O(n)

O(n)

O(n)

搜索

O(n)

O(n)

插入(首尾)

O(1)

O(1)

删除(首尾)

O(1)

O(1)

栈

入栈

O(1)

O(1)

O(n)

出栈

O(1)

O(1)

访问栈顶

O(1)

O(1)

队列

入队

O(1)

O(1)

O(n)

出队

O(1)

O(1)

访问队首

O(1)

O(1)

哈希表

访问

O(1)

O(n)

O(n)

搜索

O(1)

O(n)

插入

O(1)

O(n)

删除

O(1)

O(n)

二叉搜索树

访问

O(log n)

O(n)

O(n)

搜索

O(log n)

O(n)

插入

O(log n)

O(n)

删除

O(log n)

O(n)

平衡二叉树
(如 AVL, 红黑树)

访问

O(log n)

O(log n)

O(n)

搜索

O(log n)

O(log n)

插入

O(log n)

O(log n)

删除

O(log n)

O(log n)

图(邻接表)

访问顶点

O(1)

O(1)

O(n+m)

访问边

O(1)

O(1)

遍历(BFS/DFS)

O(n+m)

O(n+m)


二、常见排序算法复杂度

排序算法

平均时间复杂度

最好时间复杂度

最坏时间复杂度

空间复杂度

稳定性

冒泡排序

O(n²)

O(n)

O(n²)

O(1)

稳定

插入排序

O(n²)

O(n)

O(n²)

O(1)

稳定

选择排序

O(n²)

O(n²)

O(n²)

O(1)

不稳定

归并排序

O(n log n)

O(n log n)

O(n log n)

O(n)

稳定

快速排序

O(n log n)

O(n log n)

O(n²)

O(log n)

不稳定

堆排序

O(n log n)

O(n log n)

O(n log n)

O(1)

不稳定

计数排序

O(n + k)

O(n + k)

O(n + k)

O(k)

稳定

桶排序

O(n + k)

O(n)

O(n²)

O(n + k)

稳定

基数排序

O(d * (n + k))

O(d * (n + k))

O(d * (n + k))

O(n + k)

稳定

注:

  • n 为数据规模,k 为桶/基数的范围,d 为基数排序的位数。
  • 空间复杂度 O(1) 表示原地排序,不占用额外辅助空间。
  • 顺序表:O (n),其中 n 是顺序表的长度。
  • 链表:O (n),其中 n 是链表的长度。
  • 栈:O (n),其中 n 是栈的最大深度。
  • 队列:O (n),其中 n 是队列的最大长度。
  • 哈希表:O (n),其中 n 是哈希表中元素的数量。
  • 树:O (n),其中 n 是树的结点数量。
  • 图:O (n+m),其中 n 是图中顶点的数量,m 是图中边的数量。

三、常见图算法复杂度

算法

时间复杂度

空间复杂度

适用场景

深度优先搜索 (DFS)

O(n + m)

O(n)

连通性、拓扑排序、强连通分量

广度优先搜索 (BFS)

O(n + m)

O(n)

最短路径(无权图)、连通性

Dijkstra 算法

O((n + m) log n)

O(n)

单源最短路径(非负权图)

Bellman-Ford 算法

O(nm)

O(n)

单源最短路径(可处理负权)

Floyd-Warshall 算法

O(n³)

O(n²)

所有顶点对最短路径

Kruskal 算法

O(m log m)

O(m)

最小生成树(稀疏图)

Prim 算法

O((n + m) log n)

O(n)

最小生成树(稠密图)


三,空间换时间

通常使用额外空间的目的,就是为了换取时间上的效率,也就是我们常说的空间换时间。最经典的空间换时间就是动态规划,例如求一个斐波那契数列的第 n 项的值,如果不做任何优化,就是利用循环进行计算,时间复杂度 O (n),但是如果引入了数组,将计算结果预先存储在数组中,那么每次询问只需要 O (1) 的时间复杂度就可以得到第 n 项的值,而这时,由于引入了数组,所以空间复杂度就变成了 O (n)。

空间换时间 vs 时间换空间 典型场景对照表

策略

核心思想

典型场景

时间复杂度变化

空间复杂度变化

适用场景

空间换时间

用额外的存储空间,来减少计算或查询的时间开销

1.动态规划:斐波那契数列、背包问题,用数组存储子问题解,避免重复计算。
2.缓存/记忆化:浏览器缓存、Redis缓存,将频繁访问的数据存在内存中。
3.哈希表:用数组+链表实现哈希表,将查找时间从O(n)降到O(1)。
4.预处理:前缀和数组,将区间和查询从O(n)降到O(1)。
5.位图:用位运算存储布尔值,快速判断元素是否存在。

通常降低(如从O(n)→O(1)或O(log n))

通常升高(如从O(1)→O(n))

对响应时间敏感、内存资源相对充足的场景,如Web服务、数据库索引、高频查询系统。

时间换空间

用更多的计算时间,来减少对存储空间的占用

1.原地排序:快速排序、堆排序,在原数组上排序,空间复杂度O(1)。
2.迭代代替递归:用循环实现斐波那契数列,避免递归栈的O(n)空间开销。
3.流式处理:逐行读取大文件,不将整个文件加载到内存。
4.压缩算法:用CPU时间对数据进行压缩,减少存储占用。
5.延迟计算:需要时才计算结果,不预先存储所有可能值。

通常升高(如从O(1)→O(n))

通常降低(如从O(n)→O(1))

内存资源受限、对时间要求不苛刻的场景,如嵌入式设备、移动应用、处理超大规模数据集。


补充说明

  • 空间换时间的本质是“预计算+存储”,通过牺牲内存来换取更快的响应速度。
  • 时间换空间的本质是“按需计算+复用”,通过牺牲CPU时间来节省内存。
  • 实际工程中,需要根据具体的性能瓶颈和资源约束来选择策略,而不是绝对地偏向某一种。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 21:40:28

汽车制造企业如何用TinyMCE实现CAD图纸Word文档转存?

没有任何限制的在任何产品中使用,完全开放产品源代码。 今儿一早,又有位网友“神通广大”地加了我微信,说是想探探这块技术的底儿,聊聊解决方案。原来,这位老兄也撞上了在富文本编辑器里粘贴Word图片自动上传的“小怪…

作者头像 李华
网站建设 2026/11/4 15:49:53

医疗系统中ASP.NET大文件上传方案如何实现断点续传和加密功能?

企业级大文件传输系统技术方案 ——基于ASP.NET WebForm的跨浏览器兼容与多数据库集成 一、项目背景与核心需求 作为北京某软件公司项目经理,我司需为现有ASP.NET WebForm产品(服务于20政府/军工客户)增加10GB级安全文件传输功能&#xff…

作者头像 李华
网站建设 2026/11/5 9:15:48

Java小白求职面试:从Spring Boot到分布式缓存的技术答疑

Java小白求职面试:从Spring Boot到分布式缓存的技术答疑 场景描述 在某互联网大厂的面试场景中,面试官对一位名叫“超好吃”的Java小白程序员进行了技术面试。面试场景选择了内容社区与UGC平台,围绕Java技术栈展开了三轮提问。第一轮&#xf…

作者头像 李华
网站建设 2026/11/5 9:13:53

MATLAB分步傅里叶法仿真光纤激光器锁模脉冲产生 解决了可饱和吸收镜导致的脉冲漂移问题

MATLAB分步傅里叶法仿真光纤激光器锁模脉冲产生 解决了可饱和吸收镜导致的脉冲漂移问题光纤激光器的锁模脉冲仿真就像在钢丝上跳舞,既要准确描述非线性效应,又要控制数值稳定性。咱们今天用MATLAB的分步傅里叶法来试试这个活儿,重点解决仿真中…

作者头像 李华