时间复杂度(补充)和 空间复杂度

news2024/11/18 4:31:07

大家好啊,我今天来给大家分享有关空间复杂度的知识。感谢大家对我的支持,我会继续加油更新博客,努力提高博客质量的。

在这里插入图片描述
我们在这里先补充时间复杂度的一些实例:

补充实例1:

// 计算BinarySearch的时间复杂度?
int BinarySearch(int* a, int n, int x)
{
assert(a);
int begin = 0;
int end = n-1;
// [begin, end]:begin和end是左闭右闭区间,因此有=号
while (begin <= end)
{
int mid = begin + ((end-begin)>>1);
if (a[mid] < x)
begin = mid+1;
else if (a[mid] > x)
end = mid-1;
else
return mid;
}
return -1;
}

在这里插入图片描述

这里用的是二分查找法,查找一次就减去一半的变量,二分查找法:https://editor.csdn.net/md/?articleId=132244421 我们假设我们一直找到最后我们要找到的数的时候的次数为x次,那么2的x次方就会等于N,我们得到执行次数就是以2为底N的对数,所以我们的时间复杂度就是logN,我们默认以2为底的对数可以写成log的形式。但是我们的二分法的使用的前提是数字必须是有序的。

补充实例2:

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

我们要注意递归使用的时候每次函数调用的时间复杂度为O(1),就看它的递归次数,如果每次调用的时间复杂度不是O(1),我们就看递归调用中次数的累加。

补充实例3:

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

我们做这个递归的题得先画出示意图:
在这里插入图片描述

我们每次递归调用的次数是符合一个等比数列的,我们从fib(N)调用到fib(1)和fib(2)就结束,因为这两个就返回1了,不会在发生调用了,我们将这些调用次数全部加起来,得到的时间复杂度就是O(2^N)。

接下来就是我们今天的重点了:

空间复杂度:

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

接下来让我们通过实例来计算下空间复杂度:

实例1:

// 计算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;
}
}

我们这里申请的额外空间为exchange和i还有end,所以我们这里的空间复杂度为O(1)。

实例2:

// 计算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;
}

实例2我们利用了malloc函数给它开辟了n+1个空间,所以我们的额外开辟的空间就为n+1个,我们的空间复杂度就为O(N)。

实例3:

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

实例3递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。空间复杂度为O(N)。但是我们要注意递归容易栈溢出(递归的深度),栈空间不大。

这一节的分享就到这里了,感谢大家的支持。

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

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

相关文章

零资源的大语言模型幻觉预防

零资源的大语言模型幻觉预防 摘要1 引言2 相关工作2.1 幻觉检测和纠正方法2.2 幻觉检测数据集 3 方法论3.1 概念提取3.2 概念猜测3.2.1 概念解释3.2.2 概念推理 3.3 聚合3.3.1 概念频率分数3.3.2 加权聚合 4 实验5 总结 摘要 大语言模型&#xff08;LLMs&#xff09;在各个领域…

笔记:电子设备接地,接的到底是什么地?

电路中有“地”&#xff0c;设备中有“地”&#xff1b;都是“地”&#xff0c;此地非彼地。 混淆的原因 有些混淆&#xff0c;是以为中文翻译造成的&#xff0c;英文所有Ground都统一翻译为“地”&#xff1b; 例1&#xff1a;英文Circuit Ground&#xff0c;应该翻译为电路…

RedissonCach的源码流程

上&#xff1a; https://blog.csdn.net/Michelle_Zhong/article/details/126384566 中&#xff1a; https://blog.csdn.net/michelle_zhong/category_11874153.html 下&#xff1a; https://blog.csdn.net/Michelle_Zhong/article/details/126391915?ops_request_misc%257B%…

细说RTSP、RTMP和GB28181区别

好多流媒体初学者&#xff0c;对RTSP、RTMP和GB28181三者容易混淆&#xff0c;不了解他们的使用场景和区别&#xff0c;本文抛砖引玉&#xff0c;大概介绍下三者的区别。 RTSP&#xff08;Real-Time Streaming Protocol&#xff09;、RTMP&#xff08;Real-Time Messaging Pro…

实战|如何低成本训练一个可以超越 70B Llama2 的模型 Zephyr-7B

每一周&#xff0c;我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新&#xff0c;包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等&#xff0c;我们将其称之为「Hugging News」。快来看看有哪些近期更新吧&#xff01;&#x1…

Flutter的The file name ‘xxxx.dart‘ isn‘t a snake_case identifier警告

文章目录 警告原因分析解决方法dart的一些命名规则变量和函数命名&#xff1a;类和类型命名&#xff1a;常量和枚举&#xff1a;文件命名&#xff1a;包命名&#xff1a;注释&#xff1a;命名一致性&#xff1a;避免缩写&#xff1a;可搜索的命名&#xff1a; 一些好习惯 警告 …

基于 51 的点阵屏显示·16*16 点阵仿真实验(静态显示,左移显示)

若想更详细了解可以先跳转到&#xff1a; 基于 51 的点阵屏显示 8*8 点阵仿真实验&#xff1a; 基于 51 的点阵屏显示 8*8 点阵仿真实验-CSDN博客 对一个模块进行了解 16*16 点阵的显示原理 虽然完成了上面 8*8 点阵的显示&#xff0c;但是由于点的数量太少以至于它的显示效果并…

简历自动生成工具

简历自动生成工具 简历自动生成工具&#xff0c;可根据提供的关键字生成完整内容&#xff0c;并应用于多个模板中。避免想更换简历风格的小伙伴&#xff0c;重复编辑简历的烦恼。 使用方法 每个求职者都需要认真对待自己的简历&#xff0c;特别是那些实力还不错的&#xff0c…

Centos如何安装Mysql

1、安装前检查是否存在mysql yum list installed mysql* ①如或显示了列表&#xff0c;说明系统中有MySQL **yum卸载 ** 根据列表上的名字&#xff08;[中括号为可选项]&#xff09; yum remove [填写列表显示出来的所有内容] rm -rf /var/lib/mysql rm /etc/my.cnf②rpm查…

【Linux】zip 命令使用

zip 命令用于压缩文件。压缩后的文件后缀名为 .zip。 语法 zip [参数] [文件] zip命令 -Linux手册页 命令选项及作用 执行令 zip --help 和 zip --help2 执行命令结果 参数 -A 调整可执行的自动解压缩文件。-b<工作目录> 指定暂时存放文件的目录。-c 替每个被压缩的…

LrC 13 ACR 16:镜头模糊

的Adobe Lightroom Classic 13 &#xff08; 2023 年 10 月版&#xff09;及 Adobe Camera Raw 16 新增的镜头模糊 Lens Blur功能可以基于 AI 技术生成深度图&#xff0c;并依据深度图对图像添加模糊和焦外成像&#xff08;散景光斑&#xff09;效果。 LrC&#xff1a;修改照片…

devCpp显示文件未编译

问题背景 刚刚去下载了devcpp&#xff0c;然后保存好代码之后点击编译运行出现文件未编译 问题细节 单独编译的时候显示这个当时没怎么注意 然后一直点编译运行死活显示文件未编译 目录下也没有exe文件 具体原因及代码 const int maxLine1e510; int arr[maxLine][maxLine]…

Windows VS C++工程:包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用——以OCCI的配置为例

文章目录 1 包含目录&#xff08;Include Directories&#xff09;/ 附加包含目录&#xff08;Additional Include Directories&#xff09;1.1 区别和作用1.2 设置路径 2 库目录&#xff08;Library Directories&#xff09;/ 附加库目录&#xff08;Additional Library Direc…

三篇论文:速览GPT在网络安全最新论文中的应用案例

GPT在网络安全领域的应用案例 写在最前面论文1&#xff1a;Chatgpt/CodeX引入会话式 APR 范例利用验证反馈LLM 的长期上下文窗口&#xff1a;更智能的反馈机制、更有效的信息合并策略、更复杂的模型结构、鼓励生成多样性和GPT类似的步骤&#xff1a;Conversational APR 对话式A…

模型对象CSS2DObject始终在画布的左上角(问题解决)

写了个简单案例模拟一下这个问题&#xff0c;看下图片 下面看下c2渲染器相关代码部分 this.css2DRenderer new CSS2DRenderer(); this.css2DRenderer.render(this.scene, this.camera); this.css2DRenderer.setSize(width, height); this.css2DRenderer.domElement.style.pos…

C/C++计算表达式值 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C计算表达式值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C计算表达式值 2020年12月 C/C编程等级考试一级编程题 一、题目要求 计算(ab)*(c-b)的值 1、编程实现 给定3个整数a、b、c&…

MYSQL批量插入并发场景下的DEADLOCK

一、背景 公元2023-10-12(周四)上午&#xff0c;组内的亚梅反馈&#xff0c;用户生成标签报死锁异常 二、排查异常日志 查到当时报错的日志 具体异常信息如下 server-provider-info-2023-10-12.0.log:2023-10-12 09:40:50.593 [TID:bf623bded189486cbb0b6a64d81b64b4.357.16970…

【C语言】memmove()函数(拷贝重叠内存块函数详解)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.memmove()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.onst void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数…

【爬虫】charles手机抓包环境设置(设置系统证书)

1.说明 想要对手机抓包&#xff0c;最关键的是需要设置好根证书&#xff0c;用户证书在安卓7.0之后就不受信任了&#xff0c;想要对手机app抓包&#xff0c;就需要把用户证书设置为系统证书&#xff08;根证书&#xff09; 注意&#xff0c;想要设置为根证书&#xff0c;你的…

JavaScrip的DOM接口

JavaScript的DOM&#xff08;Document Object Model&#xff09;是一种接口&#xff0c;它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM是一种将HTML或XML文档表示为对象树的标准方式。 在JavaScript中&#xff0c;DOM提供了一种方式来操作HTML或XML文档的元素…