【数据结构】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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

word如何创造新的格式标题

1 效果如下&#xff1a;&#xff08;标题命名默认音序排序&#xff09; 2 创建 选中自己喜欢的标题&#xff0c;修改字号字体&#xff0c;then 3 修改 注意要点如下&#xff1a; 后续&#xff1a;以上操作可能导致后续一级标题不能折叠二级标题&#xff0c;目录导航栏也不能…

Python代码:二十一、增加派对名单(二)

1、题目 描述 为庆祝驼瑞驰在牛爱网找到合适的对象&#xff0c;驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单&#xff0c;在检查的时候发现少了他最好的朋友“Allen”的名字&#xff0c;因为是最好的朋友&#xff0c;他想让这个名字出现在邀请列表的最前面…

zabbix监控mysql

一、mysql数据库监控的内容有 mysql的吞吐量 mysql的常规操作&#xff08;增删改查&#xff09; QPS&#xff08;Questions Per second:&#xff09;每秒能处理多少次请求数 TPS&#xff08;Transactions Per Second&#xff09;每秒查询处理的事务数 mysql库大小和表大小 监控…

网工必备的几种远程工具,教你使用

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 干网工这行&#xff0c;工具是必备的&#xff0c;不会用工具赋能工作的网工不是好网工&#xff01; 拥有一套…

java8以上版本

java9及其以上版本 一、JDK17 LTS 常用新特性1、switch语句的增强2、字符串拼接3、判断类型instanceof自动类型转换4、密封类 关键字 sealed permits5、record类6、优化空指针异常7、ZGC垃圾收集器 一、JDK17 LTS 常用新特性 1、switch语句的增强 在 Java 17中&#xff0c;sw…

怎么挑选骨传导耳机?精选六大选购技巧教你如何挑选

过去的两年里&#xff0c;骨传导耳机逐渐被大众的所熟知。可能毕竟长时间使用音量过大的传统入耳式耳机&#xff0c;多多少少会对我们的听力健康构成威胁。所以很多人就想找一款不伤耳朵的耳机。然后就了解到了骨传导耳机&#xff0c;所以就会延伸出这些问题——骨传导耳机好用…

PostgreSQL发展史

PostgreSQL是一个开源的对象-关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;其历史可以追溯到上世纪80年代。以下是对PostgreSQL发展史的深入解析&#xff1a; 1980年代&#xff1a;起源 1.Ingres 项目 1977年&#xff0c;Michael Stonebraker 和他的团队…

若依新增页面,在左侧显示菜单栏的页面,可点击

选择指定的某个目录下 菜单名称&#xff0c;路由地址&#xff0c;组件路径这几个是必填的&#xff0c;其他的暂时就不用管了。 菜单名称&#xff1a;就是显示到左侧目录中的名称。 路由地址&#xff1a;自定义&#xff0c;一般写页面名称就可以。 组件路径&#xff1a;根据前端…

页面加载不出来,报错[@umijs/runtime] load component failed

问题描述 页面加载不出来数据&#xff0c;一直在旋转&#xff0c;控制台输出内容如下&#xff1a; 原因分析&#xff1a; 之前页面是没有问题的&#xff0c;在写当前页面突然出现页面加载不出来&#xff0c;控制台报错&#xff0c;主要是页面引入了这行代码报错 import { …

M-A352AD在桥梁/建筑结构健康监测中的应用

钢筋混凝土的面世&#xff0c;使人类基建迈进了新的阶段&#xff0c;大规模的桥梁和高楼大厦拔地而起。随之而来的&#xff0c;就是对其安全的忧虑。因此&#xff0c;我们需要对其结构安全健康进行监测&#xff0c;以保证行恰当的维护和提前发现隐患。桥梁/建筑结构健康监测是以…

时空AI软件:地理信息与遥感领域的智慧引擎

在地理信息与遥感技术的广阔疆域&#xff0c;时空AI软件如同一颗璀璨新星&#xff0c;将时空信息与智能深度融合&#xff0c;驱动着地理信息分析、决策支持、环境监测、城市规划等领域的深刻变革。本文将深入剖析其技术核心、应用实例、未来趋势&#xff0c;探索时空AI软件如何…

elemnt ui 时间选择器。 当前日期往前推6个月以前的的不可选择

<div class"hengxiang"><div class"lefttitle titlesBt" style"color:#15a66a;"><div>建单起始日期</div><el-date-picker class"elinputs" type"date" placeholder"请输入起始日" v-…

InternLM2-Math-Plus全面升级,全尺寸最强的开源数学模型

总览 数学能力是大语言模型推理水平的重要体现。上海人工智能实验室在推出领先的开源数学模型InternLM2-Math的三个月之后对其进行了升级&#xff0c;发布了全新的 InternLM2-Math-Plus。升级后的 InternLM2-Math-Plus 在预训练和微调数据方面进行了全面的优化&#xff0c;显著…

从零开始:如何集成美颜SDK和优化美颜接口

今天&#xff0c;小编将从零开始&#xff0c;详细讲解如何集成SDK并优化美颜接口。 一、选择合适的美颜SDK 评估SDK的功能 在评估过程中&#xff0c;可以通过阅读官方文档、查看示例代码以及实际测试来确定SDK是否符合需求。 兼容性和性能 确保其支持你开发的应用平台&…

ADC模数转换器的简介及参数详解

ADC全称是Analog-to-Digital Converter模数转换器&#xff0c;一般我们把模拟信号(Analog signal) 用A来进行简写&#xff0c;数字信号(digital signal) 用D来表示。是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。 今天我们主要说ADC的参数&#xff0c;我们把…

android studio 导入github里的项目后提示:Add Configuration

原文链接&#xff1a;https://blog.csdn.net/weixin_45677723/article/details/125940912 从github上面clone项目&#xff0c;出现下图问题&#xff1a; 解决问题&#xff1a; 我这个的情况是因为多文件嵌套了&#xff0c;我用Android Studio打开的是A文件&#xff0c;而B项…

定个小目标之每天刷LeetCode热题(2)

今天刷的是这题&#xff0c;属于中等题&#xff0c;我是直接看的题解&#xff0c;官方给出了两种方法 第一种是递归&#xff0c;直接看代码吧 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root p || root q || roo…

Windows环境下Maven3.5.4下载和配置详细图文教程

1、 前言&#xff1a;有了maven这个仓库&#xff0c;我们就少为包之间的冲突烦恼了。 2、 说明&#xff1a;版本&#xff1a;Maven3.5.4 3、 官网下载地址如下http://maven.apache.org/download.cgi&#xff0c;点这里下载&#xff08;如果版本更新&#xff0c;在这里可以找到…

香橙派Kunpeng Pro性能测评:高效能小型服务器开发板的全面体验

香橙派 Kunpeng Pro 是一款面向开发者和教育市场的高性能单板计算机&#xff0c;其搭载了鲲鹏处理器&#xff0c;可提供 8TOPS INT8 计算能力&#xff0c;提供了 8GB 和 16GB 两种内存版本&#xff0c;开发板结合了鲲鹏全栈根技术&#xff0c;全面使能高校计算机系统教学和原生…

张驰咨询:六西格玛培训,IT界的“福尔摩斯”

六西格玛&#xff0c;这个曾以制造业为背景的管理理念&#xff0c;如今却在IT领域大放异彩。其背后的原因&#xff0c;不仅仅是因为六西格玛追求零缺陷、持续改进的核心价值观与IT行业对产品质量和用户体验的极致追求不谋而合&#xff0c;更是因为它提供了一种全新的思维方式和…