数据结构和算法的基本概念和基本术语(数据,数据元素,数据项,数据对象)

news2024/10/5 17:24:58

目录

一、数据结构的研究内容

1.1学生信息管理系统

1. 2人机对弈问题

1. 3最短路径问题

二、基本概念和术语

2.1数据,数据元素,数据项,数据对象

2.1.1 数据(Data):

2.1.2 数据元素(Data Element):

2.1.3 数据项(Data Item):

2.1.4 数据对象(Data Object):

2.2数据结构的定义和层次

2.2.1数据结构的定义

2.2.2数据结构的层次

2.3数据类型和抽象数据类型

2.3.1数据类型(Data Type):

2.3.2抽象数据类型(Abstract Data Type,ADT) :

三、算法和算法分析

3.1算法的定义及特性

3.2评价算法优劣的基本标准


一、数据结构的研究内容

数据结构主要研究非数值计算问题,即程序设计中操作的对象,以及这些对象之间的关系和操作;非数学问题无法用数学方程建立模型,如下三个实例

1.1学生信息管理系统

查找每个学生的基本信息,需要对这张信息表进行查询,如查找学号为2020010102同学的专业,每个学生的基本信息记录按顺序排列,形成了一种线性序列,呈现线性关系的数据结构

1. 2人机对弈问题

计算机之所以能和人对弈是因为已经将对弈的策略在计算机中存储好,把对弈过程中所有可能发生的情况及相应的对策都加以考虑。

以最简单的井字棋为例,初始状态是一个空的棋盘格局。对弈开始后,每下一步棋,则构成一个新的棋盘格局,且相对于上一个棋盘格局的可能选择可以有多种形式,因而整个对弈过程就如同“一棵倒长的树”。在这棵“树”中,从初始状态(根)到某一最终格局(叶子)的一条路径,就是一次具体的对弈过程。

人机对弈问题的数学模型就是如何用树结构表示棋盘和棋子等,算法是博弈的规则和策略,这类数学模型称为“树”的数据结构。

1. 3最短路径问题

从城市A到城市D有多条线路,但每条线路的交通费不同,那么,如何选择一条线路,使得从城市A到城市D的交通费用最少呢?

可以把这类问题抽象为图的最短路径问题。如图所示,图中的顶点代表城市,有向边代表两个城市之间的通路,边上的权值代表两个城市之间的交通费。求解A到D的最少交通费用,就是要在有向图中A点(源点)到达D点(终点)的多条路径中,寻找一条各边权值之和最小的路径,即最短路径。

最短路径问题的数学模型是图结构,算法是求解两点之间的最短路径,这类数学模型称为“图”的数据结构。

二、基本概念和术语

2.1数据,数据元素,数据项,数据对象

2.1.1 数据(Data):

是客观事物的符号表示,是所有能输人到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。

2.1.2 数据元素(Data Element):

是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、记录等。数据元素用于完整地描述一个对象,如前一节示例中的一名学生记录,树中棋盘的一个格局(状态),以及图中的一个顶点等。

2.1.3 数据项(Data Item):

是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。

2.1.4 数据对象(Data Object):

是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0,±1,+2,…},字母字符数据对象是集合C={'A','B',…,Z' ,'a', 'b',…,'z'},学生基本信息表也可以是一个数据对象。由此可以看出,不论数据元素集合是无限集(如整数集),或是有限集(如字母字符集),还是由多个数据项组成的复合数据元素(如学生表)的集合,只要集合内的性质均相同,都可称之为一个数据对象。

2.2数据结构的定义和层次

2.2.1数据结构的定义

数据结构(Data Structure):是相互之间存在一种或多种特定关系的数据元系的集合,换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

2.2.2数据结构的层次

数据结构可分为逻辑结构存储结构,同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。

①逻辑结构

从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型
数据的逻辑结构有两个要素:一是数据元素(数据的基本单位);二是关系,关系是指数据元素间的逻辑关系。根据数据元素之间关系的不同特性,通常有四类基本结构:线性结构,树结构,图结构,集合结构,其中集合结构、树结构和图结构都属于非线性结构。

线性结构包括线性表、栈和队列(具有特殊限制的线性表,数据操作只能在表的一端或两端进行)、字符串(也是特殊的线性表,其特殊性表现在它的数据元素仅由一个字符组成)、数组(是线性表的推广,它的数据元素是一个线性表)、广义表(也是线性表的推广,它的数据元素是一个线性表,但不同构,即或者是单元素,或者是线性表)。非线性结构包括树(具有多个分支的层次结构)和二叉树(具有两个分支的层次结构)、有向图(一种图结构,边是顶点的有序对)和无向图(另一种图结构,边是顶点的无序对)。如图所示:

②存储结构

数据对象在计算机中的存储表示称为数据的在储结构,也称为物理结构。把数据对象存储到计算时,通常要求既要存储各数据元素的数据,又要存储数据元素之间的逻辑关系,数据元素在计算机内用一个结点来表示。数据元素在计算机中有两种基本的存储结构,分别是顺序存储结构链式存储结构

(1)顺序存储结构

顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
对于前面的“学生基本信息表”,假定每个结点(学生记录)占用50个存储单元,数据从0号单元开始由低地址向高地址方向存储,对应的顺序存储结构如图所示:

(2)链式存储结构

为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。

2.3数据类型和抽象数据类型

2.3.1数据类型(Data Type):

是一个值的集合和定义在这个值集上的一组操作的总称。数据类型是高级程序设计语言中的一个基本概念,前面提到过顺序有储结构可以借助程序设计语言的数组类型描述,链式存储结构可以借助指针类型描述,所以数据类型和数据结构的概念密切相关。

在程序设计语言中,每一个数据都属于某种数据类型。类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。例如,C语言中的整型变量,其值集为某个区间上的整数(区间大小依赖于不同的机器),定义在其上的操作为加、减、乘、除和取模等算术运算;而实型变量也有自己的取值范围和相应运算,比如取模运算是不能用于实型变量的。程序设计语言允许用户直接使用的数据类型由具体语言决定,数据类型反映了程序设计语言的数据描术和处理能力。C语言除了提供整型、实型、字符型等基本类型数据外,还允许用户自定义各种类型数据。例如数组、结构体和指针等。

2.3.2抽象数据类型(Abstract Data Type,ADT) :

一般指由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象,数据对象上关系的集合,对数据对象的基本操作的集合。

抽象就是抽取出实际问题的本质。在计算机中使用二进制数来表示数据,在汇编语言中则可给出各种数据的十进制表示,它们是二进制数据的抽象,使用者在编程时可以直接使用,不必考虑实现细节。在高级语言中,则给出更高一级的数据抽象,出现了数据类型,如实型、字符型等,可以进一步利用这些类型构造出线性表、栈、队列、树、图等复杂的抽象数据类型。

三、算法和算法分析

3.1算法的定义及特性

算法(Algorithm):是为了解决某类问题而规定的一个有限长的操作序列。

一个算法必须满足以下五个重要特性:
(1)有穷性:一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。

(2)确定性:对于每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,使算法的执行者或阅读者都能明确其含义及如何执行。

(3)可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。

(4)输入:一个算法有零个或多个输入。当用函数描述算法时,输入往往是通过形参表示的,在它们被调用时,从主调函数获得输入值。
(5)输出:一个算法有一个或多个输出,它们是算法进行信息加工后得到的结果,无输出的算法没有任何意义。当用函数描述算法时,输出多用返回值或引用类型的形参表示。

3.2评价算法优劣的基本标准

(1)正确性:在合理的数据输入下,能够在有限的运行时间内得到正确的结果。

(2)可读性:一个好的算法,首先应便于人们理解和相互交流,其次才是机器可执行性。可读性强的算法有助于人们对算法的理解,而难懂的算法易于隐藏错误,且难于调试和修改。

(3)健壮性:当输入的数据非法时,好的算法能适当地做出正确反应或进行相应处理,而不会产生一些莫名其妙的输出结果。

(4)高效性:高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效率高,可以用时间复杂度来度量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度和空间复杂度是衡量算法的两个主要指标。

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

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

相关文章

关于elasticsearch一些基本操作

哈喽~大家好,这篇来看看关于elasticsearch一些基本操作。 🥇个人主页:个人主页​​​​​ 🥈 系列专栏: 【微服务】 🥉与这篇相关的文章: SpringCloud Se…

Import语句基础

1 问题 在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。 2 方法 1.import导入声明可分为两种: 1&a…

【每日一道智力题】之 轮流取石子(简单的尼姆博弈)

题目:一共有N颗石子(或者其他乱七八糟的东西),每次最多取M颗最少取1颗,A,B轮流取,谁最后会获胜?(假设他们每次都取最优解)。解答:结论&#xff1a…

告诉大家几个好用的功能

功能一:打开通知面板/月历面板 WinN的作用是调出通知面板,由于Windows 11将月历与通知面板合在了一起,因此它的另一项功能,就是——打开月历。 功能二:WindowsW:启用小组件面板 如果我们需要用到系统自带的小组件&am…

WC2023游记

今年,我势必打破铜牌魔咒 Day -?~? 虽然已年及高二,但WC的讲课还是没有听懂多少,这段时间,北师大还有一名E队来我校训练,我只能感慨:“如果一个选手比你强,还比你小,那你就再也打…

51 种 AI 工具,生活、编程、内容创建都应该使用它

AI 正在席卷全球 🔥🔥🔥 它具有无限的潜力,并将改变我们的生活,让生活变得更美好。这项技术将迅速改进,您今天可以使用许多工具来提高您的工作效率,帮助您完成工作,为您提供有关许多…

单网口ubuntu主机配置virt-manager传统桥接bridge网络

单网口ubuntu主机配置virt-manager传统桥接bridge网络 虚拟机的网络桥接bridge模式往往需要物理宿主机有两个网口,一个网口1连接外网配置ip,另一个网口2空闲不配置ip,在virt-manager里配置虚拟机的网卡绑定网口2,从而实现虚拟机桥…

81.门控循环单元(GRU)以及代码实现

1. 关注一个序列 做RNN的时候,处理不了太长的序列,因为把整个序列信息全部放在隐藏状态中,所有东西都放进去,当时间步很长的话,隐藏状态就会累积太多东西,就可能对很前面的信息不那么容易抽取出来了。 所…

Aftermath:一款针对macOS的免费开源事件响应框架

关于Aftermath Aftermath是一款针对macOS的事件响应框架,该工具基于Swift语言开发,是一款完全免费且开源的网络安全事件响应框架。 在Aftermath的帮助下,广大研究人员可以轻松收集并分析受感染主机的数据。除此之外,在理想情况下…

“深度学习”学习日记。误差反向传播法--Affine/Softmax层的实现

2023.1.17 Affine层: 在神经网络的正向传播中,为了计算加权信号的总和,使用矩阵乘积运算。 比如: import numpy as npx np.arange(6).reshape(2, 3) # (2,3) w np.arange(6).reshape(3, 2) # (3,2) b np.arange(4).resha…

LeetCode083_83. 删除排序链表中的重复元素

LeetCode083_83. 删除排序链表中的重复元素 一、描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2&#xff1…

虚拟机或Linux安装Nginx及本地指定虚拟机域名

安装必要工具和依赖 yum -y install wget gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel -----------------------------------废话开始------------------------------------------------- 上面这句话的意思:以下当废话 yum ---在线安装命令 inst…

82.长短期记忆网络(LSTM)以及代码实现

1. 长短期记忆网络 忘记门:将值朝0减少输入门:决定不是忽略掉输入数据输出门:决定是不是使用隐状态 2. 门 3. 候选记忆单元 4. 记忆单元 5. 隐状态 6. 总结 7. 从零实现的代码 我们首先加载时光机器数据集。 import torch from torch imp…

基于python手撕实现BP 神经网络实现手写数字识别(不调库,附完整版本代码)

本项目使用python实现全连接网络和梯度优化 方向传播并且实现了 手写数字识别项目: 神经网络 model 先介绍个三层的神经网络,如下图所示输入层(input layer)有三个 units( 为补上的 bias,通常设为 1)

安卓影像飞升时刻:vivo X90 Pro+打通HDR任督二脉

在手机产业中,大多数人会有一种刻板印象:一项新技术/功能,苹果发布会上展示意味着已经成熟,具有很高的产品完成度,好用且有效;而安卓厂商在发布会上展示出的一些炫酷技术,往往还需要时间观望&am…

多目标建模算法PLE

1. 概述 在现如今的推荐系统或者搜索中,都存在多个目标,多目标的算法在现如今的系统中已然成为了标配。在多目标的建模过程中,如果不同的学习任务之间较为相关时,多个任务之间可以共享一部分的信息,这样最终能够提升整…

Vue7-el和data的两种写法

1.el的两种写法 1创建Vue实例的时候通过el指定属性 2. 创建Vue实例之后,通过vm.$mount(#demo)进行挂载 console.log(v):此处的v是Vue的实例对象 在往下看__proto__属性,这里是Vue构造类的方法,其中的方法vue实例都可以使用,比如$…

Spring cache整合Redis详解 动态设置失效时间

文章目录1.spring cache简介2.spring cache集成redis3.spring cache与redisTemple统一格式4.SpEL标签5.Cacheable注解实现6.CachePut注解实现7.CacheEvict注解实现8.Caching注解实现9.自定义key生成器KeyGenerator10.自定义前缀CacheKeyPrefix11.多个CacheManager实现不同失效时…

【微信小程序】收藏功能的实现(条件渲染、交互反馈)

🏆今日学习目标:第十九期——收藏功能的实现(条件渲染、交互反馈) 😃创作者:颜颜yan_ ✨个人主页:颜颜yan_的个人主页 ⏰预计时间:35分钟 🎉专栏系列:我的第一个微信小程序 文章目录…

django框架

目录简介MVC与MTV模型MVCMTV创建项目目录生命周期静态文件配置(无用)启动django[启动](https://www.cnblogs.com/xiaoyuanqujing/articles/11902303.html)路由分组无名分组有名分组路由分发反向解析反向解析结合分组名称空间re_path与path自定义转换器视…