【数据结构】P1 数据结构是什么、算法怎样度量

在这里插入图片描述

1.1 基本概念与术语

  • 数据: 数据是信息的载体,是所有能被计算机识别以及处理的符号。
  • 数据元素: 数据元素是数据基本单位,由若干 数据项 组成,数据项是构成数据元素最小的单位。
    • e . g . e.g. e.g. 数据元素如一条学生记录,数据项则为其中学号、姓名、性别等属性;
  • 数据对象: 数据对象是具有相同性质的数据元素的集合。
    • e . g . e.g. e.g. 小明是班级1学生,小红也是班级1学生,有集合 班级 1 = 小明 , 小红 , . . . . 班级1={小明, 小红, ....} 班级1=小明,小红,....
  • 数据类型: 分为原子类型、结构类型以及抽象数据类型;
    • 原子类型: 其值不可再分的数据类型;
    • 结构类型: 其值可以再分解为若干成分的数据类型;
    • 抽象数据类型
  • 数据结构: 数据结构描述数据元素相互之间的关系,包括三方面内容:逻辑结构、存储结构和数据的运算。

1.2 数据结构三要素

数据结构的三要素为:逻辑结构、存储结构、数据的运算;

1.2.1 逻辑结构

逻辑结构指数据元素之间的逻辑关系,从逻辑关系上描述数据,分为线性结构与非线性结构。

在这里插入图片描述

线性表是典型的线性结构,树和图是典型的非线性结构。

1.2.2 存储结构

存储结构指数据结构在计算机中的表示,也称物理结构,是用计算机实际实现的逻辑结构,主要有顺序存储、链式存储、索引存储和散列存储。

  • 顺序存储:逻辑上相邻的元素存储在物理位置也相邻的存储单元中。
    • 优点:可以实现随机存取,每个元素占用最小的存储空间。
    • 缺点:只能使用相邻的一整块存储单元,会导致出现较多的外部碎片。
  • 链式存储: 不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储位置的指针来表示元素之间的逻辑关系。
    • 优点:不会出现外部碎片,能充分利用全部存储单元。
    • 缺点:存储指针会额外占用存储空间,且只能顺序存取。
  • 索引存储: 另建立索引表,其中每一项为索引项,一般形式为:关键字、地址。
    • 优点:检索速度快。
    • 缺点:索引表额外占用存储空间,且增加、删除数据时也需修改索引表的时间成本。
  • 散列存储: 根据元素的关键字计算该元素的存储地址,又称为哈希存储。
    • 优点:检索、增加和删除结点操作快。
    • 缺点:若散列函数不好,会导致存储单元冲突,解决冲突需要额外的时间和空间开销。

1.2.3 数据的运算

施加在数据上的运算包含运算的定义和实现。

  • 运算的定义 是针对逻辑结构的,指出运算的功能。
  • 运算的实现 是针对存储结构的,指出运算的步骤。

2.1 算法定义

在这里插入图片描述

算法(Algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列,其中每条指令表示一个或者多个操作。

2.2 算法五大特征

  • 有穷性: 一个算法必须在执行有穷步骤之后结束,且每一步都在有穷时间内完成。
  • 确定性: 算法中每条指令必须有明确的含义,对于相同的输入只能得出相同的输出。
  • 可行性: 算法中操作可以通过已经实现的基本运算执行有限次来实现。
  • 输入: 一个算法有零个或者多个输入。
  • 输出: 一个算法有一个或者多个输出。

一个好的算法,通常应考虑如下目标:

  • 正确性: 算法应能正确的解决问题。
  • 可读性: 算法应具有良好的可读性,简单的结构,同时带有标注帮助人们理解。
  • 健壮性: 输入非法数据时,算法应能对其做出反应和处理,而不会意外退出或者输出莫名结果。
  • 高效率与低存储量: 效率是指算法执行的时间,存储量是指算法执行中所需的最大存储空间。

2.3 算法效率度量

2.3.1 时间复杂度

一个语句的频度指的是该语句在算法中被重复执行的次数。算法中所有语句的频度之和为 T ( n ) T(n) T(n),时间复杂度分析 T ( n ) T(n) T(n) 的数量级。

算法的时间复杂度记为: T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))
其中 O O O 的含义表示数量级。

需要注意的是,算法的时间复杂度不仅仅取决于算法的结构规模,还取决于待输入数据的初始状态。对于同一个算法,因初始状态不同,结果可以为 O ( n ) O(n) O(n) 也可能为 O ( 1 ) O(1) O(1)
其中 O ( n ) O(n) O(n) 我们其为 “最坏时间复杂度” O ( 1 ) O(1) O(1) 称为 “最好时间复杂度”,而 “平均时间复杂度” 则为当所有可能输入实例在等概率出现的情况下,算法的期望运行时间。

** 在分析一个程序的时间复杂度时,有以下两条规则:

  1. 加法规则:
    T ( n ) = T 1 ( n ) + T 2 ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x ( f ( n ) , g ( n ) ) ) T(n)=T_1(n)+T_2(n)=O(f(n))+O(g(n))=O(max(f(n), g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

  2. 乘法规则:
    T ( n ) = T 1 ( n ) ∗ T 2 ( n ) = O ( f ( n ) ) ∗ O ( g ( n ) ) = O ( f ( n ) ∗ g ( n ) ) T(n)=T_1(n)*T_2(n)=O(f(n))*O(g(n))=O(f(n)*g(n)) T(n)=T1(n)T2(n)=O(f(n))O(g(n))=O(f(n)g(n))

常见的渐进时间复杂度为:
O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)


2.3.2 空间复杂度

算法的空间复杂度 S ( n ) S(n) S(n) 为该算法所耗费的存储空间,记为 S ( n ) = O ( g ( n ) ) S(n)=O(g(n)) S(n)=O(g(n))

一个程序执行时除需要存储空间来存放本身的指令、常数、变量和输入数据外,还需要一些数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。

算法原地工作是指算法所需的辅助空间为常量,即为 O ( 1 ) O(1) O(1)

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

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

相关文章

Leetcode 2028

思路&#xff1a;1-6之间的的n个数组合起来要变成sum_t mean*(rolls.size()n) - sum(rolls) ; 那么可以先假设每个数都是sum_t / n 其中这个数必须要在1 - 6 之间否者无法分配。 然后可以得出n * (sum_t / n ) < sum ; 需要对余数mod进行调整&#xff0c;为了减少调整的次…

接口测试及接口测试常用的工具详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息…

深入了解 CSS 预处理器 Sass

今天我们来深入探讨一下 CSS 预处理器 Sass。我们将学习什么是 Sass,如何使用它,以及它是如何工作的。 什么是 Sass? Sass 是 syntactically awesome style sheets 的缩写,是一种 CSS 预处理器。它是 CSS 的扩展,为基础 CSS 增加了更多的功能和优雅。普通的 CSS 代码很容…

sklearn监督学习--k近邻算法

sklearn监督学习 一、分类与回归二、泛化、过拟合与欠拟合三、k近邻算法四、分析KNeighborsClassifier五、k近邻算法用于回归优点、缺点和参数 一、分类与回归 监督学习是最常用也是最成功的机器学习类型之一。监督机器学习问题主要有两种&#xff0c;分别叫做分类与回归。分类…

IDEA项目通过 tomcat运行报错: 404 请求的资源不可用

SpringBootVue项目 IDEA运行 Tomcat&#xff0c;自动打开网页报错 HTTP状态 404 - 未找到 类型 状态报告 消息 请求的资源[/WarehouseManagerApi_war/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。 Apache Tomcat/9.0.89 但是运行访问 …

【接口测试_04课_Jsonpath断言、接口关联及加密处理】

一、Jasonpath的应用 JsonPath工具网站&#xff1a;JSONPath解析器 - 一个工具箱 - 好用的在线工具都在这里&#xff01; 1、JSONPath的手写与获取 手写JSONPath 1、 $ &#xff08;英文美元符号&#xff09;代表外层的{} . &#xff08;英文句号&#xff09;表示当前…

卷积神经网络-奥特曼识别

数据集 四种奥特曼图片_数据集-飞桨AI Studio星河社区 (baidu.com) 中间的隐藏层 已经使用参数的空间 Conv2D卷积层 ReLU激活层 MaxPool2D最大池化层 AdaptiveAvgPool2D自适应的平均池化 Linear全链接层 Dropout放置过拟合&#xff0c;随机丢弃神经元 -----------------…

echarts快速入门

之前只看过&#xff0c;没写过&#xff0c;来了个新需求了解下echarts功能 官网&#xff1a;https://echarts.apache.org/handbook/zh/get-started 官方参数文档&#xff1a;https://echarts.apache.org/zh/option.html#title 其实大部分问题&#xff0c;去官方参数文档里面都…

【项目教程】FFmpeg+SDL2实现视频播放器

一、前言 学习ffmpeg和sdl&#xff0c;并编写一个视频播放器&#xff0c;是一个很好的音视频开发项目。 虽然关于视频播放器的原理已经有很多人在博客中进行了讲解&#xff0c;但是很多人不提供视频和代码&#xff0c;这也是我写这篇博客的主要原因。 二、在视频播放器中&am…

【组合数学 放球问题 虚拟点 小于等于转小于】1621. 大小为 K 的不重叠线段的数目

本文涉及知识点 放球问题 组合数学汇总 本题难道分&#xff1a;2198 LeetCode1621. 大小为 K 的不重叠线段的数目 给你一维空间的 n 个点&#xff0c;其中第 i 个点&#xff08;编号从 0 到 n-1&#xff09;位于 x i 处&#xff0c;请你找到 恰好 k 个不重叠 线段且每个线段…

零拷贝(Zero Copy)

目录 零拷贝&#xff08;Zero Copy&#xff09; 1.什么是Zero Copy? 2.物理内存和虚拟内存 3.内核空间和用户空间 4.Linux的I/O读写方式 4.1 I/O中断原理 4.2 DMA传输原理 5.传统I/O方式 5.1传统读操作 5.2传统写操作 6.零拷贝 6.1.用户态直接IO 6.2.mmapwrite …

免费使用知网下载文献

第一步&#xff1a;输入网址&#xff1a;https://digi.library.hb.cn:8443/#/&#xff08;或搜索湖北省图书馆&#xff09; 第二步&#xff1a;点击登录按钮。 第三步&#xff1a;使用手机 支付宝 扫描页面左侧二维码。 第四步&#xff1a;手机点击“电子读者证注册”。&…

抖音 v27.8.0 内置增强模块,自动播放、无水印下载(可登录,助手增强版)

介绍 抖音应用作为全球领先的短视频平台&#xff0c;其内置功能允许用户将喜欢的内容保存至本地设备&#xff0c;但默认情况下&#xff0c;这些视频会带有抖音的水印。为了解决这一限制&#xff0c;该版本使用户能够直接保存不带水印的视频到手机中&#xff0c;无需使用任何第…

R25 型双极型晶体管 433功率放大器,集电极电流可达100mA

R25 型硅基微波双极型晶体管是一种常见的晶体管&#xff0c;主要用于高频电子放大线路中。常被用作放大器、开关、变频器等电子电路中的核心元件。在放大电路中&#xff0c;它可以将微弱的信号放大到足以驱动输出负载&#xff1b;在开关电路中&#xff0c;它可以实现电路的打开…

易查分小程序 学生成绩管理小程序

亲爱的老师们&#xff0c;是不是每次成绩公布后&#xff0c;家长们的连环夺命call让你头大&#xff1f;担心孩子们的成绩信息安全&#xff0c;又想快速分享给家长&#xff0c;这可咋整&#xff1f;别急&#xff0c;易查分小程序来帮忙啦&#xff01; 安全有保障 智能验证码&a…

基于tcp实现自定义应用层协议

认识协议 协议&#xff08;Protocol&#xff09; 是一种通信规则或标准&#xff0c;用于定义通信双方或多方之间如何交互和传输数据。在计算机网络和通信系统中&#xff0c;协议规定了通信实体之间信息交换的格式、顺序、定时以及有关同步等事宜的约定。简易来说协议就是通信…

【Linux】Linux下centos更换国内yum源

&#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f331;系列专栏&#xff1a;Linux &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 1. 备份旧的 YUM 源文件2. 下载国内的 YUM 源文件阿里云&#xff1a;网易&#xff1a; 3. 清理 YUM 缓存4. 更新…

scp问题:Permission denied, please try again.

我把scp归纳三种情况&#xff1a; 源端root——》目标端root 源端root——》目标端mysql&#xff08;任意&#xff09;用户 源端&#xff08;任意用户&#xff09;——》目标端root用户 在scp传输文件的时候需要指导目标端的用户密码&#xff0c;如root用户密码、mysql用户…

选择海外代理IP需要注意什么?

跨境电商近年来的兴起与发展&#xff0c;越来越多的跨境从业者从事该行业&#xff0c;但在从事跨境贸易中则需要海外IP代理来突破地域限制、提升访问速度和稳定性、防止账号关联以及保护隐私和安全。这些功能都有助于跨境电商企业在全球范围内拓展业务&#xff0c;提升竞争力&a…

一文搞定jdk8升级到jdk11

一、背景 为什么要升级JDK11 性能 JDK11的G1的GC性能高很多&#xff0c;对比JDK8无论是性能还是内存占比都有很大的提升&#xff0c;业内各项数据指标也都表明JDK11的G1在应对突发流量的下的效果惊人&#xff1b; 版本兼容 Spring Boot 2.7.x及以后的版本将不再支持Java 8作为…