当前位置: 首页 > news >正文

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时间来节省内存。
  • 实际工程中,需要根据具体的性能瓶颈和资源约束来选择策略,而不是绝对地偏向某一种。
http://www.jsqmd.com/news/366808/

相关文章:

  • 2026年靠谱的橡塑隔热棉/橡塑隔音材料哪家质量好厂家实力参考 - 品牌宣传支持者
  • 【课程设计/毕业设计】基于springboot的学生档案管理系统用于各类学校档案管理提升校园信息化水平【附源码、数据库、万字文档】
  • 百元内口感柔和的白酒首选!毛铺绿荞领衔,自饮宴请都合适 - 资讯焦点
  • 2026年评价高的大提花工艺培训/梭织鞋面培训实操强化课程推荐 - 品牌宣传支持者
  • 2026年比较好的定制工厂零角度铰链/德国高端零角度铰链高评价直销厂家采购指南推荐(高评价) - 品牌宣传支持者
  • 计算机Java毕设实战-基于springboot的软件测试管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 2026年2月金属检测机厂家推荐,资质齐全、售后完善的供应商精选 - 品牌鉴赏师
  • 2026年NAD+产品排行榜,十款抗衰nad+品牌推荐,哪个产品效果、功效、口碑、性价比最好? - 资讯焦点
  • 2026欧洲自由行全流程指南:新手从行程规划到聪明订票的一站式攻略 - 资讯焦点
  • 2026年评价高的彩色橡塑保温板/铝箔橡塑保温管制造厂家实力参考哪家专业 - 品牌宣传支持者
  • Java毕设选题推荐:基于SpringBoot的学生信息管理系统基于springboot的学生档案管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年比较好的电梯/德阳电梯销售值得信赖的厂家推荐 - 品牌宣传支持者
  • Java毕设选题推荐:基于springboot的智慧医疗平台管理系统基于SpringBoot的智慧医疗综合服务平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年靠谱的实木酒店家具/佛山板式酒店家具哪家质量好厂家实力参考 - 品牌宣传支持者
  • 【毕业设计】基于springboot的体检预约小程序(源码+文档+远程调试,全bao定制等)
  • 医疗系统中ASP.NET大文件上传方案如何实现断点续传和加密功能?
  • 同程国际机票平台服务评价与横向对比分析 - 资讯焦点
  • SEAL全同态加密CKKS方案入门详解
  • 【Kotlin】一文轻松入门 Flow
  • 汽车制造行业如何选择支持ASP.NET大文件断点续传的网页上传控件?
  • 2026主流旅行平台国际机票服务多维测评:同程、携程、飞猪、去哪儿横向对比 - 资讯焦点
  • 2026年双洲12天出行全攻略:行程规划与机票预订详解 - 资讯焦点
  • 2026敏肌祛痘实测,哪款祛痘产品最有效果?优选兼顾祛痘、淡印、修护三重功效 - 资讯焦点
  • 汽车制造企业如何用TinyMCE实现CAD图纸Word文档转存?
  • 从芯到端全链路自主,天硕工业级固态硬盘打造高密度环境存储可靠方案 - 资讯焦点
  • 2026欧洲长途旅行全流程规划:10天行程安排与省心机票预订指南 - 资讯焦点
  • 实用指南:嵌入式Linux——解密 ARM 性能优化:LDR 未命中时,为何 STR 还能“插队”?
  • 安全焦虑正超越价格与品牌,成为新一代消费者的首要决策因素 - 资讯焦点
  • 2026 年最新 PE、PVC、复合管厂家推荐榜:五强实力对比 - 深度智识库
  • WSL2安装Openclaw