数据结构~~时间、空间复杂度

news2025/2/27 21:13:57

目录

一、什么是数据结构

什么是算法

算法的复杂度

二、时间复杂度

三、空间复杂度

四、总结


一、什么是数据结构

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的 数据元素的集合。

数据结构关注的是数据的逻辑结构和物理存储结构。

逻辑结构主要描述数据元素之间的关系,比如线性结构(如数组、链表)、树结构(二叉树、B 树等)、图结构等。

物理存储结构则是数据在计算机内存中的实际存储方式,例如顺序存储和链式存储。

数据结构的重要性在于:

  • 它能提高数据处理的效率,选择合适的数据结构可以让特定操作更快速地执行。
  • 帮助更好地组织和管理大量的数据,使其更易于操作和理解。
  • 为算法设计提供基础,不同的数据结构适用于不同的算法。

什么是算法

算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

算法具有以下特征:

  1. 输入项:算法需要有输入或者说初始条件;
  2. 确定性:算法的每一步必须要有确定的含义,不能有歧义;
  3. 有穷性:算法在执行有限步骤之后必须结束;
  4. 输出:算法必须要有一个或多个输出,即与输入有某个特定关系的量;
  5. 可行性:算法中有待执行的运算和操作必须是可以实现的,能够精确地进行。

算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划、数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法等。

算法的复杂度

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般 是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算 机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计 算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

一般算法常见的复杂度如下:

二、时间复杂度

时间复杂度,又称时间复杂性,在计算机科学中,它是一个函数,用来定性描述算法的运行时间。

时间复杂度是一个代表算法输入值的字符串的长度的函数,常用大 O 符号表示,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,即考察输入值大小趋近无穷时的情况。

将算法需要执行的运算次数用输入大小 n 的函数表示,即为 T(n)。为了估算算法需要的运行时间和简化算法分析,便引入了时间复杂度的概念。

常见的时间复杂度量级包括:

  • 常数阶 O(1):无论代码执行了多少行,只要没有循环等复杂结构,时间复杂度就都是 O(1)。例如:
  • 线性阶 O(n):代码的执行时间与问题规模 n 呈线性关系。例如上述的 for 循环代码。
  • 对数阶 O(logN):例如:
  • 线性对数阶 O(nlogN):将时间复杂度为 O(logn)的代码循环 N 遍,时间复杂度就是 n * O(logN)。
  • 平方阶 O(n^2):例如嵌套循环
  • 立方阶 O(n³)、K 次方阶 O(n^k)等。

在分析时间复杂度时,通常遵循以下原则:

  1. 循环次数最多原则:只需关注循环次数最多的那段代码。
  2. 加法原则:量级最大的那段代码时间复杂度等于总的时间复杂度。
  3. 乘法原则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积。

算法的时间复杂度可以帮助我们评估算法的效率,在实际应用中,我们希望选择时间复杂度较低的算法,以提高程序的运行速度和性能。但同时,也需要综合考虑空间复杂度等其他因素,以找到最适合具体问题的解决方案。

三、空间复杂度

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。它是一个算法所需存储空间的函数,记作S(n)=O(f(n)),其中为n问题的规模,f(n)为语句关于的所占存储空间的函数。

常见的空间复杂度有O(1)、O(n)和O(n^2)等:

当算法运行时占用的临时空间不随某一变量n的改变而改变时,即空间复杂度为常量,表示为O(1);

当算法运行时占用的临时空间随n的改变而改变时,空间复杂度即为O(n);

当算法运行时占用的临时空间随n^2的改变而改变时,空间复杂度则为O(n^2,以此类推。

算法的空间复杂度主要考虑在运行过程中为局部变量分配的存储空间的大小,它包括为参数表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分。若算法为递归算法,其空间复杂度为递归所使用的堆栈空间的大小,等于一次调用所分配的临时存储空间的大小乘以被调用的次数(即为递归调用的次数加 1,这个 1 表示开始进行的一次非递归调用)。

空间复杂度一般也以数量级的形式给出,用于衡量算法运行时所需额外空间的增长趋势,而不是具体计算占用的存储空间大小。

例如,冒泡排序算法的空间复杂度通常为O(1),因为它在运行过程中只使用了固定数量的额外空间来存储交换标志等少数几个变量;而一些使用递归实现的算法,如计算斐波那契数列的递归算法,其空间复杂度可能为O(n),因为递归调用会在堆栈中占用与输入规模成正比的空间。

在分析算法的优劣时,通常需要同时考虑时间复杂度和空间复杂度。有时为了追求较低的时间复杂度,可能会导致空间复杂度增加;反之,为了降低空间复杂度,可能会使时间复杂度上升。在实际应用中,需要根据具体情况进行权衡和选择。

四、总结

时间复杂度

  • 用于衡量算法运行所需时间随输入规模增长的变化趋势。
  • 常见的时间复杂度级别有:O(1)(常数级)、O(n)(线性级)、O(logn)(对数级)、O(nlogn)(线性对数级)、O(n²)(平方级)等。
  • 帮助我们评估算法在不同规模输入下的效率,以便选择更高效的算法。

空间复杂度

  • 描述算法在运行过程中所需额外存储空间的大小与输入规模的关系。
  • 也有类似的级别划分,如 O(1)(固定额外空间)、O(n)(与输入规模线性相关的额外空间)等。
  • 考虑空间复杂度可以避免因占用过多内存而导致程序运行异常或效率低下。

在实际情况中,需要综合考虑时间复杂度和空间复杂度。有时候为了降低时间复杂度可能会适当增加空间复杂度,反之亦然。例如:

  • 一些排序算法可能时间复杂度较低,但需要额外较多的空间来辅助排序。
  • 某些算法可能空间复杂度低,但运行时间相对较长。

在选择算法时,要根据具体的应用场景和需求进行权衡。如果对运行速度要求极高,可以优先考虑时间复杂度低的算法;如果内存资源有限,则要更关注空间复杂度。总之,要在时间和空间的效率之间找到一个合适的平衡点。

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

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

相关文章

爬虫笔记14——爬取网页数据写入MongoDB数据库,以爱奇艺为例

下载MongoDB数据库 首先,需要下载MongoDB数据库,下载的话比较简单,直接去官网找到想要的版本下载即可,具体安装过程可以看这里。 pycharm下载pymongo库 pip install pymongo然后在在python程序中我们可以这样连接MongoDB数据库…

继电器十大品牌供应商

继电器是常用的元器件之一,如下是优秀供应商。 继电器品牌-中间继电器品牌-安全继电器品牌-固态继电器哪个品牌比较好-Maigoo品牌榜

【html】用html+css模拟Windows右击菜单

效果图&#xff1a; 在这个示例中&#xff0c;我为每个.second-list添加了一个.sub-menu的<div>&#xff0c;它包含了子菜单项。当鼠标悬停在.second-list上时&#xff0c;.sub-menu会显示出来。你可以根据需要调整这个示例以适应你的具体需求。 记住&#xff0c;这只是…

「动态规划」如何解决单词拆分问题?

139. 单词拆分https://leetcode.cn/problems/word-break/description/ 给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复…

conda下安装32位版本python

前言&#xff1a;当前主流的系统为64bit系统&#xff0c;conda软件为64bit软件&#xff0c;因此使用conda创建虚拟环境安装python时默认安装的python为64bit版本&#xff0c;但部分研发场景需要调用32bit依赖&#xff0c;只能使用32bit的python&#xff0c;因此需要安装32bit的…

36.远程注入到入口点注入

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 上一…

ViT:5 Knowledge Distillation

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

操作系统实验四:openEuler安装(openEuler配置静态网络、编写C或C++)

目录 一、实验要求 二、具体任务安排 1.安装openEuler &#xff08;1&#xff09;下载openEuler镜像 &#xff08;2&#xff09;使用vmware安装openEuler 2.在openEuler中编写C或者C测试程序 &#xff08;1&#xff09;安装g环境 &#xff08;2&#xff09;开始程序编码…

121.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件读取与发送界面设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

IEEE RAL 具有高运动性能的仿旗鱼机器人协同运动机制研究

水下机器人作为军用侦察、监测及攻击装置备受关注&#xff0c;目前传统水下机器人普遍采用螺旋桨作为推进器&#xff0c;但高噪音、高能耗等问题限制了应用范围。鱼类通过自然选择进化出优异的运动性能&#xff0c;特别是在海洋中游动速度快、机动性强的旗鱼。为了探究快速和高…

湖北民族大学2024年成人高等继续教育招生简章

湖北民族大学&#xff0c;这所承载着深厚文化底蕴和卓越教育理念的学府&#xff0c;在崭新的2024年再次敞开怀抱&#xff0c;热烈欢迎有志于深化学习、提升自我的成人学员们。今年的成人高等继续教育招生&#xff0c;不仅是学校对于终身教育理念的具体实践&#xff0c;更是为广…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm 压力测试概述性能指标 JMeter基本使用添加线程组添加 HTTP 请求添加监听器启动压测&查看分析结果JMeter Address Already in use 错误解决 性…

广东信息工程职业学院2024年成人高等继续教育招生简章

一、学校简介 广东信息工程职业学院位于广东省肇庆市&#xff0c;是一所具有一定办学规模&#xff0c;办学定位和培养目标明确&#xff0c;办学特色和追求鲜明&#xff0c;可持续发展的全日制普通高等学校&#xff0c;学院坚持以人为本&#xff0c;以德育人&#xff0c;以良好…

【总线】AXI4第三课时:握手机制

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

【网络安全的神秘世界】SQL注入漏洞

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 本章知识使用的靶场&#xff1a;DVWA 一、漏洞简介 SQL&#xff1a;结构化查询语言&#xff0c;是一种特殊的编程语言&#…

常用主流sip协议软电话客户端软件有哪些?—— 筑梦之路

Ekiga 官网地址&#xff1a;Ekiga ~ Free Your Speech Ekiga&#xff0c;原名GnomeMeeting&#xff0c;支持Windows和Linux&#xff0c;是一个兼容SIP和H.323的视频会议程序&#xff0c;兼容VoIP&#xff0c;IP电话&#xff0c;通过Ekiga可以与使用任何SIP和H.323软硬件的远程…

通过 cloudflare 白嫖个人 docker 镜像加速服务

不知为何&#xff0c;现在大多数的 docker hub 镜像加速站都停止服务&#xff0c;而官方站点又因某些原因访问不到或延迟很高。所以&#xff0c;今天来记录一种通过 CloudFlare 搭建一个自己的镜像加速服务。 0、必看&#xff01;&#xff01;&#xff01; 注意&#xff1a; 此…

进军韩国5G市场!移远通信5G模组RG500L-EU率先获得KT、LGU+认证

近日&#xff0c;移远通信工规级5G模组RG500L-EU再传喜讯&#xff0c;率先通过了韩国两大运营商KT和LGU的严格认证。​在此之前&#xff0c;该模组已顺利通过KC认证&#xff08;韩国法规认证&#xff09;&#xff0c;此次再获运营商认证表明&#xff0c;RG500L-EU已完全满足韩国…

Okhttp响应Json数据

简介 OkHttp是一个高效、现代的HTTP客户端库&#xff0c;专为Android和Java应用程序设计&#xff0c;用于发送网络请求和处理响应。它支持HTTP/2和SPDY协议&#xff0c;允许连接复用&#xff0c;减少延迟&#xff0c;提高网络效率。OkHttp还处理了常见的网络问题&#xff0c;如…

【教学类65-01】20240622秘密花园涂色书01(通义万相)(A4横版2张,一大3小 38张纸76份)

背景需求&#xff1a; 用通义万相制作秘密花园涂色书 关键词&#xff08;中文&#xff09;&#xff1a;秘密花园涂色书&#xff0c;简单笔画&#xff0c;卡通&#xff0c;黑白轮廓&#xff0c;未着色&#xff0c;幼儿插图&#xff0c;线条画&#xff0c;没有背景&#xff0c;没…