数据结构:绪论之时间复杂度与空间复杂度


作者主页

失踪人口回归,陆续回三中。
开辟文章新专栏——数据结构,恳请各位大佬批评指正!


在这里插入图片描述

文章目录

    • 作者主页
  • 数据结构的基本知识
    • 数据:
    • 数据元素:
    • 数据对象:
    • 数据类型:
    • 数据结构:
      • 逻辑结构:元素之间的逻辑关系
      • 存储结构:物理结构
      • 数据运算
  • 算法与其评价
    • 算法的概念:
    • 算法效率的评价:
      • 时间复杂度
      • 空间复杂度

数据结构的基本知识

数据:

数据是信息的载体

数据元素:

数据元素是数据的基本单位,数据项是构成元素不可分割的最小单位。

数据对象:

具有相同性质的数据元素的集合

数据类型:

  1. 原子类型
  2. 结构类型
  3. 抽象数据类型(ADT):描述了数据的逻辑运算和抽象运算,从而构成一个完整的数据结构定义

数据结构:

有一种或多种特定关系的数据元素的集合

逻辑结构:元素之间的逻辑关系

在这里插入图片描述

集合:元素同属于一个集合

线性结构:一对一,除了第一个元素,所有元素都有唯一先驱,除了最后一个元素,所有元素都有唯一后继

树形结构:一对多

网状结构:多对多

存储结构:物理结构

顺序存储:数据存储在相邻存储单元中,可以实现随机存储,但是外部碎片多

链式存储:利用存储地址的指针来表示元素之间的逻辑关系,不会出现碎片现象,但是要存储指针占用额外空间,只能实现顺序存取

索引存储:检索快,但索引表占用额外空间,增删数据时也要修改索引表,花费时间较多

散列存储:根据元素的关键字直接计算出该元素存储地址,也称哈希存储。快,但是如果散列函数不好,会导致冲突浪费时间

数据运算

算法与其评价

算法的概念:

是对特定问题求解步骤的一种描述。程序=数据结构+算法(步骤)

算法具有:有穷性,确定性,可行性,输入,输出

算法是有穷的,程序是无穷的

一个好的算法应该具备:正确性,可读性,健壮性,高效率与低存储量需求

算法效率的评价:

时间复杂度

  • 定义

    衡量算法执行时间随输入规模增长的变化趋势,不关注具体执行时长,关注的是输入规模变大时,算法运行时间的增长快慢。

  • 表述方法

    用大 O 符号(Big O notation)表示,如 O (1)、O (n)、O (n²) 等。通过分析算法中基本操作的执行次数与输入规模 n 的关系来确定,忽略低阶项和常数系数,保留最高阶项表示量级 。

    在这里插入图片描述

  • 计算规则:

    • 只保留常数项
    • 保留最高项
  • 常用技巧

    在这里插入图片描述

    • 加法规则:当一个算法由多个部分组成时,这意味着在计算总时间复杂度时,取各部分时间复杂度中量级最大的那个。例如,算法一部分时间复杂度是(O(n)),另一部分是(O(n2)),整体时间复杂度就是(O(n2)) 。

      void loveyou(int n){//1次int i = 1;//3001次while(i<=n){//3000*2次i++;printf("i love you ");}
      }
      int main(){loveyou(3000)
      }
      //T(n)=1+3001+3000*2
      //T(n)=3n+3
      
    • 乘法规则:如果一个算法是嵌套结构,外层操作数量级是(f(n)),内层是(g(n)),那么整体时间复杂度就是两者相乘 。比如外层循环n次,内层循环m次,整体时间复杂度就是(O(n×m)) 。

    • 量级比较:“常对幂指阶” 是常见时间复杂度量级从小到大的排序,也是保留阶数最高的依据。

      在这里插入图片描述

  • 如何计算:

    顺序执行的代码只会影响常数项,可以忽略

    只需挑循环中的一个基本操作分析它的执行次数与n的关系即可

    如果有多层嵌套循环,只需关注最深层循环几次就行了

  • 三种复杂度:

    最坏时间复杂度:考虑输入数据“最坏的情况”,执行次数最多的时候

    平均时间复杂度:考虑所有输入数据都等概率出现的情况

    最好时间复杂度:考虑输入数据的最好的情况,

空间复杂度

  • 空间复杂度的定义:

    空间复杂度(Space Complexity)是衡量算法在执行过程中临时占用存储空间大小的量度。

    它反映了算法所需存储空间与输入数据大小之间的关系。

    空间复杂度通常用大O表示法来表示。

    2.2 空间复杂度的分析

    同时间复杂度一样用大O表示法表示;也是表示一个数量级。记作: 在这里插入图片描述

  • 2.3 常见的空间复杂度

    常数阶:

    如果算法的空间复杂度不随问题规模 n 的变化而变化,即算法所需的存储空间是一个常数,那么空间复杂度为 O(1)。

    线性阶:

    如果算法所需的存储空间与问题规模 n 成正比,即算法所需的存储空间随着 n 的增加而线性增加,那么空间复杂度为

    O(n)。

    多项式阶:

    如果算法所需的存储空间与问题规模 n 的关系可以表示为多项式函数,即空间复杂度为 O(n^k),其中 k 是一个正整数。

    对数阶:

    如果算法所需的存储空间与问题规模 n 的关系可以表示为对数函数,即空间复杂度为 O(log n)。

    指数阶:

    如果算法所需的存储空间与问题规模 n 的关系可以表示为指数函数,即空间复杂度为 O(2^n)。

多项式函数,即空间复杂度为 O(n^k),其中 k 是一个正整数。

对数阶:

如果算法所需的存储空间与问题规模 n 的关系可以表示为对数函数,即空间复杂度为 O(log n)。

指数阶:

如果算法所需的存储空间与问题规模 n 的关系可以表示为指数函数,即空间复杂度为 O(2^n)。

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

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

相关文章

位图算法——判断唯一字符

这道题有多种解法&#xff0c;可以创建hash数组建立映射关系判断&#xff0c;但不用新的数据结构会加分&#xff0c;因此我们有“加分”办法——用位图。 我们可以创建一个整型变量&#xff08;32位&#xff09;而一共才26个字母&#xff0c;所以我们只要用到0-25位即可&#…

深度学习之-目标检测算法汇总(超全面)

YOLO目标检测改进 YOLO V1- YOLO V10: 点这进入https://www.researchgate.net/publication/381470743_YOLOv1_to_YOLOv10_A_comprehensive_review_of_YOLO_variants_and_their_application_in_the_agricultural_domain YOLO V11: YOLO11 &#x1f680;Ultralytics YOLO11 &…

软考中级软件设计师——计算机网络篇

一、计算机网络体系结构 1.OSI七层模型 1. 物理层&#xff08;Physical Layer&#xff09; 功能&#xff1a;传输原始比特流&#xff08;0和1&#xff09;&#xff0c;定义物理介质&#xff08;如电缆、光纤&#xff09;的电气、机械特性。 关键设备&#xff1a;中继器&#…

高等数学-空间中的曲线与曲面

一、 向量的数量积&#xff1a; 直线与直线的夹角&#xff1a; 直线与平面的夹角&#xff1a; 平面与平面的夹角&#xff08;锐角&#xff09;&#xff1a; 方向余弦&#xff1a; 注&#xff1a;空间向量与坐标轴的夹角定义为向量与坐标轴正方向的夹角 例1: 二、 1、z0所…

使用计算机视觉实现目标分类和计数!!超详细入门教程

什么是物体计数和分类 在当今自动化和技术进步的时代&#xff0c;计算机视觉作为一项关键工具脱颖而出&#xff0c;在物体计数和分类任务中提供了卓越的功能。 无论是在制造、仓储、零售&#xff0c;还是在交通监控等日常应用中&#xff0c;计算机视觉系统都彻底改变了我们感知…

javaweb-html

1.交互流程&#xff1a; 浏览器向服务器发送http请求&#xff0c;服务器对浏览器进行回应&#xff0c;并发送字符串&#xff0c;浏览器能对这些字符串&#xff08;html代码&#xff09;进行解释&#xff1b; 三大web语言&#xff1a;&#xff08;1&#xff09;html&#xff1a…

图漾相机错误码解析

文章目录 1.相机错误码汇总2.常见报错码2.1 -1001报错2.1.1 没有找到相机2.1.2 SDK没有进行初始化2.1.3 相机不支持Histo属性 2.2 -1005报错2.2.1 跨网段打开相机2.2.2 旧版本SDK在软触发失败后提示的报错2.2.3 相机初始化上电时报错2.2.4 USB相机被占用 2.3 -1009报错2.3.1 相…

18. 结合Selenium和YAML对页面继承对象PO的改造

18. 结合Selenium和YAML对页面继承对象PO的改造 一、架构改造核心思路 1.1 改造前后对比 #mermaid-svg-ziagMhNLS5fIFWrx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ziagMhNLS5fIFWrx .error-icon{fill:#5522…

将VMware上的虚拟机和当前电脑上的Wifi网卡处在同一个局域网下,实现同一个局域网下实现共享

什么是桥接模式&#xff1a;桥接模式&#xff08;Bridging Mode&#xff09;是一种网络连接模式&#xff0c;常用于虚拟机环境中&#xff0c;将虚拟机的虚拟网络适配器直接连接到主机的物理网络适配器上&#xff0c;使虚拟机能够像独立的物理设备一样直接与物理网络通信 1.打开…

gitee错误处理总结

背景 如上图&#xff0c;根据图片中的 Git 错误提示&#xff0c;我们遇到的问题是 ​本地分支落后于远程分支&#xff0c;导致 git push 被拒绝。 ​问题原因​ 远程仓库的 master 分支有其他人推送的新提交&#xff0c;而您的本地 master 分支未同步这些更新&#xff08;即本…

如何提高独立服务器的安全性?

独立服务器相对于其它服务器来说&#xff0c;整体的硬件设备都是独立的同时还有着强大的服务器性能&#xff0c;其中CPU设备能够决定着服务器的运算能力&#xff0c;所以独立服务器的安全性受到企业格外的重视&#xff0c;严重的话会给企业造成巨大的资金损失。 那么&#xff0…

Spark,集群搭建-Standalone

以下是 Spark Standalone 集群搭建 的详细步骤&#xff08;基于 Linux 系统&#xff0c;以伪分布式为例&#xff09;&#xff1a; 一、环境准备 1. 硬件要求 - 至少 2 台节点&#xff08;1 台 Master&#xff0c;1 台 Worker&#xff0c;可扩展&#xff09;。 - 每节点配置…

如何在WordPress中使用ChatGPT

ChatGPT 自 2022 年 11 月问世以来&#xff0c;极大地影响了我们的创作方式。ChatGPT 可以帮助您制作大纲、标题、段落或完整的博客文章&#xff0c;各地的数字创作者都在热衷于使用人工智能&#xff08;AI&#xff09;创建内容。随着人工智能的不断发展&#xff0c;我们看到了…

spring5-配外部文件-spEL-工厂bean-FactoryBean-注解配bean

spring配外部文件 我们先在Spring里配置一个数据源 1.导c3p0包,这里我们先学一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…

GStreamer (三)常⽤插件

常⽤插件 1、Source1.1、filesrc1.2. videotestsrc1.3. v4l2src1.4. rtspsrc和rtspclientsink 2、 Sink2.1. filesink2.2. fakesink2.3. xvimagesink2.4. kmssink2.5. waylandsink2.6. rkximagesink2.7. fpsdisplaysink 3 、视频推流/拉流3.1. 本地推流/拉流3.1.1 USB摄像头3.1…

【EDA软件】【联合Modelsim仿真使用方法】

背景 业界EDA工具仿真功能是必备的&#xff0c;例如Vivado自带仿真工具&#xff0c;且无需联合外部仿真工具&#xff0c;例如MoodelSim。 FUXI工具仿真功能需要联合Modelsim&#xff0c;才能实现仿真功能。 方法一&#xff1a;FUXI联合ModelSim 1 添加testbench文件 新建to…

国产化Excel处理组件Spire.XLS for .NET系列教程:通过 C# 将 TXT 文本转换为 Excel 表格

在数据处理和管理场景中&#xff0c;将原始文本文件&#xff08;TXT&#xff09;高效转换为结构化的 Excel 电子表格是一项常见要求。对于那些需要自动生成报表或者处理日志文件的开发人员而言&#xff0c;借助 C# 实现 TXT 到 Excel 的转换工作&#xff0c;可以简化数据组织和…

DeepSeek 的强化学习优化策略:RLHF 与 DPO 的应用

DeepSeek 的强化学习优化策略&#xff1a;RLHF 与 DPO 的应用 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 DeepSeek 的强化学习优化策略&#xff1a;RLHF 与 DPO 的应用摘要引言技术原理对比1. RLHF&#xff1a…

c: 分号的歧义

最近看到一个关于某些语言里的分号问题&#xff0c;比如下面一个作者就是无意识的每行后面多加了分号导致问题。 其实python的语法可以更好的规避这种潜意识&#xff0c;因为根本就不需要每行后面加分号的意识&#xff0c;也就不需要开发者习惯这种意识。 所以&#xff0c;最后…

Elasticsearch 实战面试题,每个题目都会单独解析

Elasticsearch 在 Java 中最常用的客户端是什么&#xff1f;如何初始化一个 RestHighLevelClient&#xff1f;如何用 Spring Boot 快速集成 Elasticsearch&#xff1f;Spring Data Elasticsearch 如何定义实体类与索引的映射&#xff1f; ES的倒排索引和正排索引的区别及适用场…