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

news2024/9/25 17:10:30

在这里插入图片描述

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.coloradmin.cn/o/1705893.html

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

相关文章

ShardingSphere使用案例

文章目录 一、分表1. 项目架构搭建2. 数据库搭建3. 案例开发一、分库1. 创建新的库2. 修改配置文件一、分表 1. 项目架构搭建 创建Maven项目导入相关依赖<dependencies><

ArcgisPro3.1.5安装手册

ArcgisPro3.1.5安装手册 一、目录介绍: 二、安装教程&#xff1a; (1)安装顺序&#xff1a;最先安装运行环境&#xff08;runtime6.0.5&#xff09;,接着安装install里面的文件&#xff0c;最后复制path里面的文件替换到软件bin文件夹下即可。 (2)具体安装步骤&#xff…

蓝桥杯练习系统(算法训练)ALGO-932 低阶行列式计算

资源限制 内存限制&#xff1a;64.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给出一个n阶行列式(1<n<9)&#xff0c;求出它的值。 输入格式 第一行给出两个正整数n,p&#xff1b;   接下来n行&…

MySQL触发器实战:自动执行的秘密

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 MySQL触发器实战&#xff1a;自动执行的秘密 前言触发器的定义和作用触发器的定义和作用触发器的…

拌合楼系统开发(二十)解决海康DS-TVL224系列屏幕显示二维码思路

前言&#xff1a; 需求是想在通过程序动态控制显示屏显示二维码&#xff0c;最开始有些担心led这种点阵屏会不会对二维码显示出来后无法识别&#xff0c;实际测时候发现是没问题的。对于显示文字和语音播报&#xff0c;csdn上已经有大神有完整的代码。 海康威视道闸进出口LED屏…

linux开发之设备树

设备树的基本概念 1.什么是设备树?为什么叫设备树呢? 设备树是描述硬件的文本文件&#xff0c;因为语法结构像树一样。所以叫设备树。 2.基本名词解释 <1>DT:Device Tree //设备树 <2>FDT:Flattened Device Tree //开放设备树&#xff0c;起源于0penFirmware(0F…

KNN算法 比较

文章目录 PreHufuOne RoundMulti Round Pre 安全操作参考链接 Hufu hufu算法详细信息。Alg.1 示出了对联合kNN查询的分解。line 1-8得出半径。我们初始化半径的下界&#xff08;l0&#xff09;和上界&#xff08;uv0&#xff09;&#xff0c;其中v0可以设置为区域的直径或由用…

git中忽略文件的配置

git中忽略文件的配置 一、在项目根目录下创建.gitignore文件二、配置规则如果在配置之前已经提交过文件了&#xff0c;要删除提交过的&#xff0c;如何修改&#xff0c;参考下面的 一、在项目根目录下创建.gitignore文件 .DS_Store node_modules/ /dist# local env files .env…

一机实现All in one,NAS如何玩转虚拟机!

常言道&#xff0c;中年男人玩具有三宝 充电器、路由器、NAS 你问我NAS的魔力在哪里&#xff1f; 一机实现All in one洒洒水啦 那NAS又如何玩转虚拟机呢? 跟我来 0基础也能轻松get! NAS如何玩转虚拟机 铁威马NAS的VirtualBox的简单易用&#xff0c;可虚拟的系统包括Win…

C++编程函数中switch实例用法

switch语法 switch (func_cb.sta) switch后续跟随多个成对的case和break&#xff0c;分别包含if/endif判断语句 每个 case 后跟一个要比较的值和一个冒号&#xff0c;当被测试的变量等于 case 中的常量时&#xff0c;case下一行的语句将被执行 switch 语句可以嵌套。 嵌套时&am…

香橙派Kunpeng Pro深度测评:开发者的新选择

文章目录 前言&#xff1a;一、开发板外观与介绍1.接口介绍2.按键以及LED的介绍 二、开发板上电以及系统启动三、更新安装相关命令四、查看相关配置五、vim个性化配置六、开发板网络测试1.网口测试&#xff1a;2.WiFi模块测试&#xff1a; 七、扩展引脚功能测试1.TFTP传输文件2…

【JavaScript】P1 JavaScript 是什么、其组成

1.1 JavaScript 是什么 JavaScript 是一种运行在浏览器的编程语言&#xff0c;用于实现人机交互效果。其作用包含&#xff1a; 监听用户行为并指导网页做出反馈。针对表单数据进行合法性验证。获取后台数据&#xff0c;渲染到前端界面。服务器编程&#xff0c;最后端的事情&a…

大模型微调:Lora

原理图 原理&#xff1a;不改变原始大模型参数&#xff0c;只加入一个类似残差分支&#xff0c;先降纬再升纬&#xff0c;因为模型是过参数化的&#xff0c;它们有更小的内在维度&#xff0c;模型主要依赖于这个低的内在维度&#xff08;low intrinsic dimension&#xff09;去…

基于眼底增强的疾病感知蒸馏模型用于OCT图像的视网膜疾病分类

文章目录 Fundus-Enhanced Disease-Aware Distillation Model for Retinal Disease Classification from OCT Images摘要方法实验结果 Fundus-Enhanced Disease-Aware Distillation Model for Retinal Disease Classification from OCT Images 摘要 光学相干断层扫描&#xf…

【C++】模板的下一步,STL标准模板库的介绍

欢迎来到CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;模板的新玩法&#xff0c;STL标准模板库的介绍 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux &#x1f3c6;…

【qt】一次性学会所有对话框

对话框 一.前言二.文件对话框1.选择一个文件2.选择多个文件3.选择目录4.保存文件 三.颜色对话框1.获取颜色 四.字体对话框1.获取字体 五.输入对话框1.输入文本2.输入整数3.输入小数4.输入条目 六.消息对话框1.问题框2.信息框3.警告框4.危机框5.关于框6.关于qt框七.总结 一.前言…

芯片设计 | FPGA设计的各种仿真概念分析

前仿真,即功能仿真。 可使用专用于仿真的工具对设计进行功能仿真,以验证电路功能是否符合设计要求。 通过功能仿真能够及时发现设计中的错误,从而加快设计进度,提高设计的可靠性。 综合后的仿真 把综合生成的标准延时反标注到综合仿真模型去,可估计门延时带来的影响,…

Java核心: 使用asm操作字节码

在上一篇<Java核心: 注解处理器>中我们提到&#xff0c;通过实现AbstractProcessor&#xff0c;并调用javac -processor能够生成代码来实现特殊逻辑。不过它存在两个明显的问题: 只能新增源文件来扩展逻辑&#xff0c;无法修改现有的类或方法 必须有一个单独的编译过程&a…

【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言随机查询语…

首发AI新功能 贝锐向日葵远程控制IT精英版助力IT运维

从1947年晶体管发明开始&#xff0c;以计算机为核心载体的IT技术狂奔发展至今&#xff0c;这期间IT运维方式也在不断的发展变化。 我们经历了50s-70s的肉身更换电子管&#xff1b; 经历了80s-90s的本地软件运维&#xff1b; 经历了90s-00s互联网的澎湃发展&#xff0c;Telne…