【数据结构】绪论

文章目录

  • 开篇:数据结构的学习之路
  • 1、开篇_数据结构在学什么
  • 2、数据结构的基本概念
    • 数据
    • 数据元素、数据项
    • 数据结构、数据对象
    • 数据类型、抽象数据类型
    • 数据结构的三要素
      • 逻辑结构
      • 数据的物理结构(存储结构)
      • 数据的运算
    • 最后总结内容
  • 3、算法的基本概念
    • 算法的特性
    • 好算法的拥有的特点
  • 4、算法的时间复杂度(重点)
  • 5、算法的空间复杂度(重点)
  • 总结:拓展视野,掌握精髓


开篇:数据结构的学习之路

提示:这里可以添加本文要记录的大概内容:

在计算机科学和软件工程领域,数据结构和算法是构建高效、可靠和优质软件的基石。无论是编写简单的脚本还是开发复杂的应用程序,都需要深入理解数据结构和算法的基本概念以及它们的应用。本篇博客将带领读者探索数据结构和算法的学习之旅,从基本概念到时间复杂度和空间复杂度的深入讨论,为读者提供系统的学习指南和实用的知识技能。

提示:以下是本篇文章正文内容,下面案例可供参考

内容学习来自王道考研书籍和网课!!!!

1、开篇_数据结构在学什么

关于数据结构在学什么?可以总结为两句话

  • 如何用程序代码把现实世界的问题信息化
  • 如何用计算机高效地处理这些信息从而创造价值

其他的内容不是重点,作为科普和理解,具体大家可以去b站看看前面绪论的课就行

2、数据结构的基本概念

在这里插入图片描述
学习建议:概念多,比较无聊。抓大放小,重要的是形成框架,不必纠结于细节概念

数据

数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别
和处理的符号的集合
数据是计算机程序加工的原料。

数据元素、数据项

数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
一个数据元素可由若干数据项组成数据项是构成数据元素的不可分割的最小单位

图解:
在这里插入图片描述
在这里插入图片描述

数据结构、数据对象

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
在这里插入图片描述

数据类型、抽象数据类型

数据类型是一个值的集合和定义在此集合上的一组操作的总称。
1)原子类型。其值不可再分的数据类型。
在这里插入图片描述

2)结构类型。其值可以再分解为若干成分(分量)的数据类型。
在这里插入图片描述
抽象数据类型(Abstract Data Type,ADT)是抽象数据组织及与之相关的操作。
在这里插入图片描述
总结就是,抽象数据类型只包括逻辑结构和运算操作,但是不存在具体的实现,可以理解为只是一个理论上的存在,但是是否能用代码实现就不可知了,所以是抽象的,不够具体!!!

数据结构的三要素

在这里插入图片描述

逻辑结构

在这里插入图片描述
集合:
在这里插入图片描述
线性结构:
在这里插入图片描述
树形结构:
在这里插入图片描述
图结构:
在这里插入图片描述

数据的物理结构(存储结构)

在这里插入图片描述
顺序存储:
在这里插入图片描述
链式存储:
在这里插入图片描述

索引存储:
在这里插入图片描述
散列存储:
在这里插入图片描述
顺序存储和非顺序存储
在这里插入图片描述
在这里插入图片描述

数据的运算

数据的运算——施加在数据上的运算包括运算的定义和实现运算的定义是针对逻辑结构的,
指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
在这里插入图片描述

最后总结内容

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3、算法的基本概念

在这里插入图片描述
在这里插入图片描述

算法的特性

  • 有穷性

在这里插入图片描述

  • 确定性

算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。(输出结果唯一,不能出现多个输出结果)

  • 可行性

算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

  • 输入

一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

  • 输出

一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

好算法的拥有的特点

在这里插入图片描述
好算法通常具有以下几个特性:

  1. 正确性(Correctness): 算法能够产生正确的输出结果,满足预期的需求和规范。

  2. 效率(Efficiency): 算法在有限的资源(如时间和空间)内能够高效地完成任务,不会消耗过多的计算资源。

  3. 可读性(Readability): 算法的实现清晰简洁,易于理解和维护,便于他人阅读和理解。

  4. 健壮性(Robustness): 算法能够在各种不同的输入情况下保持稳定性和正确性,不易出现异常或崩溃。

  5. 可扩展性(Scalability): 算法能够适应不同规模和复杂度的问题,具有良好的可扩展性和适应性。

  6. 通用性(Generality): 算法能够解决一类问题而不局限于特定的场景或数据,具有一定的普适性和适用性。

  7. 优雅性(Elegance): 算法设计简洁而优雅,使用了简单而有效的思想或技巧解决问题,避免了冗余和复杂性。

4、算法的时间复杂度(重点)

首先考虑一个问题,如果我们让算法先运行起来,事后统计运行时间是否可行???
在这里插入图片描述

因此算法时间复杂度采用的是事前预估
在这里插入图片描述

注意:由于时间问题,只给出关键的计算时间复杂度的方法!!!

通常情况下,通过计算语句频度来恒量时间开销和问题规模n的关系
在这里插入图片描述
但是,在实际中,我们通常会忽略影响较小的部分
在这里插入图片描述

通常,n都是取无穷,也就是在问题规模很大的情况下!!!
在这里插入图片描述

结论:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习:
在这里插入图片描述
在这里插入图片描述
总结:

一般都只考虑算法的最坏时间复杂度和平均时间复杂度,考虑最好时间复杂的意义不大
在这里插入图片描述在这里插入图片描述

5、算法的空间复杂度(重点)

空间开销
在这里插入图片描述
需要注意,算法原地工作的概念可能会考到!!!
在这里插入图片描述
只需关注存储空间大小与问题规模相关的变量
在这里插入图片描述
空间复杂度的计算和时间复杂度很相似
在这里插入图片描述

同样适用于加法规则
在这里插入图片描述

函数递归调用带来的内存开销
在这里插入图片描述
这种情况比较复杂一点,考的概率也要小很多
在这里插入图片描述
总结(通常来说,空间复杂的考查并不多,主要是考查时间复杂度):
在这里插入图片描述

总结:拓展视野,掌握精髓

数据结构和算法是计算机科学中最基础、最重要的概念之一,对于提升编程能力、解决实际问题至关重要。通过本文的学习,我们深入了解了数据结构的基本概念,理解了算法的基本原理,并重点关注了算法的时间复杂度和空间复杂度。这些知识不仅为我们提供了解决问题的方法和思路,也拓展了我们的计算机科学视野。在未来的学习和工作中,让我们继续努力,不断探索,不断提升,为自己的技术之路添砖加瓦。

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

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

相关文章

Linux 理解文件系统、磁盘结构、软硬链接

目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块(Data Blocks&a…

图像抠图DIS——自然图像中高精度二分图像抠图的方法(C++/python模型推理)

概述 DIS(Dichotomous Image Segmentation)是一种新的图像分割任务,旨在从自然图像中分割出高精度的物体。与传统的图像分割任务相比,DIS更侧重于具有单个或几个目标的图像,因此可以提供更丰富准确的细节。 为了研究…

Ubuntu20.04上,VTK9.3在QT5上的环境配置与开发测试

Ubuntu20.04上,VTK9.3在QT5上的环境配置与开发测试 1 背景介绍2 VTK9.3的编译安装2.1 安装ccmake 和 VTK 的依赖项:2.2 建立VTK编译文件夹并下载2.3 cmake配置VTK9.3的编译环境2.4 make编译安装VTK9.32.5 测试VTK安装是否成功 3 基于qmake的QT5的VTK9.3开…

异地共享文件如何设置?

在当今数字化时代,异地办公已成为常态,越来越多的企业和个人需要在不同地区间进行文件共享与访问。为了解决复杂网络环境下的远程连接问题,北京金万维科技有限公司推出了一款名为【天联】的异地组网内网穿透产品。 【天联】组网是一款由北京金…

python基础——语句

一、条件语句 就是 if else 语句 ! 代表不等于 代表等于if 关键字,判断语句,有“如果”的意思,后面跟上判断语句else 常和“if” 连用,有“否则”的意思,后面直接跟上冒号 …

qt学习第三天,qt设计师的第一个简单案例

3月25,应用qt设计师,手动设计界面形状 ​ 如何启动qt设计师,找到对应的安装地点,对应你自己安装的pyside6或其他qt的安装路径来找 ​ 应用qt设计师的优点是不用敲代码然后慢慢调节框框大小,位置等、可以直接修改…

TTS通用播放库技术设计

TTS音频播放库技术设计 目录介绍 01.整体介绍概述 1.1 项目背景介绍1.2 遇到问题1.3 基础概念介绍1.4 设计目标1.5 问题答疑和思考 02.技术调研说明 2.1 语音播放方案2.2 TTS技术分析2.3 语音合成技术2.4 方案选择说明2.5 方案设计思路2.6 文本生成音频 03.系统TTS使用实践 3…

JavaEE企业开发新技术4

2.16 模拟Spring IOC容器功能-1 2.17 模拟Spring IOC容器功能-2 什么是IOC? 控制反转,把对象创建和对象之间的调用过程交给Spring框架进行管理使用IOC的目的:为了耦合度降低 解释: 模仿 IOC容器的功能,我们利用 Map…

LLM - 大语言模型的指令微调(Instruction Tuning) 概述

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137009993 大语言模型的指令微调(Instruction Tuning)是一种优化技术,通过在特定的数据集上进一步训练大型语言模型(LLMs)&a…

【算法 高级数据结构】树状数组:一种高效的数据结构(二)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:算法题、 基础算法、数据结构~赶紧来学算法吧 💡往期推荐: 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定…

RTthread如何引入webclient和cjson来编写自己的模块代码||SecureCRT的安装与激活||安装VScode

目录 1.RTthread如何引入webclient和cjson来编写自己的模块代码 2.SecureCRT的安装与激活 3.static与const的区别 4.安装VScode 1.RTthread如何引入webclient和cjson来编写自己的模块代码 以我自己的工程为例: 首先将新引入的模块在applicatons下新建cpeinfo文件…

【MySQL】一条 SQL 查询语句在数据库中的执行流程 | SQL语句中各个关键字的执行顺序

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

知识图表示学习中的负抽样研究综述

摘要 知识图表示学习(KGRL)或知识图嵌入(KGE)在知识构建和信息探索的人工智能应用中起着至关重要的作用。这些模型旨在将知识图中的实体和关系编码到低维向量空间中。在KGE模型的训练过程中&#xff0c;使用正样本和负样本是区分的必要条件。然而&#xff0c;直接从现有的知识…

鸿蒙NXET实战:高德地图定位SDK【获取Key+获取定位数据】(二)

如何申请key 1、创建新应用 进入[控制台]&#xff0c;创建一个新应用。如果您之前已经创建过应用&#xff0c;可直接跳过这个步骤。 2、添加新Key 在创建的应用上点击"添加新Key"按钮&#xff0c;在弹出的对话框中&#xff0c;依次&#xff1a;输入应用名名称&…

Muduo类详解之EventLoop

最核⼼的部分就是 EventLoop 、 Channel 以及 Poller 三个类&#xff0c;其中 EventLoop 可以看作是对业务线程的封装&#xff0c;⽽ Channel 可以看作是对每个已经建⽴连接的封装&#xff08;即 accept(3) 返回的⽂件描述符&#xff09; EventLoop class EventLoop { p…

解决SLF4J: Class path contains multiple SLF4J bindings.

JDK版本&#xff1a;jdk17 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 SpringBoot 版本&#xff1a;v2.5.7 maven版本&#xff1a;3.6.3 文章目录 问题描述&#xff1a;原因分析&#xff1a;解决方案&#xff1a;参考资料&#xff1a; 问题描述&#xff1a; 当SpringBoot项目…

并发VS并行

参考文章 面试必考的&#xff1a;并发和并行有什么区别&#xff1f; 并发&#xff1a;一个人同时做多件事&#xff08;射击游戏队友抢装备&#xff09; 并行&#xff1a;多人同时处理同一件事&#xff08;射击游戏敌人同时射击对方&#xff09;

学习数据结构:算法的时间复杂度和空间复杂度

一、算法的复杂度 衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时间复杂度和空间复杂度。 时间复杂度主要衡量一个算法的运行快慢&#xff0c;而空间复杂度主要衡量一个算法运行所需要的额外空间。 算法的时间复杂度 算法中的基本操作的…

SAP BAS中Fiori开发的高阶功能(storyboard, navigation, guided development, variant)

1. 前言 在之前的几篇文章中&#xff0c;我介绍了SAP BAS的一些基本功能&#xff0c;包括账户申请&#xff0c;创建工作区&#xff0c;git的使用以及如何step-by-step去创建出你的第一个Fiori项目等等。在本篇中&#xff0c;我将进一步介绍一些在开发Fiori应用程序时会用到的高…

JAVA学习笔记19(面向对象编程)

1.面向对象编程 1.1 类与对象 1.类与对象的概念 ​ *对象[属性]/[行为] ​ *语法 class cat {String name;int age; }main() {//cat1就是一个对象//创建一只猫Cat cat1 new Cat();//给猫的属性赋值cat1.name "123";cat1.age 10; }​ *类是抽象的&#xff0c;…