简介空间复杂度

      我们承接上一篇博客。我们写了时间复杂度之后,我们就要来介绍一下另一个相关复杂度了。空间复杂度。我觉得大家应该对空间复杂度认识可能比较少一些。我就是这样,我很少看见题目中有明确要求过空间复杂度的。但确实有这个是我们不可忽视的,所以我们要来学习和了解一下。

空间复杂度的含义

      我们还是老样子,对于空间复杂度的含义,我们先用官方的解释来看一下:空间复杂度 (Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S (n)=O (f (n))。 比如直接 插入排序 的 时间复杂度 是O (n^2),空间复杂度是O (1) 。 而一般的递归算法就要有O (n)的空间复杂度了,因为每次递归都要存储返回信息。这是比较官方的解释了如果换成白话就是:空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 就是一个代码在运行时需要临时创建的空间。可以理解为我原本只创建了40个字节的空间。然后再后面代码运行需要的时候又创建出来的空间大小,那么这就是空间复杂度了。当然有很多题在最开始创建的时候就给你确定的空间大小不能超过多少多少。所以我们这也是需要了解空间复杂度的必要性。

        然后对于空间复杂度来说也是用大O表示法来表示的。并且因为前面已经讲过大O表示法了,那么我们这里就不在赘述了。接下来我们就还是直接来讲述一下如何计算空间复杂多了。

举例解释空间复杂度

示例1:

        我们先来看一下我们上一篇博客也引用过就是冒泡排序。我们这里就来看看冒泡排序的空间复杂度是多少:

         我们在前面说过空间复杂度是计算我们在代码运行时需要临时创建的空间大小,那么就是我们的空间复杂度。

       我们看看冒泡排序的我们可以看一下这里它是否有重新创建一个新的空间?好像没有吧?因为这里面最多只是用那个是swap,就算是swap。他在内部重新创建了一个空间的话,那么也是个固定的,因为我们每次都可以直接重复利用,那么是不是我们这个冒泡排序的空间复杂度为零或者为一个常数? 然而我们在前面大o表示法中提及过,如果为常数的话,那么我们用大多表示法是不是都为O(1)。我们可以看到我们冒泡排序的空间复杂度和时间复杂度都为O(1)。所以大家也不要认为空间复杂度和时间复杂度是不相同的。

示例2:

        接下来我们用的第二个例子就是我们上一篇也使用过的斐波那契数列。当然与上一篇博客的系数是有一点不相同的。因为我们要计算它的空间复杂度,所以稍微改变了一下,大家可以先看一下下面的照片,大概尝试着计算出这个代码的空间复杂度是多少?

        我们可以看到这个代码里面在代码开头的时候就已经创建了一个空间了。在下面的for循环里面,我们对它的空间重新利用了一下。我们就在他后面都是创建新的空间。我们看一看这个。循环需要创建多少?是不是最主要的是就是我们的n。我们只需要确定了n的大小,那么我们就确定了我们还需要创建的空间大小了。然后我们也在前面说过大O表示法取最坏的结果。那么这个空间复杂度大家认为是多少呢?答案显而易见就是O(n)了。

示例3:

        接下来我们再举一个例子,我相信大家就对空间复杂度的计算很了解了。上面我们也讲过递归的时间复杂度是如何计算的,那么接下来我们就计算递归的空间复杂度是如何计算的?

        我们,大家来看一下这个递归。我们看递归嘛。肯定是会创建一个新的空间的。这里的递归是比较简单的,只创建一个。每一次都会创建一个,那么我们的这个递归是不是就是n啊。递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。空间复杂度为O(N)

       这个递归是比较简单的,很容易看出它的空间复杂度是多少。我们的空间反度其实相对的话使用的比较少,除非一些考官在面试的时候会专门挑刺来考你。

总结

        主要是大家需要了解一下和大概知道空间复杂度是如何计算的,这样就可以了。因为对于空间复杂度要求的话,其实题目还算比较少的,也像我们上面说过,除了一些在面试的时候需要考虑的话,至少我现在个人很少遇见对空间复杂度有要求的。总之大家还是需要了解一下如何计算嘛,然后这里就是今天这篇博客想与大家分享的吧。当然还有很多遗漏的东西,希望大家可以在评论区留言,然后我好补充。

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

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

相关文章

ID3算法决策树

步骤: 先计算出信息量;信息熵;信息增量; 再比较信息增量的大小,确定分类依据。 信息量: 信息熵: 信息增益:

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件,然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…

Nginx:location配置模块的用法

运维系列 Nginx:location配置模块的用法 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.c…

最新整理的机器人相关数据合集(1993-2022年不等 具体看数据类型)

机器人安装数据是指记录全球或特定区域内工业机器人新安装数量的信息,这一数据由国际机器人联合会(IFR)等权威机构定期发布。这些数据不仅揭示了机器人技术的市场需求趋势,还反映了各国和地区自动化水平及产业升级的步伐。例如,数据显示中国在…

550kg级大载重长航时无人机直升机技术详解

550kg级大载重长航时无人机直升机,作为一种高性能的无人机系统,具备了多项先进的技术特点,以满足高海拔、高寒等复杂环境下的应用需求。这些无人机直升机通常具备高载重、长航时、强适应性、高可靠性和良好的任务拓展性。 设备由无人直升机平…

Android sdk 安装已经环境配置

🍎个人博客:个人主页 🏆个人专栏:Android ⛳️ 功不唐捐,玉汝于成 目录 正文 一、下载 二、安装 三、环境配置 我的其他博客 正文 一、下载 1、大家可去官网下载 因为需要魔法 所以就不展示了 2、去下面这…

stm32精密控制步进电机(基础篇)

众所周知,步进电机由于使用脉冲控制,会比直流电机的控制稍难一些,但开环控制时也更加稳定。 落到做项目的时候,目前来说我都会先考虑步进电机,再去考虑直流,无刷这样的电机。包括毕设时所用的机械臂也是用…

整洁架构SOLID-单一职责原则(SRP)

文章目录 定义案例分析重复的假象代码合并解决方案 小结 定义 SRP是SOLID五大设计原则中最容易被误解的一个。也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。 在历史上,我们曾经这样描…

四大常见的排序算法JAVA

1. 冒泡排序 相邻的元素两两比较,大的放右边,小的放左边 第一轮比较完毕之后,最大值就已经确定,第二轮可以少循环一次,后面以此类推 如果数组中有n个数据,总共我们只要执行n-1轮的代码就可以 package Bu…

基于CentOS Stream 9平台搭建MinIO以及开机自启

1. 官网 https://min.io/download?licenseagpl&platformlinux 1.1 下载二进制包 指定目录下载 cd /opt/coisini/ wget https://dl.min.io/server/minio/release/linux-amd64/minio1.2 文件赋权 chmod x /opt/coisini/minio1.3 创建Minio存储数据目录: mkdi…

Ubuntu + SSH密钥连接服务器

1. 下载VS code cd到下载文件夹后,使用命令安装,把xxx复制为文件名 sudo dpkg -i xxx.deb2. 为VSCode换皮肤 3. 下载SSH插件和Docker插件 4. 配置SSH 把密钥key文件放在/home/your_user_name/.ssh/里面,然后在/home/your_user_name/.ssh/c…

昇思25天学习打卡营第7天|深度学习流程全解析:从模型训练到评估

目录 构建数据集 定义神经网络模型 定义超参、损失函数和优化器 超参 损失函数 优化器 训练与评估 构建数据集 首先从数据集 Dataset加载代码,构建数据集。 代码如下: #引入了必要的库和模块,像 mindspore 以及相关的数据处理模块等等。…

使用WinSCP工具连接Windows电脑与Ubuntu虚拟机实现文件共享传输

一。环境配置 1.首先你的Windows电脑上安装了VMware虚拟机,虚拟机装有Ubuntu系统; 2.在你的windows电脑安装了WinSCP工具; 3.打开WinSCP工具默认是这样 二。设置WinSCP连接 打开WinSCP,点击新标签页,进入到如下图的…

【持续集成_03课_Jenkins生成Allure报告及Sonar静态扫描】

1、 一、构建之后的配置 1、安装allure插件 安装好之后,可以在这里搜到已经安装的 2、配置allure的allure-commandline 正常配置,是要么在工具里配置,要么在系统里配置 allure-commandline是在工具里进行配置 两种方式进行配置 1&#xff…

关闭vue3中脑瘫的ESLine

在创建vue3的时候脑子一抽选了ESLine,然后这傻卵子ESLine老是给我报错 博主用的idea开发前端 ,纯粹是用不惯vscode 关闭idea中的ESLine,这个只是取消红色波浪线, 界面中的显示 第二步,在vue.config.js中添加 lintOnSave: false 到这里就ok了,其他的我试过了一点用没有

STM32-ADC+DMA

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. ADC模拟-数字转换器1.1 ADC模拟-数字转换器1.2 逐次逼近型ADC1.3 ADC框图1.4 ADC基本结构1.5 输入通道1.6 规则组的转换模式1.6.1 单次转换,非扫描模式1.6.2 连续转换,非扫描模式1.6.3 单次…

Python28-7.4 独立成分分析ICA分离混合音频

独立成分分析(Independent Component Analysis,ICA)是一种统计与计算技术,主要用于信号分离,即从多种混合信号中提取出独立的信号源。ICA在处理盲源分离(Blind Source Separation,BSS&#xff0…

Spring源码十七:Bean实例化入口探索

上一篇Spring源码十六:Bean名称转化我们讨论doGetBean的第一个方法transformedBeanName方法,了解Spring是如何处理特殊的beanName(带&符号前缀)与Spring的别名机制。今天我们继续往方法下面看: doGetBean 这个方法…

按键控制LED流水灯模式定时器时钟

目录 1.定时器 2. STC89C52定时器资源 3.定时器框图 4. 定时器工作模式 5.中断系统 1)介绍 2)流程图:​编辑 3)STC89C52中断资源 4)定时器和中断系统 5)定时器的相关寄存器 6.按键控制LED流水灯模…

对话大模型Prompt是否需要礼貌点?

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 基于Dify的QA数据集构建(附代码)Qwen-2-7B和GLM-4-9B&#x…