何为算法之空间复杂度

前言

不知前面所讲的算法的十大特征你是否记住了呢?其实除了这十大特征之外,算法还有两个衡量标准。
不同的问题需要使用不同的算法作为策略,不同的算法也可能占用不同的时间和空间来完成相同的任务,这时候,对算法的选择显得至关重要。一个算法的质量优劣将直接影响整个程序的运行效率。
算法分析的目的是选择合适的算法,并对算法进行改进。如何衡量一个算法的优劣呢?其标准是空间复杂度(Space Complexity)与时间复杂度(Time Complexity)。

什么是空间复杂度

一个算法所占用的存储空间包括三个方面:算法本身所占用的空间、输入/输出数据所占用的空间,以及算法运行所占用的空间。

1.算法本身所占用的空间

算法本身所占用的空间即程序代码区,用于存放算法程序的二进制代码,与程序的代码行数和各行长度相关。例如以下两段代码,它们实现的功能是一样的,但代码1所占用的空间明显比代码2要多一些。

代码1
#输出1~10中3的倍数
#定义test函数:输入任何列表,返回列表中3的所有倍数def test(x):list1 = []for i in x:if i % 3 == 0: # %是取余运算list1.append(i)return list1#调用test函数计算1~10中3的倍数
print(test(list(range(1,10))))

在这里插入图片描述

输出结果

在这里插入图片描述

代码2
#使用lambda函数
print(list(filter(lambda x: x % 3 == 0 ,range(1,10))))

在这里插入图片描述

输出结果

在这里插入图片描述

注意

由于算法本身所占用的空间很小,所以我们一般不做深究。

2. 输入/输出数据所占用的空间

输入/输出数据所占用的空间主要是指问题所调用的数据所占用的空间,跟算法没有关系。

3. 算法运行所占用的空间

算法运行所占用的空间就反映算法的空间复杂度,它是算法运行时所消耗的内存空间的量度,记作:
S ( n ) = O ( f ( n ) ) S(n)=O(f (n)) S(n)=O(f(n))
常见的空间复杂度有 O(1)、0(n)和 O ( n 2 ) O(n^2) On2等。
它们分别代表什么意思呢?很简单,当算法运行时占用的临时空间不随某一变量n的改变而改变时,即空间复杂度为常量,表示为 O(1)。同理,当算法运行时占用的临时空间随n的改变而改变时,空间复杂度即O(n);当算法运行时占用的临时空间随n^2的改变而改变时,空间复杂度则为 O ( n 2 ) O(n^2) On2以此类推。

用代码来表示空间复杂度,这对于 Python 来说简直太容易了。

注意

空间复杂度是算法运行时所占用空间的一个量度,而不是计算具体的占用空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学之何为数学

数学是什么 数学是绝大多数人学得最多的一门功课,但对于“数学是什么?”这一看来很普通的问题,却很难一下子给出一个使公众满意的回答。按照恩格斯的说法,数学是以现实世界的空间形式和数量关系为研究对象的。尽管人们现在对空间…

极智AI | 谈谈AI发展系列汇总

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来分享了 谈谈 AI 发展系列汇总。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 时光斗转星移,AI 飞速发展。 满打满算,我…

【Docker】可以将TA用于什么,简单了解下

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是是《Docker容器》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深…

RabbitMQ(十一)队列的扩展属性(Arguments)

目录 一、简介二、队列扩展属性清单三、代码示例3.1 实现方式一:channel.queueDeclare()3.2 实现方式二:QueueBuilder.build() 一、简介 RabbitMQ 允许用户在声明队列、交换机或绑定时设置 扩展属性(Arguments),这些扩…

c++语言基础19-洗盘子(栈)

题目描述 在餐厅里,洗盘子的工作需要使用到栈这种数据结构。假设你手里有一个盘子堆放区。现在需要模拟洗盘子的过程,每个盘子都有一个编号。 盘子堆放区操作说明: 1. 当操作为 1 时,表示从盘子堆放区拿走顶部的盘子清洗。 2. 当…

数据库管理-第130期 JSON二元性(20240109)

数据库管理130期 2024-01-09 第130期 JSON二元性(20240109)1 简介2 关系型表和JSON存储的优劣3 Oracle JSON关系型二元性视图总结 第130期 JSON二元性(20240109) 上周,又双叒飞了一趟上海,也是2024年第一飞…

LeetCode-字符串转换整数atoi(8)

题目描述: 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符&…

无线网卡怎么连接台式电脑?正确操作步骤分享!

“我在使用电脑时经常都需要用到网络,请问大家在使用无线网卡时怎么将它与台式电脑进行连接的呢?” 使用电脑的用户在进行网上冲浪时都需要先连接网络。如果不想使用网线,无线网卡不仅可以为用户提供网络服务,在使用时该更加灵活和…

MySQL使用count进行行数统计

MySQL count 在使用count进行数据统计行数时,有时候会使用count(*),有时候会使用count(1),有时候会使用count(列名),那么这些有什么不同呢 当使用列名作为参数时,count函数会自动忽略null值,而使用*或者常量…

springCould中的gateway-从小白开始【9】

目录 1.🍟网关是什么 2.🍿gateway是什么 3.🥚gateway能什么 4.🌭核心概念 5.🧂工作流程 6.🧈实例 7.🥓gateway网关配置的方式 8.🍳配置动态路由 9.🧇pred…

Excel使用pandas拆分单元格扩展

需要: 1. anconda环境 2. excel文件,有拆分标准的单元格内容(比如我此次的:**, ***, ****,...) 以前尝试自己写公式,唉😔,不是写不出来,就是太折腾了 3. 2行code,超级…

2022 年全国职业院校技能大赛高职组云计算赛项试卷部分解析

2022 年全国职业院校技能大赛高职组云计算赛项试卷部分解析 【赛程名称】高职组-云计算赛项第一场-私有云【任务 1】私有云服务搭建[10 分]【题目 2】Yum 源配置[0.5 分]【题目 3】配置无秘钥 ssh[0.5 分]【题目 4】基础安装[0.5 分]【题目 5】数据库安装与调优[0.5 分]【题目 …

IBM Spectrum LSF 常见问题

IBM Spectrum LSF 常见问题 1、随此产品一起部署的集群中包含哪些 Spectrum LSF 软件包? 包含以下 Spectrum LSF 程序: IBM Spectrum LSF Standard Edition IBM Spectrum LSF 许可证调度程序 IBM Spectrum LSF 数据管理器 2、哪些位置可用于部署 VPC 资源? 可以在 资源部…

yolo v7支持的设备

将一个深度学习模型(在这里是YOLOv7,一个目标检测模型)从PyTorch导出到不同的格式,以便在不同平台上进行推理(inference)。列出的方法包括: PyTorch 转 CoreML(适用于 macOS/iOS&am…

C++PDF书籍下载

[提高C.性能的编程技术].左飞.扫描版[www.ed2kers.com].pdf 链接: https://pan.baidu.com/s/1uA-oDGYhtAHmGZsbcr_Eow 密码: abv1 深度探索C对象模型.pdf 链接: https://pan.baidu.com/s/1uG9FDIq7T9EZIbjrfAVQaw 密码: gqaj C和C编码安全.pdf 链接: https://pan.baidu.com/s…

0003__WebAssembly完全入门——了解wasm的前世今身

WebAssembly完全入门——了解wasm的前世今身_webassembly.instantiate env-CSDN博客 WebAssembly初级——认识WebAssebmly(一)-CSDN博客

Hystrix服务熔断机制

熔断机制 熔断机制是应对雪崩效应的一种微服务链路保护机制,当系统链路中的某个微服务出现错误不可用或者响应时间太长的时候就会进行服务的降级,进而熔断该服务的调用,快速返回熔断的响应信息。当检测到该节点微服务调用正常后,…

Ansible自动化运维(二)ad-hoc 模式详解

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

506 - System Dependencies (UVA)

题目链接如下: Online Judge 这道题有个小细节,explicitly installed的component,不能被implicitly removed. 有一点拓扑排序的思想,用in[component]代表目前depend on在这个component上的component数量。 我的代码如下&…

秒杀相关问题及答案(2024)

1、描述一个秒杀系统的基本架构,并解释其中的关键组件 一个基本的秒杀系统架构通常由以下关键组件构成: 前端界面:用户与系统交互的界面,提供产品页面、秒杀开始倒计时、按钮等,用于发起秒杀请求。 反向代理和负载均…