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

数据结构时间复杂度(补充)和空间复杂度

在这里插入图片描述

Hello,今天事10月27日,距离刚开始写博客已经过去挺久了,我也不知道是什么让我坚持这么久,但是学校的课真的很多,很少有时间多出来再学习,有些科目马上要考试了,我还不知道我呢不能过哈哈哈,今天的内容主要是想和大家继续分享之间的时间复杂度和空间复杂度,再拿出几个oj题目,我们一个一个来分析,那开始我们今天的学习吧。

那我们先来给大家补充几个时间复杂度的题目。

// 计算阶乘递归Fac的时间复杂度?
long long Fac(size_t N)
{if (0 == N)return 1;return Fac(N - 1) * N;
}

时间复杂度不是来算时间的,我们最后还是算的次数,这里N的阶乘就是要知道N-1的大小,我们要知道N-1的值的话,就得先知道N-2的值,依次这样类推下去,一直到1的时候,我们递归才开始调用返回,那我们一直到1的话就是需要N次,所以时间复杂度就是N次

在这里插入图片描述

// 计算斐波那契递归Fib的时间复杂度?
long long Fib(size_t N)
{if (N < 3)return 1;return Fib(N - 1) + Fib(N - 2);
}

这个题目有点难懂,它的结构就是相当于一个二叉树,但是不完整的二叉树,我们这里也是递归往下走的,如果我们要求N的斐波那契,就必须得先知道N-1和N-2的斐波那契数,依次类推,要想知道N-1的斐波那契就必须先知道N-2和N-3的斐波那契数,一直到1和2递归才开始往回走,那我们还是来画图来解决。

在这里插入图片描述
属实画的太抽象了,就是我们一直往下递归,一直到1和2才开始结束,但是我们之前说过其实这个不是一个完整的递归二叉树,原因是有些提前结束了,但是因为时间复杂度是可以通过估算的,我们看第一层有1个,第二层有2个依次往下就是一个等比数列,每个都是×2,那就是等比数列求和,大家肯定会,用大O渐进表示法就是O(2的n次方)

空间复杂度
空间复杂度就是开的空间,我们这个程序需要多大的空间,官方一点的回答请看下面。

空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。
空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。
空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。
注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。

我们直接上题目来讲解,一个男人强不强,肯定得是看他实战(狗头)

// 计算BubbleSort的空间复杂度?
void BubbleSort(int* a, int n)
{assert(a);for (size_t end = n; end > 0; --end){int exchange = 0;for (size_t i = 1; i < end; ++i){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);exchange = 1;}}if (exchange == 0)break;}
}

我们这个开辟了多少空间,这里我们开辟很多变量,但是这些变量也都是常数次的,因此时间复杂度就是O(1),其他也没消耗和额外的开辟空间,我们都知道我们再调用函数的时候,是会创建函数栈帧的,只会在这个函数栈帧中压栈和出栈,但是我们这个操作都是常数次,


// 计算Fibonacci的空间复杂度?
// 返回斐波那契数列的前n项
long long* Fibonacci(size_t n)
{if (n == 0)return NULL;long long* fibArray = (long long*)malloc((n + 1) * sizeof(long long));fibArray[0] = 0;fibArray[1] = 1;for (int i = 2; i <= n; ++i){fibArray[i] = fibArray[i - 1] + fibArray[i - 2];}return fibArray;
}

这个其实很明显,我们malloc就是开空间,开N个那空间复杂度就是O(N),这里都不用多想。

// 计算阶乘递归Fac的空间复杂度?
long long Fac(size_t N)
{if (N == 0)return 1;return Fac(N - 1) * N;
}

这里我们递归下去,就是会一直开辟函数栈帧,一直到N==0的时候他们才开始返回,所以这里空间复杂度其实就是O(N),这里给大家在同样的发出一个其他的问题,也是斐波那契函数。
来加个餐

// 计算斐波那契递归Fib的时间复杂度?
long long Fib(size_t N)
{if (N < 3)return 1;return Fib(N - 1) + Fib(N - 2);
}

我们来看看这个的空间复杂度,这里其实我们要牢记一句话,就是时间是不能累积的,空间是可以累积的,那我们求第N个斐波那契的时候,有很多空间其实是相同的,所以这里就会有重复利用空间的情况,但是虽然看起来好像是开辟了2的n次方的空间,但是他们好多重复了,其实就是只有O(N)的空间复杂度。

我们可以来看一下空间可以重复利用,但是时间不能进行重复利用的例子。

void Fun1()
{int a = 0;printf("%p\n", &a);
}
void Fun2()
{int a = 0;printf("%p\n", &a);
}
int main()
{Fun1();Fun2();return 0;
}

在这里插入图片描述
我们来看看他们的地址是相同的。
这个就是Fun1函数和Fun2函数的利用的空间其实是同一个空间。

相关文章:

数据结构时间复杂度(补充)和空间复杂度

Hello&#xff0c;今天事10月27日&#xff0c;距离刚开始写博客已经过去挺久了&#xff0c;我也不知道是什么让我坚持这么久&#xff0c;但是学校的课真的很多&#xff0c;很少有时间多出来再学习&#xff0c;有些科目马上要考试了&#xff0c;我还不知道我呢不能过哈哈哈&…...

Mac-postman存储文件目录

今天postman弹窗要求登录账号才可访问之前的API文档数据。 但是这postman的账号又是前同事的账号&#xff0c;我没有他的账号和密码啊。 登录了我自己的postman账号后&#xff0c;所有的api文档都不见了....我服了。 首先去屏幕左上角---> 前往 --->个人 然后键盘按显…...

JAVA面试题简单整理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、重载和重写的区别一、&和&&的区别一、get和post请求的区别 delete、put一、cookie和session的区别一、Autowired和Resource区别一、”和equals…...

dd命令用法学习,是一个功能强大的工具

dd 命令是一个功能强大的工具&#xff0c;它有许多参数可以用来控制其行为。以下是 dd 命令中常用的一些参数&#xff1a; - ifinputfile&#xff1a;指定输入文件的路径。 - ofoutputfile&#xff1a;指定输出文件的路径。 - bssize&#xff1a;设置每个块的大小。可以使用不同…...

Games104现代游戏引擎笔记 网络游戏进阶架构

Character Movement Replication 角色位移同步 玩家2的视角看玩家1的移动是起伏一截一截&#xff0c;并且滞后的 interpolation&#xff1a;内插值&#xff0c;在两个旧的但已知的状态计算 extrapolation&#xff1a;外插值&#xff0c;本质是预测 内插值&#xff1a;但网络随着…...

Apollo 快速上手指南:打造自动驾驶解决方案

快速上手 概述云端体验登录云端仿真环境 打开DreamView播放离线数据包PNC Monitor 内置的数据监视器cyber_monitor 实时通道信息视图福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Apollo 开放平台是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自…...

C现代方法(第14章)笔记——预处理器

文章目录 第14章 预处理器14.1 预处理器的工作原理14.2 预处理指令14.3 宏定义14.3.1 简单的宏14.3.2 带参数的宏14.3.3 #运算符14.3.4 ##运算符14.3.5 宏的通用属性14.3.6 宏定义中的圆括号14.3.7 创建较长的宏14.3.8 预定义宏14.3.9 C99中新增的预定义宏14.3.10 空的宏参数(C…...

Kafka KRaft模式探索

1.概述 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。其核心组件包含Producer、Broker、Consumer&#xff0c;以及依赖的Zookeeper集群。其中Zookeeper集群是Kafka用来负责集群元数据的管理、控制器的选举等。 2.内容…...

LVS-keepalived实现高可用

概念&#xff1a; 本章核心&#xff1a; Keepalived为LVS应运而生的高可用服务。LVS的调度无法做高可用&#xff0c;预算keepalived这个软件&#xff0c;实现了调度器的高可用。 但是&#xff1a;Keeplived不是专门为LVS集群服务的&#xff0c;也可以做其他服务器的高可用 LVS…...

Linux内核驱动开发的需要掌握的知识点

Linux内核驱动开发是一项复杂而有挑战性的任务&#xff0c;需要掌握多方面的知识和技能。下面是一些需要掌握的关键知识点&#xff0c;这些知识将有助于你成功地开发Linux内核驱动程序。 1. Linux内核基础知识 首先&#xff0c;了解Linux内核的基础知识至关重要。这包括Linux…...

nginx 动静分离 防盗链

一、动静分离环境准备静态资源配置(10.36.192.169)安装nginx修改配置文件重启nginx 动态资源配置(192.168.20.135)yum安装php修改nginx配置文件重启nginx nginx代理机配置&#xff08;192.168.20.134&#xff09;修改nginx子自配置文件重启nginx 客户端访问 二、防盗链nginx防止…...

MYSQL(索引篇)

一、什么是索引 索引是一种数据结构&#xff0c;它用来帮助MYSQL更高效的获取数据 采用索引可以提高数据检索的效率&#xff0c;降低IO成本 通过索引对数据排序&#xff0c;降低数据排序成本&#xff0c;降低CPU消耗 常见的有&#xff1a;B树索引、B树索引、哈希索引。其中Inno…...

Java API访问HDFS

一、下载IDEA 下载地址&#xff1a;https://www.jetbrains.com/idea/download/?sectionwindows#sectionwindows 拉到下面使用免费的IC版本即可。 运行下载下来的exe文件&#xff0c;注意安装路径最好不要安装到C盘&#xff0c;可以改成其他盘&#xff0c;其他选项按需勾选即可…...

高三高考免费试卷真题押题知识点合集

发表于安徽 温馨提示&#xff1a;有需要的真题试卷可联系本人&#xff0c;百卷内上免费资源。 感觉有用的下方三连&#xff0c;谢谢 ​ 。 免费版卷有6-60卷每卷平均4-30页 高三免费高三地理高三英语高三化学高三物理高三语文高三历史高三政治高三数学高三生物 付费版卷有1…...

css 计算函数属性:calc() 不起效 原因

踩坑&#xff1a;注意事项(- 减号或加号前后需要空格&#xff01;&#xff01;&#xff01;) calc(100% - 251px); 这里错误写法中-两边没加空格&#xff0c;导致width不生效。但并不是所有运算符间都需要加空格&#xff0c;只有 和 - 需要加空格&#xff0c;因为运算允许负…...

2、TB6600驱动器介绍【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍TB6600驱动器界面及关键参数设置 一、驱动器功能界面 二、关键参数 输入电压&#xff1a;DC9-42V 输出电流&#xff1a;0.5-4A 最大功耗&#xff1a;160W 细分设置&#xff1a;1,2/A,2/B,4,8,16,32 工作温度&#xff1a;-10~45C 信号口驱动电流&…...

Vue3:将表格数据下载为excel文件

需求 将表格数据或者其他形式的数据下载为excel文件 技术栈 Vue3、ElementPlus、 实现 1、安装相关的库 下载xlsx 和 file-saver 库 npm install -S file-saver npm install -S xlsx引入XLSX库和FileSaver库 import XLSX from xlsx; import FileSaver from file-saver;…...

vue+Fullcalendar

vueFullcalendar: vueFullcalendar项目代码https://gitee.com/Oyxgen404/vue--fullcalendar.git...

Spring定时任务+webSocket实现定时给指定用户发送消息

生命无罪&#xff0c;健康万岁&#xff0c;我是laity。 我曾七次鄙视自己的灵魂&#xff1a; 第一次&#xff0c;当它本可进取时&#xff0c;却故作谦卑&#xff1b; 第二次&#xff0c;当它在空虚时&#xff0c;用爱欲来填充&#xff1b; 第三次&#xff0c;在困难和容易之…...

C语言学习笔记(六):数组(1)

0,问题的引入 怎么保存一个学生的成绩 float a; 怎么保存一个班&#xff08;10人&#xff09;的学生的成绩 float a,b,c,d......; float a1,a2,a3,........; 这样太麻烦了 -》“数组” 1&#xff0c;数组 什么是数组&#xff…...

【人工智能】CCF-A/B/C类期刊最新解析:影响因子、分区与投稿指南

1. CCF期刊分类体系解析 第一次接触CCF期刊目录时&#xff0c;我也被A/B/C的分类搞得一头雾水。简单来说&#xff0c;中国计算机学会&#xff08;CCF&#xff09;将计算机领域的国际学术期刊分为A、B、C三个等级&#xff0c;其中A类代表该领域的顶级期刊&#xff0c;相当于学术…...

程序员副业全攻略:从技术到变现

CSDN程序员副业图谱技术文章大纲副业方向概览分析程序员常见的副业类型&#xff0c;包括技术咨询、外包开发、在线教育、自媒体运营、开源项目、技术写作等。技术咨询与外包开发探讨如何通过Freelancer平台&#xff08;如Upwork、Fiverr&#xff09;或国内外包平台&#xff08;…...

3步高效获取电子课本:tchMaterial-parser让国家中小学智慧教育平台资源轻松到手

3步高效获取电子课本&#xff1a;tchMaterial-parser让国家中小学智慧教育平台资源轻松到手 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获…...

DOM DocumentImpl:深入解析文档对象模型的核心实现

DOM DocumentImpl:深入解析文档对象模型的核心实现 引言 在Web开发领域,DOM(文档对象模型)是前端开发的基础,它允许开发者通过JavaScript操作HTML文档。DOM DocumentImpl是DOM的核心实现之一,它提供了丰富的API来操作文档结构。本文将深入解析DOM DocumentImpl,帮助开…...

Ubuntu 24.04裸机部署Home Assistant避坑指南:从Python源码编译到HACS插件全流程

Ubuntu 24.04裸机部署Home Assistant全栈实战&#xff1a;从Python环境构建到智能生态整合 当智能家居逐渐成为现代生活的标配&#xff0c;如何打造一个高度定制化的控制中心成为技术爱好者的新追求。Home Assistant作为开源家庭自动化平台&#xff0c;以其强大的兼容性和灵活性…...

上海知名seo优化公司

为什么选择上海知名SEO优化公司 在当今数字化时代&#xff0c;网站的流量和排名直接关系到企业的市场竞争力。特别是在竞争激烈的上海市场&#xff0c;一个优秀的SEO优化公司能够帮助企业在百度搜索结果中获得更好的排名&#xff0c;从而吸引更多的潜在客户。为什么企业选择上…...

Product Hunt 每日热榜 | 2026-04-04

1. Google Gemma 4 标语&#xff1a;谷歌迄今为止最智能的开放模型 介绍&#xff1a;Gemma 4 是谷歌 DeepMind 最强大的开放模型系列&#xff0c;具备了先进的推理能力、跨模态处理和灵活的工作流程。它经过优化&#xff0c;适用于从移动设备到显卡的各种平台&#xff0c;让开…...

深度学习概率分布与核心运算 —— 概率论的工具箱(八)

1. 定位导航 上一篇回答了"为什么需要概率"。本篇开始构建概率论的基本工具箱——这些工具是理解后续所有内容(损失函数、贝叶斯推断、生成模型、信息论)的数学基础。 本篇覆盖六大核心概念:随机变量与概率分布(PMF/PDF)、边缘概率、条件概率、链式法则、独立…...

notepad--性能优化完全指南:从基础调优到源码级优化

notepad--性能优化完全指南&#xff1a;从基础调优到源码级优化 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- notepa…...

文献阅读 260404-Effect of climate warming on the timing of autumn leaf senescence reverses after ...

Effect of climate warming on the timing of autumn leaf senescence reverses after the summer solstice 来自 <https://www.science.org/doi/10.1126/science.adf5098> ## Abstract: Structured Abstract INTRODUCTION Ongoing climate change is causing rapid shif…...