数据结构_复杂度讲解(附带例题详解)

news2024/12/29 16:04:29

文章目录

  • 前言
  • 什么是数据结构?
  • 什么是算法?
  • 一. 算法的时间复杂度和空间复杂度
    • 1.1 算法效率
    • 1.2 如何衡量一个算法好坏
  • 二. 时间复杂度
    • 2.1 时间复杂度概念
      • 例题一
        • 例题一分析
      • 实例一
        • 实例一分析
  • 三. 空间复杂度
      • 实例
        • 实例问题解析
  • 四. 常见复杂度对比
  • 五. 常见时间复杂度以及复杂度oj练习


前言

什么是数据结构?

数据结构是计算机科学中研究数据组织、存储、管理和操作的方法和原则。它涉及到各种不同的数据类型和数据组织方式,包括数组、链表、树、图等。数据结构的设计和实现可以影响到程序的效率和可靠性,因此是计算机科学中非常重要的一个领域。
  • (数据结构是计算机存储、组织数据的方式,指相互之间在一种或多种特定关系的数据元素的集合)
  • (数据结构就是在内存当中管理数据(管理的核心就是增、删、查、改),在内存中管理数据有很多种方式,比如说链型结构…不同结构有他们各式各样的优越势)

什么是算法?

  • 算法就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果
  • (算法是对这些数据进行一些处理,就是排序、查找、这些。然后达到我们想要的目的)

一. 算法的时间复杂度和空间复杂度

写完一个算法后呢,要评估一下,这个算法效率上跑的怎么样,一个算法衡量它最重要的标准就是它的性能如何,所以数据结构里面给出了评估它一个性能的标准,叫做: 复杂度的计算。 分下来叫:时间复杂度 和 空间复杂度。

1.1 算法效率

算法效率是衡量算法运行时间和所需资源的指标。它可以用时间复杂度和空间复杂度来表示。算法效率越高,运行速度越快,所需资源越少。

1.2 如何衡量一个算法好坏

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

二. 时间复杂度

2.1 时间复杂度概念

在计算机科学中,算法的时间复杂度是一个函数 ,它定量描述了该算法的运行时间。时间复杂度是衡量算法时间效率的指标。它表示算法运行时间与输入规模的增长关系。常见的时间复杂度有 O(1)、O(log n)、O(n)、O(n log n)、O(n²) 等。时间复杂度越低,算法效率越高。

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

例题一

例题一分析

第一个for循环里嵌套了一个for循环,总的循环会执行NN次;
第二个for循环会执行2
N次;
while循环固定 – 10 次 ;

所以Func1 执行的基本操作次数是:N^2+2*N+10

但是,我们需要注意的是,实际我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而是只需要大概执行次数,抓大头,那么这里我们使用大O的渐进表示法。

例如:N^2+2*N+10
当 N = 10 F(N) = 130 ;
N = 100F(N) = 10210 ;
N = 1000F(N) = 1002010 ;


随着N越来越大,2N+10的值与N^2的值相比 2N+10的值太小,可以忽略,那么这里用大O渐进表示法 时间复杂度记为 O(N^2)。

实例一

实例一分析

Func2准确的时间复杂度是: 2N+10:这个 +10 对结果影响不大,可以忽略,省略掉。
那最后是
O (2N)
还是O (N) 呢。
为什么最后取得是O (N)。

  1. 在这个表达式里面一般会去阶数最高的一个项,因为这个项是对表达式影响最大的。
  2. 其次还会忽略掉它的系数

三. 空间复杂度

是对一个算法在运行过程中额外临时占用存储空间大小的量度。
空间复杂度不是程序占用了多少 bytes 的空间,所以空间复杂度算的是变量的个数
空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法

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

实例

实例问题解析

  1. 问题一:不算,因为它不是为了解决这个排序额外开的空间,因为这个数组存的是本来提供的数据样本。
  2. 问题二:是为了解觉这个排序,额外开的空间。
  3. 问题三:这三个变量是因为我们在排序的过程中我们要进行 循环、迭代 … 定义的变量。三个 — 常数个 — 空间复杂度 – O(1) --不是一个,是常数个。

四. 常见复杂度对比

五. 常见时间复杂度以及复杂度oj练习

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

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

相关文章

Linux查找文件内容的命令

在Linux中,您可以使用以下命令来查找文件内容: grep命令: grep命令用于在文件中搜索指定的文本模式,并将包含匹配的行打印出来。语法如下: grep "要查找的文本" 文件名例如,要在名为example.txt的…

激光雷达录制pcap类型的包

查看IP 上图中的eno1就是网卡名,就可以使用如下命令录制 sudo tcpdump -i eno1 host 192.168.1.200 -w lidar.pcap-i 后面是网卡名,host 后面是ip,-w后是pcap包名称。

在Spring Boot API Gateway中实现Sticky Session

文章目录 小结问题在API Gateway中实现Sticky Session在同一个API Gateway中同时支持Sticky Session和RoundRobinLoadBalancer参考 小结 在Kubernetes微服务的云环境中,如何在Spring Boot API Gateway中实现Sticky Session,当服务请求被某一个服务器处理…

晶码存档&改造【01】模板导入租户登录

app101改造之前 想搞一个设备导入功能, 想象中 实际上 再改改样式 关于数据的导入导出: 可见博客 APEX数据源加载实现Excel表数据导入及自定义存储过程_王小小鸭的博客-CSDN博客https://blog.csdn.net/clover_oreo/article/details/132575970?csdn_s…

华为HCIA(五)

Vlan id 在802.1Q中 高级ACL不能匹配用户名和源MAC 2.4G频段被分为14个交叠的,错列的20MHz信道,信道编码从1到14,邻近的信道之间存在一定的重叠范围 STA通过Probe获取SSID信息 Snmp报文 网络管理设备异常发生时会发送trap报文 D类地址是…

【git】超详细使用指令

git指令 暂存区工作区提交到暂存区暂存区覆盖到工作区暂存区移除文件暂存区提交到版本库 git储藏场景条件 版本库版本库回退 忽略文件新建.gitignore文件,填入相应配置忽略文件 分支创建分支命令切换分支命令查看所有分支 分支合并切回要合入的分支上合并其他分支过…

数据结构--希尔排序

目录 希尔排序的定义 给一个序列进行希尔排序 希尔排序的算法实现 算法性能分析 1.时间复杂度 2.稳定性 3.适用性 知识点回顾 希尔排序的定义 给一个序列进行希尔排序 第一趟d可以是元素个数/2 相距为4的子表 对子表进行直接插入排序(由小到大&#xf…

在Windows10中打开控制面板的5种方法以及如何设置环境变量

在Windows10中打开控制面板的5种方法 方法一:在Windows10中通过运行命令打开控制面板方法二:从Windows 10中的桌面访问控制面板方法三:在Windows10中使用搜索启动控制面板方法四:在Windows10桌面上创建控制面板快捷方式方法五&…

Proxyman Premium for Mac:网络调试和分析工具的终极选择

如果你在寻找一款强大而高效的网络调试和分析工具,那么Proxyman Premium for Mac绝对值得你的关注。这款工具专为Mac用户设计,旨在帮助开发人员、网络管理员和技术专业人员解决网络相关问题,同时提供一系列强大的功能来满足他们的需求。 Pro…

嵌入式软件测试

1.etest的使用 里面有“包教包会.pptx”按照ppt完成安装及题目下载和测试. 1)安装etest (解压 ,注意盘根目录下解压) 2)安装vspd (解压 ) 3)使用vspd端口配置 (…

[ MySQL] — 事务管理

什么是事务? 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是…

易点易动系统帮助制药企业提供智能化固定资产管理方案

制药企业作为大宗重资产行业,其生产车间内各种设备及仪器往往复杂、种类繁多、数量众多。高效管理这些固定资产对企业生产作业来说显得尤为重要。但是,传统手写账目或excel电子表格等管理模式已不能适应如今海量资产的管理需求。易点易动专业从事固定资产管理领域多年,通过自主…

Vue的第二章节之模版语法(带你感受来自Vue模版语法的魅力)

目录 ​编辑 前言 一、了解模版语法 1. 什么是模版语法 2. 应用场景 3. 对开发的作用 二、插值 1. 文本 2. HTMLj解析 3. 表达式 三、指令 1. v-if/v-else-if/v-else的使用 2. v-show v-show与v-if的区别 3. v-for v-for的使用 扩展(下拉框&#x…

selenium中ActionChains方法详细讲解

前言 本文将介绍Selenium中的ActionChains类及其使用方法,帮助您模拟用户在网页上的鼠标和键盘操作。了解ActionChains的常用方法和示例代码,可轻松实现移动鼠标、点击元素、拖拽元素等操作。通过本文的学习,您能更好地应用ActionChains解决自…

Oracle for Windows安装和配置——Oracle for Windows软件安装

2. Oracle for Windows安装和配置 2.1. Oracle for Windows软件安装 2.1.1. 准备Oracle软件 1)下载或拷贝安装软件 下载地址:otn.oracle.com或my oracle support。下载文件列表。具体如图2.1.1-1所示。 图2.1.1-1 下载文件列表 --说明: 1&#xff0…

flink-connector-mysql-cdc

FlinkCDC是一个实现CDC(Change Data Capture)思想的数据同步工具。 借助于Flink CDC Connector ,它监听数据库的二进制日志文件,来获取数据库变更的数据,以此实现数据同步。 1. 下载Flink 及 对应版本的 Flink CDC FlinkCDC 支持的 Connect…

升级:远程桌面软件玩游戏指南

你有没有遇到过这样的场景:你想玩一款特定的游戏,但却受到设备功能的限制?这就是游戏远程桌面的概念变得非常宝贵的地方。从本质上讲,它允许您远程利用高端游戏计算机的功能,使您能够在自己的设备上玩游戏。 可以考虑…

四、JAVA语言基础

JAVA语言基础 JAVA语言基础1.1.Java主类结构1.1.1.包声明1.1.2.声明成员变量和局部变量1.1.3.编写主方法1.1.4.导入API类库 —————————————————————————————————————————————————— JAVA语言基础 很多人认为在学习Java语言之…

uni-app 之 文字分两行显示超出用省略号表示

uni-app 之 文字分两行显示超出用省略号表示 vue 将一大串文字分两行显示超出用省略号表示 通过css设置文字强制不换行超出用省略号表示: {white-space: nowrap; 文本强制不换行;text-overflow:ellipsis; 文本溢出显示省略号;overflow:hidden; 溢出的部…

QTabWidget 类 (选项卡部件)

1、 QTabWidget 类直接继承自 QWidget。该类提供了一个选项卡栏(QTabBar)和一个相应的页 面区域,用于显示与每个选项卡相对应的页面。 与 QStackedLayout 布局原理相同,只有 当前页面(即可见页面)是可见的,所有其他页面都不可见,用…