『数据结构』空间复杂度

  •  🚩 WRITE IN FRONT 🚩       

  • 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
  • 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、腾讯云年度进取作者、全网粉丝量8w+、个人社区人数累计5w+、全网访问量100w+ 🏅
  • 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
  • 📑 创作时间:2022 年 11 月 18 日 📅
  • 📝 个人主页:謓泽的博客 📃
  • 📣 专栏系列:📃
  • 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
  • 🎁 点赞👍+ 收藏⭐️+ 留言📝​
  • ✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩

​前言

说明⇢如果你对数据类型以及时间复杂度不是很了解的话可以看看博主写的这两篇文章⇲

✨【数据结构】何为数据结构。-CSDN博客

✨【数据结构】时间复杂度-CSDN博客

Who 空间「复杂度」

📑空间效率。

概述⇢空间效率被称之为是空间复杂度。空间复杂度主要是衡量的是一个算法所需要的额外的空间,在计算机发展的早期时代,计算机的存储容量已经到达了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

说明⇢空间复杂度是对一个算法在运行过程当中临时占用存储空间的大小的量度、空间复杂度不是程序占用了多少个byte位的空间,因为这个也没有太大的意义。所以空间复杂度计算的是变量所占的个数。

说明⇢空间复杂度计算规则和基本很实践的复杂度类似,也是使用大O渐进的表示法,类似于时间复杂度的方式去计算变量当中的个数。

注意⇢现如今在实际情况时间复杂度比空间复杂度要重要的多。

大O的渐进表示法

🉑解释大O符号(Big O notation)⇢用于描述函数渐进的行为数字符号。

🎓总结时间复杂度它是一个估算,是去看表达式当中影响值最大的那一项、也可以说是保留最高阶项。

🕹推导大O阶的方法。

⒈用常数1取代运行时间中的所有加法常数,即使这个常数再大,算法的时间复杂度还是O(1)

⒉修改后的运行次数函数当中,只保留最高阶项。

⒊如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

  • 以上三点请牢牢记住!

示例代码①

说明⇢计算下述函数当中的空间复杂度。

void sort(int* arr, int n)
{
	assert(arr);
	for (int end = n; end > 0; --end)
	{
		int exchange = 0;
		for (int i = 1; i < end; ++i)
		{
			if (arr[i - 1] > arr[i])
			{
				Swap(&arr[i - 1], &arr[i]);//交换
				exchange = 1;
			}
		}
		if (exchange == 0)
			break;
	}
}

题目的分析如下⇲

概述⇢在上述的题目当中一共使用了三个空间,也就是三个变量。

end
exchange
i

说明⇢在这里影响最大的也就是这三个变量,那么它的空间复杂度为O(1),因为③是常数。

注意⇢在这里形参也算是变量,它也是需要开辟空间的,会建立栈帧,栈帧就是一块空间。上述代码当中的变量就是存储在栈帧上面的。算上形参当中的两个变量,数组名是首元素的地址,也是一个变量。但是,它的空间复杂度还是O(1)

重点⇢时间是累计的,而空间是不累计的。循环走了N次,重复利用的是一个空间。在上述代码exchange出了作用域变量就会销毁了,再上来还是要使用exchange还是用的是同一个空间,不累计的,而是出了作用域就会被销毁的。

递归的情况

示例情况如下⇣

↓face(5)↑

↓5+face(4)↑

↓4+face(3)↑

↓3+face(2)↑

↓2+face(1)↑

return 1  ↑

说明⇢空间是累计最多的用了多少的空间、调用的时候建立栈帧,返回的时候销毁栈帧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用GDI对象绘制UI时需要注意的若干细节问题总结

目录 1、一个bitmap不能同时被选进两个dc中 2、CreateCompatibleDC和CreateCompatibleBitmap要使用同一个dc作为参数 3、不能删除已经被选入DC中的GDI对象 4、使用完的GDI对象&#xff0c;要将之释放掉&#xff0c;否则会导致GDI对象泄漏 5、CreateCompatibleBitmap返回错…

NineData云原生智能数据管理平台新功能发布|2024年11月版

本月发布 8 项更新&#xff0c;其中重点发布 2 项、功能优化 6 项。 重点发布 数据库 Devops - 数据生成支持多个数据源 NineData 支持在数据库中自动生成符合特定业务场景的随机数据&#xff0c;用于模拟实际生产环境中的数据情况&#xff0c;帮助用户在不使用真实数据的情况…

Github clone 的时候出现Error in the HTTP2 framing layer错误

解决方案 github鉴权认证&#xff0c;打开gitbash&#xff0c;并输入 ssh-keygen -t rsa -C "emailicjs.cc" 执行后会在 .ssh 目录生产两个文件&#xff1a;id_rsa&#xff08;私有密钥&#xff09;和id_rsa.pub&#xff08;公开密钥&#xff09; 直接默认回车执行…

html-两个div,让一个div跟随另外一个div的高度

在开发的过程中遇到有些场景事这样的&#xff0c;两个div的高度不一致&#xff0c;而且都是动态高度&#xff0c;有的时候div1高&#xff0c;有的时候div2高&#xff0c;如果设置flex的话&#xff0c;那么就会把较矮的元素撑大&#xff0c;但是我想始终都以div1的高度作为基准&…

【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石

我的个人主页 我的专栏&#xff1a;Java-数据结构&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 一、引言 1. 栈与队列在编程中的角色定位 栈和队列作为两种基本的数据结构&#xff0c;在众多编程场景中都有着独特的地位。它们为数据的有序…

EasyAnimateV5 视频生成大模型原理详解与模型使用

在数字内容创作中&#xff0c;视频扮演的角色日益重要。然而&#xff0c;创作高质量视频通常耗时且昂贵。EasyAnimate 系列旨在利用人工智能技术简化这一过程。EasyAnimateV5 建立在其前代版本的基础之上&#xff0c;不仅在质量上有所提升&#xff0c;还在多模态数据处理和跨语…

浅谈volatile

volatile有三个特性&#xff1a; &#xff08;1&#xff09;可见性 &#xff08;2&#xff09;不保证原子性 &#xff08;3&#xff09;禁止指令重排 下面我们一一介绍 &#xff08;一&#xff09;可见性 volatile的可见性是说共享变量只要修改&#xff0c;就可以被其他线…

深入理解AVL树:结构、旋转及C++实现

1. AVL树的概念 什么是AVL树&#xff1f; AVL树是一种自平衡的二叉搜索树&#xff0c;其发明者是Adelson-Velsky和Landis&#xff0c;因此得名“AVL”。AVL树是首个自平衡二叉搜索树&#xff0c;通过对树的平衡因子进行控制&#xff0c;确保任何节点的左右子树高度差最多为1&…

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项

网络练级宝典-> UDP传输层协议

目录 传输层 端口号 端口号和进程的关系 UDP协议 UDP协议格式 UDP数据封装&#xff1a; UDP数据分用&#xff1a; 面向数据报 UDP的缓冲区 UDP的缺点 基于UDP的应用层协议 传输层 端口号 我们知道端口号对应的其实就是一个进程的pid&#xff0c;在操作系统中二者的…

基于飞腾S2500处理器的全国产加固服务器

近日&#xff0c;西安康德航测电子科技有限公司凭借其深厚的行业底蕴和创新精神&#xff0c;正式推出了基于飞腾S2500处理器的全国产加固服务器。这一产品的问世&#xff0c;不仅标志着我国在信息技术领域的自立自强迈出了坚实的一步&#xff0c;更以其卓越的性能、坚固的设计和…

移植NIOS10.1工程,NIOS10.1路径修改

移植NIOS10.1工程&#xff0c;NIOS10.1路径修改 因工程的需要&#xff0c;使用的NIOS10.1&#xff0c;比较老&#xff0c;这个版本的路径是使用的绝对路径&#xff0c;导致移植工程市回报路径的错误&#xff0c;在13.1之后改为了相对路径&#xff0c;不存在这个问题。 需要修…

`pnpm` 不是内部或外部命令,也不是可运行的程序或批处理文件(问题已解决,2024/12/3

主打一个有用 只需要加一个环境变量 直接安装NodeJS的情况使用NVM安装NodeJS的情况 本篇博客主要针对第二种情况&#xff0c;第一种也可参考做法&#xff0c;当然眨眼睛建议都换成第二种 默认情况下的解决方法&#xff1a;⭐⭐⭐ 先找到node的位置&#xff0c;默认文件夹名字…

FFmpeg:强大的音视频处理工具指南

FFmpeg&#xff1a;强大的音视频处理工具指南 1. FFmpeg简介2. 核心特性2.1 基础功能2.2 支持的格式和编解码器 3. 主要组件3.1 命令行工具3.2 开发库 4. 最新发展5. 安装指南5.1 Windows系统安装5.1.1 直接下载可执行文件5.1.2 使用包管理器安装 5.2 Linux系统安装5.2.1 Ubunt…

openEuler卸载 rpm安装的 redis

停止 Redis 服务 sudo systemctl stop redis禁用 Redis 服务 sudo systemctl disable redis 卸载 Redis 软件包 sudo yum remove redis查找并删除 Redis 的残留文件 find / -name red*删除 Redis 配置文件 删除 Redis 数据文件 sudo rm -rf /var/lib/redis检查 Redis 是否…

1.kettle保姆级安装教程

1 配置java 1.1 安装jdk 1.双击软件&#xff08;kettle要用jdk 1.8版本&#xff09; 2.选择安装路径地址&#xff0c;可以选择默认。要记好安装路径地址&#xff0c;等会要用 1.2 配置环境变量 1.右击计算机&#xff0c;属性 2.高级系统设置 3.环境变量 4.系统变量 – 新建 …

【Elasticsearch】实现分布式系统日志高效追踪

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

K8s 十年回顾(Ten Year Review of K8s)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。Kubernetes 十年回顾 起源与…

大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Lambda表达式提取字段名

文章目录 前言例子原理writeReplace反序列化对象缓存元数据 写一个工具 前言 实体类:方法这种方式获取字段名&#xff0c;摒弃了字符串拼接方式&#xff0c;避免拼接出现的问题&#xff0c;提高框架维护性和可修改性。 例子 引入Mybatis-Plus <dependency><groupId…