数据结构之时间复杂度和空间复杂度

news2025/1/19 22:09:13

目录

 一.什么是数据结构?

二.什么是算法?

三.算法效率

1.如何衡量算法的好坏

2.算法的复杂度

四.时间复杂度

1.时间复杂度的概念

2.例题展示

五.空间复杂度

1.概念

2.注意事项

空间的销毁===>归还对空间的使用权内存空间属于操作系统的进程

3.类比理解

4.例题分析

六.小结


好久不见,uu们。沉淀了一个寒假,想必大家的水平一定突飞猛进了吧~

今天为大家呈现上的是数据结构的知识,一些关于时间复杂度和空间复杂度的理解。

规矩不乱,先赞后看~

 一.什么是数据结构?

数据结构是计算机存储,组织数据的方式,之相互之间存在一种或多种特定关系的数据元素的集合,即在内存中管理数据(包括增删查改)

二.什么是算法?

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

三.算法效率

1.如何衡量算法的好坏

怎么衡量算法的好坏呢?

比如对于斐波那契数列:

 其递归实现方式非常简洁,但简洁就一定好吗?那如何来衡量好与坏呢?

2.算法的复杂度

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。依次衡量一个算法的好坏,一般是从时间和空间两个维度来衡量,即时间和空间复杂度

时间复杂度主要是衡量算法运算的快慢,空间复杂度则是衡量一个算法运行所需的额外空间。在计算机发展的早期,计算机容量小,所有对空间复杂度很在乎,但经过计算机行业的发展,存储容量达到很高,故不再关心算法的空间复杂度
 

四.时间复杂度

1.时间复杂度的概念

时间复杂度的定义:再计算机科学中,算法的时间复杂度是一个函数(数学函数,不是c语言中的函数),它定量描述了该算法的运行时间,一个算法所耗费的时间,从理论上讲,是算不出来的,只有你把你的程序放在机器上跑起来,才知道。一个算法所花费的时间与其执行次数成正比
!!!算法的基本操作的执行次数,为算法的时间复杂度!!!

即:找到某条基本语句与问题规模N之间的数学表达式,就是算出该算法的时间复杂度!!!
 

但是

实际计算时间复杂度时,不一定精确执行次数,大概的就行---->** 大o的渐进表示法 **
    O(N*N)===》表示估算
大O符号:适用于描述函数渐进行为的数学符号
推导大O阶的方法:
1.用常数1取代运行时间中所有的加法常数(O(1)不是代表一次,而是代表常数次(常数再大也是O(1)cpu运转很快,都是平等的被看作常数次))
2.在修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不为1,即无限大的时候,则去除与这个项目相乘的常数,得到结果就为大O阶

另外还有些算法的时间复杂度存在最好,最坏,平均的情况
  最坏:任意输入规模的最大运行次数(上界)
  平均:任意输入规模的期望运行次数
  最好:任意输入规模的最小运行次数(下界)
        eg.再一个长度为N的数组中搜索一个数据x
           最好情况:1次找到
           最坏情况:N次找到
           平均情况:N/2次找到
    在实际中一般情况关注的是算法的最坏情况,所有数组中搜索数据时间复杂度为O(N)
 

2.例题展示

(1)

要计算这个程序的时间复杂度

F(N) = N * N + 2 * N + 10(实际计算没必要那么精确,只需要大概的执行次数----》大o的渐进表示法)
使用大O阶的渐进表示法后,func1的时间复杂度为:O(N*N)

(2)

计算该程序的时间复杂度

O(M+N) (两者大小关系不确定,因此需要两个同时才能确定时间复杂度)

(3)

时间复杂度为O(1)

O(1)不是代表一次,而是代表常数次

(4)

时间复杂度为O(N)

因为当N无限大的时候,倍数也可以忽略不计

(5)

时间复杂度为O(N)===>做最坏的打算,降低预期,底线思维!!!

(6)

冒泡排序的时间复杂度:O(N) = N * (N - 1)/ 2 = O(N*N)
N-1 N-2 N-3 N-4.。。。  3 2 1(等差数列)

(7)

二分查找的时间复杂度:O(logN)因为找一次就要分走一半,找x次就除x个2^x = N ---> x = logN

(8)

时间复杂度为O(N)递归N次(涉及函数栈帧的知识)

五.空间复杂度

1.概念

空间复杂度也是一个数学表达式,是对一个算法在运行过程中**临时**占用额外存储空间大小的量度。

空间复杂度不是程序占用了多少bytes的空间,因为这没有太大意义,所以空间复杂度算的是
变量的个数。

空间复杂度计算规则基本上和时间复杂度类似,也是用大O渐进表示法

!!!注意!!!:函数运行时所需要的栈空间(存储参数,局部变量,一些寄存器信息等)
在编译期间已经确定好了,因此空间复杂度主要是通过函数在运行时显示申请的额外空间来确定。

2.注意事项

空间的销毁===>归还对空间的使用权
内存空间属于操作系统的进程

3.类比理解

分配内存===>去酒店开房间(这时别人不能住)
销毁内存===>退房(退房后别人还能住)
进程==>酒店
空间==>酒店的房间

越界和野指针的本质:访问了不属于自己的内存(住别人的房间)

4.例题分析

(1)

计算BubbleSort的空间复杂度:O(1)<因为没有额外开辟临时的空间>

(2)

计算斐波那契数列的空间复杂度:O(N)<存在malloc开辟n的空间>

(3)

计算阶乘递归fac的空间复杂度:O(N)   递归存在函数栈帧从fac(N)到fac(1)N个空间

(4)

fib的空间复杂度:O(N) ==> 尽管是有两个函数相加,但却会从一个函数的栈帧进去,一直
往下走,直到到底之后才逐个释放,释放完之后另一个函数再重复使用上一次递归函数的空间,
故为O(N) 
总结为:!!!递归看深度!!!

(5)

涉及函数栈帧的知识:
func1和func2的结果一定是相同的,因为在func1开辟和结束之后会归还原空间的使用权,
进行到func2时会将使用权给func2,故使用同一块地址

另外一个程序中存在两个a但不会报错:在不同的函数栈帧里面,因此不会出错

六.小结

看懂了这篇博文,uu们就大概掌握了时空建复杂度六成的功力,还剩四成就得自行摸索了。

总之,每天进步,时刻学习!

撤退~

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

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

相关文章

【工具相关】zentao用例管理平台部署实践

文章目录 一、备份还原1、数据备份1.1、前言1.2、版本备份1.3、数据备份 2、数据恢复2.1、版本恢复2.2、数据恢复 二、问题处理1、ERROR: SQLSTATE[HY000] [2002] Connection refused 一、备份还原 1、数据备份 1.1、前言 禅道系统从10.6版本以后&#xff0c;新增数据备份设…

element-ui radio 组件源码分享

今日简单分享 radio 组件的实现原理&#xff0c;主要从以下三个方面来分享&#xff1a; 1、radio 页面结构 2、radio 组件属性 3、radio 组件方法 一、radio 页面结构 1.1 页面结构如下&#xff1a; 二、radio 属性 2.1 value / v-model 属性&#xff0c;类型为 string / …

谷歌新作:AI 检测文件内容类型,5ms 即可完成 | 开源日报 No.192

google/magika Stars: 5.0k License: Apache-2.0 magika 是一个利用深度学习来检测文件内容类型的工具。 使用自定义、高度优化的 Keras 模型&#xff0c;仅约 1MB 大小&#xff0c;在单个 CPU 上能够在毫秒内实现精确的文件识别。在超过 1M 文件和 100 种内容类型&#xff0…

供应链管理(SCM):界面设计全面扫盲,得供应链者得天下

大家伙&#xff0c;我是大千UI工场&#xff0c;专注UI分享和项目接单&#xff0c;本期带来供应链系统的设计分享&#xff0c;欢迎大家关注、互动交流。 一、什么是SCM SCM系统是供应链管理&#xff08;Supply Chain Management&#xff09;系统的缩写。供应链管理是指协调和管…

立式学习灯哪个牌子好?教你6个挑选窍门,甩掉坑货!

很多用户对立式学习灯的理解存在偏差&#xff0c;认为只要选择昂贵的、热度高的台灯就能万事大吉&#xff0c;实测不然!要知道&#xff0c;目前的市场上充斥着各类不专业立式学习灯&#xff0c;其中就包括不少所谓的网红品牌、跨界品牌&#xff0c;它们普遍通过造型精致、明星代…

Vue+SpringBoot打造考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

CTP-API开发系列之三:柜台系统简介

CTP-API开发系列之三&#xff1a;柜台系统简介 CTP-API开发系列之三&#xff1a;柜台系统简介中国金融市场结构---交易所柜台系统通用柜台系统极速柜台系统主席与次席 CTP柜台系统CTP组件名称对照表CTP柜台系统程序包CTP柜台系统架构图 CTP-API开发系列之三&#xff1a;柜台系统…

实现粘性布局position:sticky

对于粘性定位这个概念&#xff0c;很多人都没有注意到&#xff0c;所以写这篇文章总结一下。 粘性定位它基于用户的滚动位置来定位。 粘性定位的元素是依赖于用户的滚动&#xff0c;在 position:relative 与 position:fixed 定位之间切换。 它的行为就像 position:relative;…

查看Linux文件的所有者、用户组等所属信息

在Linux系统中&#xff0c;要查看文件或目录的所有者、用户组以及其他权限信息&#xff0c;可以使用以下命令&#xff1a; ls 命令&#xff1a; 使用 -l&#xff08;长格式&#xff09;选项来查看详细信息&#xff0c;包括所有者、用户组、大小、修改时间以及权限等。 ls -l /p…

【JavaScript 漫游】【031】window 对象总结

文章简介 本篇文章为【JavaScript 漫游】专栏的第 030 篇文章&#xff0c;记录了浏览器模型中 window 对象的相关知识点。 window 对象概述 浏览器里面&#xff0c;window 对象&#xff08;注意&#xff0c;w 为小写&#xff09;指当前的浏览器窗口。它也是当前页面的顶层对…

【开发工具】Git模拟多人开发场景理解分支管理和远程仓库操作

我们来模拟一个多人多分支的开发场景。假设你有一个新的空白远程仓库,假设地址是 https://github.com/user/repo.git。 克隆远程仓库到本地 $ git clone https://github.com/user/repo.git这会在本地创建一个 repo 目录,并自动设置远程主机为 origin。 创建本地开发分支并推送…

安卓部分手机使用webview加载链接后白屏(Android低版本会出现的问题)

前言 大爷&#xff1a;小伙我这手机怎么打开你们呢这个是白屏什么都不显示。 大娘&#xff1a;小伙我这也是打开你们呢这功能&#xff0c;就是一个白屏什么也没有&#xff0c;你们呢的应用不会有病毒吧。 小伙&#xff1a;我的手机也正常&#xff1b; 同事&#xff1a;我的也正…

使用RabbitMQ实现延时消息自动取消的简单案例

一、流程图 二、导包 <!--消息队列 AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 三、配置文件 #消息队列 …

Python PyQt5 多Tab demo

参考&#xff1a; https://cloud.tencent.com/developer/news/388937 importsysfromPyQt5.QtWidgetsimportQVBoxLayout,QWidget,QFormLayout,QHBoxLayout,QLineEdit,QRadioButton,QCheckBox,QLabel,QGroupBox,QApplication,QTabWidgetclassTabDemo(QTabWidget):def__init__(se…

C++内存泄漏检测

C进阶专栏&#xff1a;http://t.csdnimg.cn/aTncz 相关系列文章 C技术要点总结, 面试必备, 收藏起来慢慢看 C惯用法之RAII思想: 资源管理 C智能指针的自定义销毁器(销毁策略) 目录 1.内存泄漏概述 1.1.内存泄漏产生原因 1.2 内存泄漏导致的后果 1.3 内存泄漏解决思路 2.宏…

Linux——线程(2)

在上一篇博客中我介绍了Linux中的线程是什么样的&#xff0c;就如同进程可以通过 fork创建&#xff0c;可以被终止&#xff0c;可以退出一样&#xff0c;线程也可以被我们用户控制&#xff0c;这 篇博客我会介绍线程的控制&#xff0c;并且基于线程的控制所产生的一些问题进行 …

安装系统后,如何单个盘空间扩展多个盘空间?

1、计算机-管理-存储-磁盘空间 2、压缩C盘符&#xff0c;分出多余空间 3、将多余空间扩展&#xff0c;然后修改盘符名称

为什么会不断出现低价窜货链接

品牌在做控价的过程中&#xff0c;会进入一个怪圈&#xff0c;就是不管如何治理&#xff0c;低价、乱价、窜货链接都在不断出现&#xff0c;甚至有些低价链接会占据电商首页的位置&#xff0c;其实这些在一定程度上讲是正常的&#xff0c;品牌在不断发展&#xff0c;链接也是动…

Cyber RT 开发工具

在Cyber RT中还提供了一些工具&#xff0c;这些工具可以拓展Cyber RT功能、提高开发调试效率&#xff0c;本章主要介绍这些工具的使用。 本章内容: 1.cyber record工具的应用&#xff1b; 2.常用命令工具的使用&#xff1b; 学习收获: 1.可以通过cyber record将发布的话题消息…

基础50刷题之一(交替合并字符串)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、题目二、力扣官方题解&#xff08;双指针&#xff09;三、文心一言解释总结 前言 刚上研一&#xff0c;有人劝我好好学C&#xff0c;当时用的不多就没学&a…