【全面突击数据结构与算法001】绪论篇,数据结构的基本概念

news2025/1/11 18:05:17

🍁前言

👑:👉CSDN丨博客园

🏆:👉在下周周ovoの社区

💎全栏:👉数据结构与算法专栏

PS:本篇文章主要综合了【王道数据结构与算法】与我的个人笔记与理解,如果文章有任何错误欢迎各位大佬的指出

快期末考试了,复习一波,冲冲冲

文章目录

🍁前言

🍁一、基本概念和术语

💎1.1、数据

💎1.2、数据元素、数据项

💎1.3、数据对象、数据类型、数据结构

​编辑

🍁二、数据结构的三要素

💎2.1、数据的逻辑结构

💎2.2、数据的存储结构

💎2.3、数据的运算

🍁三、 算法和算法的评价

💎3.1、算法的基本概念

​编辑

💎3.2、算法效率的度量

⚡3.2.1、时间复杂度

​编辑

⚡3.2.2、空间复杂度


🍁一、基本概念和术语

💎1.1、数据

数据是指事实、信息或知识等在计算机中的表现形式,是一种离散的、数字化的描述。数据通常以二进制形式存储在计算机的内存或硬盘中,它们可以被计算机程序读取、处理和操作,从而实现各种功能和应用。在计算机科学中,数据是非常重要的基础概念,其在各种应用领域中都有广泛的应用。

💎1.2、数据元素、数据项

数据元素是指数据的基本单位,通常是指一个整体。而数据项则是数据元素中的一个个体,通常是数据元素中最小的单元。因此,数据元素由若干个数据项组成。

例如:

以一个学生信息的数据结构为例,一个学生的信息就是一个数据元素,它包含了学生的姓名、学号、年龄等多个数据项,每个数据项分别表示学生的不同属性。因此,可以说数据项是数据元素的组成部分,而数据元素则是数据项的集合。

💎1.3、数据对象、数据类型、数据结构

数据对象:是指计算机中用来表示某种事物的实体,可以是具体的实物或抽象的概念。在计算机中,数据对象通常以数据元素的形式出现,一个数据对象由若干个数据元素组成。在一个学生信息管理系统中,一个学生就是一个数据对象,包含了学生的姓名、学号、年龄等多个属性,每个属性都可以看作是一个数据元素。

数据类型:数据类型是对数据对象的一种分类,是计算机科学中一个重要的概念。不同类型的数据对象在计算机内部需要不同的存储方式和处理方法。例如,整数、浮点数、字符串等都是不同的数据类型。

数据结构:是指计算机中存储和组织数据的方式,是一种数据类型的具体实现。数据结构可以通过不同的方式来表示数据对象,包括数组、链表、树等。不同的数据结构在计算机内部的存储方式和操作方法也不同,可以根据实际需要来选择合适的数据结构。

🍁二、数据结构的三要素

💎2.1、数据的逻辑结构

数据的逻辑结构指的是数据元素之间的关系,是数据在逻辑上的组织方式。它与数据的物理结构是不同的,物理结构指的是数据在计算机内部的存储方式。

常见的数据逻辑结构包括:

1. 线性结构:数据元素之间呈线性关系,每个数据元素只有一个直接前驱和一个直接后继。例如,线性表、栈、队列等数据结构都是线性结构。

2. 非线性结构:数据元素之间呈非线性关系,每个数据元素可能有多个直接前驱或直接后继。例如,树、图等数据结构都是非线性结构。

3. 集合结构:数据元素之间没有任何关系,它们之间是独立的。例如,数组就是一种集合结构。

4. 文件结构:数据元素之间存在某种关联关系,通常是通过某个共同的特征来关联。例如,数据库中的关系型数据就是一种文件结构。

5、树形结构:结构中的数据元素存在一对多的情况

6.图形结构或网状结构:结构中的数据元素存在多对多的情况

在实际应用中,根据问题的特点和需求,选择合适的数据逻辑结构是非常重要的,它能够直接影响数据处理的效率和正确性。

💎2.2、数据的存储结构

数据的存储结构是指在计算机内部,数据在存储介质中的具体存储方式,可以分为以下几种常见的存储结构:

1. 顺序存储结构:数据元素按照其逻辑顺序在存储介质上连续存储,可以通过元素在存储介质上的物理位置来访问元素。顺序存储结构通常用于存储连续的数据,如数组和线性表等。

2. 链式存储结构:数据元素在存储介质上不连续,每个元素保存着下一个元素的地址,通过遍历链表中的元素来访问链表。链式存储结构通常用于存储不连续的数据,如链表、树和图等。

3. 索引存储结构:数据元素分别存储在存储介质的不同位置,通过索引表来访问这些元素,索引表中保存着每个元素在存储介质中的位置。索引存储结构通常用于数据元素较大或数据元素的数量较大的情况。

4. 散列存储结构数据元素存储在散列表中,每个元素对应一个关键字,通过哈希函数将关键字映射为元素在散列表中的地址,从而实现对元素的访问。散列存储结构通常用于实现快速的数据查找和插入操作,如哈希表等。

💎2.3、数据的运算

数据的运算是指对数据进行的各种操作,包括查找、排序、插入、删除、修改等。不同的数据结构支持不同的数据运算,数据运算也是数据结构的最终目的之一。

以下是常见的几种数据运算:

1. 查找:在数据集合中查找指定元素的位置或者判断该元素是否存在。常见的查找算法有线性查找、二分查找、哈希查找等。

2. 排序:将数据集合按照一定的规则排序,使其按照某种顺序排列。常见的排序算法有冒泡排序、快速排序、归并排序等。

3. 插入:将一个元素插入到数据集合中的指定位置。常见的插入算法有直接插入排序、折半插入排序、希尔排序等。

4. 删除:将数据集合中指定位置的元素删除。常见的删除算法有直接删除、移动删除、标记删除等。

5. 修改:修改数据集合中指定位置的元素。例如,修改一个学生的成绩或者修改一个商品的价格等。

🍁三、 算法和算法的评价

💎3.1、算法的基本概念

算法是指解决特定问题的一系列清晰而有限的指令集合,它描述了一个计算过程,能够把一个初始状态转变成所需的最终状态。算法可以用来求解各种问题,例如排序、搜索、最短路径等。

算法具有以下几个基本概念:

1. 有限性:算法必须在有限步内结束,不能无限循环或递归

2. 确定性:算法的每一步必须明确而无歧义,执行结果唯一

3. 可行性:算法必须能够在计算机或者其他可执行设备上实现。

4. 输入:算法需要接受输入数据,这些数据可能是预处理的、用户输入的或者从其他系统获取的。

5. 输出:算法必须产生输出结果,这些结果可能是打印、显示、存储等形式。

6. 无误性:算法必须能够正确地解决问题,无论输入数据是什么,都能够得到正确的结果。

算法是计算机科学中的核心概念之一,是计算机程序设计的基础。

好的算法应该考虑达到下面这几个目标:

1. 正确性(Correctness):算法应该能够正确地解决问题,无论输入数据是什么,都能够得到正确的结果。

2. 可读性(Readability):算法应该易于理解和阅读,便于他人理解和维护。代码应该注重命名、缩进、注释等方面的规范化和可读性。

3. 高效性(Efficiency):算法应该具有高效的执行速度和内存占用,能够在可接受的时间内完成运算。

4. 健壮性(Robustness):算法应该能够在各种不同情况下都能够正确地运行,避免因异常或无效输入导致程序崩溃或出现错误。

5. 可扩展性(Scalability):算法应该能够适应不同规模和复杂度的问题,随着数据规模增大而不失效率。

这些目标是设计和实现好的算法时需要考虑的关键因素。一个好的算法应该能够在正确性、可读性、高效性、健壮性和可扩展性等方面达到一个良好的平衡,从而满足问题需求并提高程序的性能和可靠性。

💎3.2、算法效率的度量

算法效率的度量通常使用时间复杂度和空间复杂度来描述。

特别注意:

在算法设计中,原地工作(in-place)指的是一种特殊的算法实现方式,它能够在不使用额外的辅助空间(除了常数大小的辅助空间)的情况下,在原始数据上进行计算和修改。

如果一个算法被称为是“原地工作”的,只有该算法只使用了与输入数据规模无关的额外辅助空间。这种算法实现方式可以有效地减少空间复杂度,并且避免不必要的空间浪费,特别适用于在嵌入式系统和其他资源受限环境中的应用场景。

但是、并非所有的算法都可以或者需要原地工作。某些问题可能需要构造新的数据结构,而不得不使用额外的辅助空间,才能更加高效地解决问题。因此,在选择算法实现方式时,需要综合考虑时间复杂度、空间复杂度、实际应用场景等多个方面的因素。

总结下:原地工作是一种重要的算法设计思想,它可以帮助我们优化算法性能和节约资源开销。

⚡3.2.1、时间复杂度

时间复杂度是用来描述算法执行时间与输入规模之间关系的度量,它是指算法的运行时间随着问题规模的增加而增加的速度。在进行算法分析时,我们通常关注最坏情况下的时间复杂度,即算法在最坏情况下执行所需的最长时间。

时间复杂度通常用大 O 记号来表示,记为 O(f(n)),其中 n 表示输入规模,f(n) 是一个随着 n 增大而增加的函数。O 表示算法的时间复杂度,f(n) 表示随着输入规模 n 的增大,算法所需要的计算量也随之增加,但增加的速度最终被 f(n) 控制。

举个栗子:

若一个算法的时间复杂度为 O(n),则表示当输入规模 n 增大时,该算法执行所需的计算量随之线性增长。如果输入规模增加一倍,那么算法执行所需的时间也会增加一倍

若算法的时间复杂度为 O(n^2),则表示该算法执行所需的计算量随着输入规模的平方级别增加,如果输入规模增加一倍,那么算法执行所需的时间就会增加四倍。

时间复杂度是衡量算法效率的重要指标,一般来说,时间复杂度越小的算法效率越高。但在实际应用中,我们还需要考虑空间复杂度、代码的可读性和可维护性等因素来综合评估算法的优劣。

例子:

 

 重点部分:

⚡3.2.2、空间复杂度

空间复杂度是指算法在执行过程中需要占用的内存空间大小,通常用数据占用的存储单元数量来表示。和时间复杂度一样,空间复杂度也是衡量算法效率的一个重要指标。

空间复杂度的计算方法与时间复杂度类似,都是通过分析算法执行过程中所需的存储空间与输入规模之间的关系来确定的。我们通常关注的是算法在最坏情况下的空间复杂度,即算法在存储最多数据时所需的最大存储空间。

空间复杂度也通常用大 O 记号来表示,记为 O(f(n)),其中 n 表示输入规模,f(n) 是一个随着 n 增大而增加的函数。与时间复杂度类似,空间复杂度越小的算法所占用的内存空间越少,效率越高。

需要注意的是,在实际应用中,我们往往需要在时间复杂度和空间复杂度之间进行权衡,找到一个平衡点来满足实际需求。有些算法可能时间复杂度比较高,但空间复杂度比较低;有些算法则相反。因此,我们需要根据具体问题的特点来选择合适的算法。

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

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

相关文章

【架构基础】简单设计原则

简单设计来源于极限编程(ExtremeProgramming,简称XP)。XP是由KentBeck在1996年提出的,是一种软件工程方法学,是敏捷软件开发中最富有成效的几种方法学之一。XP存在四个核心实践:TDD(Test-Driven…

Lecture 6 Sequence Tagging: Hidden Markov Models

目录 Problems with POS Tagging 词性标注的问题Probabilistic Model of HMM HMM的概率模型Two Assumptions of HMM HMM的两个假设Training HMM 训练HMMMaking Predictions using HMM (Decoding) 使用HMM进行预测(解码)Viterbi AlgorithmHMMs in Practic…

地震勘探基础(五)之地震资料数字处理

地震资料数字处理 地震勘探主要包括地震资料野外采集,地震资料数字处理和地震资料地质解释三大部分。其中地震资料数字处理需要利用高性能的超级计算机和先进的处理软件系统。地震资料的质量和成像精度直接决定了油、气勘探的成功率。 地震资料数字处理的主要目的…

快速解读GC日志

本文介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息。我们通过 -XX:UseSerialGC 选项,指定JVM使用串行垃圾收集器, 并使用下面的启动参数让 JVM 打印出详细的GC日志: -XX:PrintGCDetails -XX:PrintGCDateStamps -XX:PrintGCTimeStamps 这样配置以后&#xff…

postgreSQL/kingbase limit分页查询,结果乱序

postgres/kingbase limit分页查询,结果乱序 现象排查总结解决办法1.session中关闭synchronize_seqscans2.查询时带上order by 现象 我使用kingbase8,使用select * from xx limit 0,1000 每次查出来的结果都不一样。 排查 1.由于kingbase的文档较少&am…

Zinx框架学习 - 读写协程分离

Zinx - V0.7 读写协程分离 之前connection使用StartReader对客户端的数据接下来我们就要对Zinx做⼀个⼩⼩的改变,就是与客户端进修数据交互的Gouroutine由⼀个变成两个,⼀个专⻔负责从客户端读取数据,⼀个专⻔负责向客户端写数据。这么设计有…

Vue3 | Element Plus resetFields不生效

Vue3 | Element Plus resetFields不生效 1. 简介 先打开创建对话框没有问题&#xff0c;但只要先打开编辑对话框&#xff0c;后续在打开对话框就会有默认值&#xff0c;还无法使用resetFields()重置。 下面是用来复现问题的示例代码和示例GIF。 <script setup> import…

javascript基础二十一:说说你对BOM的理解,常见的BOM对象你了解哪些?

一、是什么 BOM (Browser Object Model)&#xff0c;浏览器对象模型&#xff0c;提供了独立于内容与浏览器窗口进行交互的对象 其作用就是跟浏览器做一些交互效果,比如如何进行页面的后退&#xff0c;前进&#xff0c;刷新&#xff0c;浏览器的窗口发生变化&#xff0c;滚动条…

Redis入门到实战笔记-Java客户端

这里写目录标题 哪些好用的客户端Jedis连接池 Spring Data Redis依赖修改默认序列化方式修改序列化代码&#xff1a;反序列化方式 哪些好用的客户端 Jedis 依赖&#xff1a; <dependency><groupId>redis.clients</groupId><artifactId>jedis</artif…

原来!自动化测试项目--的完整测试流程是这样的……

目录 需求分析&#xff1a; 整体流程图&#xff1a; 分析流程&#xff1a; 测试设计&#xff1a; 测试分析&#xff1a; 测试设计&#xff1a; 用例设计&#xff1a; 用例执行和回归 用例执行标准 bug回归标准 补充用例 质量分析 bug定位 前端定位&#xff1a; …

Axios后端程序员快速入门简述

axios 它的底层是用了 XMLHttpRequest&#xff08;xhr&#xff09;方式发送请求和接收响应&#xff0c;xhr 相对于之前讲过的 fetch api 来说&#xff0c;功能更强大&#xff0c;但由于是比较老的 api&#xff0c;不支持 Promise&#xff0c;axios 对 xhr 进行了封装&#xff0…

qt5.15.2 配置 android

第一步 安装jdk&#xff0c;最好安装 jdk11&#xff0c;因为他是与qt5.15.2这个能匹配上的 右击电脑&#xff0c;选择属性&#xff0c;选择高级系统设置&#xff0c;选择环境变量。 点击新建&#xff0c;变量名为JAVA_HOME,变量值为java安装的路径。我的如下图 JAVA_HOME D:\P…

Lecture 4 Text Classification

目录 Classification 分类Text Classification Tasks 文本分类任务Topic Classification 主题分类Sentiment Analysis 情感分析Native-Language Identification 母语识别Natural Language Inference 自然语言推理 Building a Text Classifier 构建文本分类器Choosing a Classif…

JDK、Tomcat、Redis、MySQL集齐,教你如何搭建高效性能测试项目!

目录 前言&#xff1a; 1. JDK 的安装 2. Tomcat 的安装 3. Redis 环境搭建 4. 数据库的安装 5. WEB 项目搭建 6. 性能测试 7. 总结 前言&#xff1a; 作为一个软件工程师&#xff0c;怎能不知道如何搭建一个性能测试项目呢&#xff1f;性能测试是一个软件工程师不可或…

【Python从入门到进阶】23.urllib使用post请求百度翻译

接上篇《22、urllib库基本使用》 上一篇我们介绍了实现爬虫的必备基础——urllib库的学习。本篇我们来使用urllib实现百度翻译的效果。 一、在线翻译服务 当我们需要翻译一段文字时&#xff0c;百度翻译是一个很常用的工具。它是由百度公司开发的一款在线翻译服务&#xff0c…

k8s pv与pvc

1.前言 PV 是 Kubernetes 集群中的一种资源对象&#xff0c;它代表着一块物理存储设备&#xff0c;例如磁盘、网络存储或云存储等。PV 可以被多个 Pod 共享&#xff0c;并且可以独立于 Pod 存在。PV 可以配置不同的访问模式 (Access Modes)&#xff0c;例如 ReadWriteOnce、Re…

传输优化是非谈

曾倾向于优化异常流的做法竟然最保守&#xff0c;异常是小概率事件&#xff0c;处理它只保障可用性&#xff0c;而不是优化性能&#xff0c;恰恰需要加速大概率的正常流处理&#xff0c;数据中心传输优化投入大量精力在丢包检测和重传上的思路需重估。 为 1% 的可能性而增加的…

uniapp注册模板

注册模板 学生注册 <template><view class"content"><uni-forms ref"from" :modelValue"formData"><uni-forms-item label"学号" name"num" :rules"[{required: true,errorMessage: 学号不能为…

华为OD机试真题 Java 实现【比赛评分】【2023 B卷 100分】,附详细解题思路

一、题目描述 一个有N个选手参加比赛&#xff0c;选手编号为1~N&#xff08;3<N<100&#xff09;&#xff0c;有M&#xff08;3<M<10&#xff09;个评委对选手进行打分。打分规则为每个评委对选手打分&#xff0c;最高分10分&#xff0c;最低分1分。 请计算得分最…

OpenMMLab-AI实战营第二期——3.基于RTMPose的耳朵穴位关键点检测(Colab+MMPose)

文章目录 1. Colab和Google云端硬盘1.1 建立项目文件和jupyter文件1.2 Colab运行时选择1.3 关联Colab中的文件和Google云端硬盘的文件 2. Colab和MMPose2.1 环境配置2.2 配置文件修改 3. Colab相关知识 1. Colab和Google云端硬盘 参考&#xff1a; 利用Colab上的TPU训练Keras…