考研数据结构-绪论

news2025/2/25 15:51:33

绪论

文章目录

  • 绪论
  • 1. 什么是数据结构
  • 2. 基本概念
    • 数据结构的四类基本结构(逻辑结构)
    • 存储结构
      • 顺序存储和链式存储比较分析
  • 3. 算法
    • 概念
    • 特征
    • 优点(也是要求)
    • 算法效率的度量
      • 概念
      • 时间复杂度
      • 空间复杂度(了解)

1. 什么是数据结构

数据结构是一门研究数据的逻辑结构和物理结构以及它们之间关系的学科,也是计算机科学的一个重要分支。

数据结构的目的是为了更高效地存储和处理数据,从而提高计算机的性能和功能。

2. 基本概念

数据结构有以下几个基本概念:

  • 数据

    数据是对客观事物的符号表示,在计算机科学中,是指所有能够输入到计算机中并被计算机程序处理的符号的总称。

  • 数据元素

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

  • 数据对象

    数据对象是性质相同的数据元素的集合,是数据的一个子集。

  • 数据类型

    数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

    • 数据类型分为原子类型和结构类型

      原子类型是不可再分解的基本类型,如整型、字符型、布尔型等;

      结构类型是由若干个类型组成的复合类型,如数组、集合等。

  • 抽象数据类型

    抽象数据类型(Abstract Data Type,ADT)是指一个数学模型和定义在该模型上的一组操作。抽象数据类型体现了数据抽象的思想,即把数据的逻辑结构和操作与具体实现相分离,只暴露出必要的接口,隐藏内部细节。抽象数据类型可以用以下格式描述:

ADT 抽象数据类型名{
    数据对象:<数据对象的定义>
    数据关系:<数据关系的定义>
    基本操作:<基本操作的定义>
        操作名(<参数表>):操作说明
        初始条件:<初始条件>
        操作结果:<操作结果>
        ...
} ADT 抽象数据类型名
  • 多型数据类型:

    多型数据类型是指数据元素的类型不确定的数据结构,也就是说,一个多型数据类型的变量可以存储不同类型的数据元素。例如,链表、栈、队列、树、图等都是多型数据类型,因为它们的节点可以存储任意类型的数据。
    相反,非多型数据类型是指数据元素的类型固定的数据结构,也就是说,一个非多型数据类型的变量只能存储一种类型的数据元素。

数据结构的四类基本结构(逻辑结构)

数据结构的四类基本结构是指数据元素之间的逻辑关系,即数据元素之间存在什么样的关系。

根据数据元素之间关系的不同特性,通常有以下四种基本结构:

  • 集合结构:数据元素之间除了属于同一个集合外,没有其他关系。例如,一个班级的学生就是一个集合。
  • 线性结构:数据元素之间存在一对一的关系。例如,线性表、栈、队列、串等都是线性结构。
  • 树形结构:数据元素之间存在一对多的关系。例如,树、二叉树、森林等都是树形结构。
  • 图形结构:数据元素之间存在多对多的关系。例如,图、网、有向图等都是图形结构。

图解

在这里插入图片描述

存储结构

存储结构是指数据的逻辑结构在计算机中的存储方式,也称为物理结构。它研究的是数据元素的表示和元素之间关系的表示,即数据元素在存储器上的排列方式。

存储结构主要有以下四种:

  • 顺序存储结构:是利用数据元素在存储器中的相对位置来表示数据元素之间的逻辑顺序。顺序存储结构是把数据元素放在地址连续的存储单元中,程序设计中使用数组类型来实现。
  • 链式存储结构:是利用结点中指针来表示数据元素之间的关系。链式存储结构不要求数据元素在物理上相邻,而是通过指针链接起来,程序设计中使用指针类型来实现。
  • 索引存储结构:是在存储数据元素的同时还增加了一个索引表。索引表中的每一项包括关键字和地址,关键字是能够唯一标识一个数据元素的数据项,地址是指示数据元素的存储地址或者存储区域的首地址。
  • 散列存储结构:也称为哈希存储,这种存储方式将数据元素存储在一个连续的区域,每一个数据元素的具体存储位置是根据该数据的关键字值,通过散列(哈希)函数直接计算出来的。

顺序存储结构

在这里插入图片描述

链式存储结构

在这里插入图片描述

顺序存储和链式存储比较分析

顺序存储和链式存储是两种常见的数据结构的存储方式,它们各有优缺点,适用于不同的场景。下面是两种存储方式的比较分析:

  • 顺序存储是指把数据元素放在地址连续的存储单元中,可以利用数组来实现。链式存储是指把数据元素放在任意的存储单元中,通过指针来表示数据元素之间的关系,可以利用结构体或者类来实现。
  • 顺序存储的优点是:存储密度大,空间利用率高,支持随机访问,查找操作方便。顺序存储的缺点是:需要事先确定存储空间的大小,扩容或缩容比较麻烦,插入或删除操作需要移动大量的元素,效率低。
  • 链式存储的优点是:不需要事先确定存储空间的大小,扩容或缩容比较灵活,插入或删除操作只需要修改指针,效率高。链式存储的缺点是:存储密度小,空间利用率低,不支持随机访问,查找操作需要遍历整个链表,效率低。
  • 一般来说,如果数据结构的长度变化不大,且主要操作是查找,则适合使用顺序存储;如果数据结构的长度变化较大,且主要操作是插入或删除,则适合使用链式存储。

3. 算法

概念

算法是指解决特定问题的一种方法或者一个过程,是一系列清晰的指令,可以用计算机语言来实现。

特征

算法具有以下特征:

  • 输入:算法有外部提供的量作为输入,这些量表示问题的初始状态和条件。
  • 输出:算法至少有一个输出,这些量表示问题的解决方案或结果。
  • 确定性:算法的每条指令必须是无歧义的,即在任何情况下,只有唯一的一条执行路径。
  • 有限性:算法的执行时间和执行次数必须是有限的,即算法必须在有限步骤内终止。
  • 可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。

优点(也是要求)

算法可以应用于各种领域,如数学、计算机科学、工程、物理、生物等。不同的领域可能有不同的算法设计方法和评价标准。
一般来说,一个好的算法应该具有以下优点:

  • 正确性:算法能够正确地解决问题,即对于任何合法的输入,都能得到正确的输出。
  • 可读性:算法能够用清晰、简洁、规范的语言来描述,便于人们理解和修改。
  • 健壮性:算法能够处理异常或错误的输入,不会产生不可预期的结果。
  • 效率:算法能够在较短的时间内完成任务,即占用较少的时间资源。
  • 空间:算法能够在较小的空间内完成任务,即占用较少的存储资源。

算法效率的度量

概念

算法效率的度量是指评估算法在执行过程中所消耗的时间和空间资源的方法。一般来说,更关注算法的时间效率,也就是算法的时间复杂度。

时间复杂度

时间复杂度是指算法执行时间与问题规模之间的关系,用大O符号表示,记为T (n) = O(f (n)),其中n是问题规模,f (n)是一个函数,表示算法执行时间随n的增长而增长的量级。

为了计算算法的时间复杂度,我们需要遵循以下步骤:

  • 找出算法中的基本操作,通常是最内层循环的循环体。
  • 计算基本操作的执行次数的数量级,忽略低次幂和高次幂的系数,只保留最高次幂。
  • 用大O符号表示算法的时间性能,将基本操作执行次数的数量级放入大O符号中。

在计算算法时间复杂度时,还需要注意以下几个规则:

  • 加法规则:如果算法的两个部分时间复杂度分别为T1 (n) = O(f (n))和T2 (n) = O(g (n)),则T1 (n) + T2 (n) = O(max(f (n), g (n)))。
  • 乘法规则:如果算法的两个部分时间复杂度分别为T1 (n) = O(f (n))和T2 (n) = O(g (n)),则T1 (n) * T2 (n) = O(f (n) * g (n))。
  • 常数规则:如果g (n) = O(f (n)),则O(f (n)) + O(g (n)) = O(f (n));O(C * f (n)) = O(f (n)),其中C是一个正常数。

常见的时间复杂度有以下几种:

  • 常数阶O(1),表示算法执行时间与问题规模无关,如简单的赋值或输入输出语句。
  • 对数阶O(log n),表示算法执行时间与问题规模的对数成正比,如二分查找或折半插入排序。
  • 线性阶O(n),表示算法执行时间与问题规模成正比,如顺序查找或冒泡排序。
  • 线性对数阶O(n log n),表示算法执行时间与问题规模和问题规模的对数的乘积成正比,如快速排序或归并排序。
  • 平方阶O(n^2),表示算法执行时间与问题规模的平方成正比,如选择排序或插入排序。
  • 立方阶O(n^3),表示算法执行时间与问题规模的立方成正比,如矩阵乘法或冒泡排序改进版。
  • 指数阶O(2^n),表示算法执行时间与2的问题规模次方成正比,如汉诺塔问题或幂集问题。
  • 阶乘阶O(n!),表示算法执行时间与问题规模的阶乘成正比,如旅行商问题或全排列问题。

一般来说,随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。常见的算法时间复杂度由小到大依次为:O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)。

O(1)

在这里插入图片描述

对数阶O(log n)

在这里插入图片描述

线性阶O(n)

在这里插入图片描述

在这里插入图片描述

线性对数阶O(n log n)

在这里插入图片描述

平方阶O(n^2)

在这里插入图片描述

空间复杂度(了解)

空间复杂度是指算法在执行过程中所占用的存储空间与问题规模之间的关系,用大O符号表示,记为S (n) = O(f (n)),其中n是问题规模,f (n)是一个函数,表示算法占用空间随n的增长而增长的量级。

为了计算算法的空间复杂度,需要遵循以下步骤:

  • 找出算法中的辅助空间,通常是指除了输入数据和输出结果所占用的空间之外的额外空间,如临时变量、递归栈等。
  • 计算辅助空间的大小的数量级,忽略低次幂和高次幂的系数,只保留最高次幂。
  • 用大O符号表示算法的空间性能,将辅助空间大小的数量级放入大O符号中。

在计算算法空间复杂度时,还需要注意以下几个规则:

  • 加法规则:如果算法的两个部分空间复杂度分别为S1 (n) = O(f (n))和S2 (n) = O(g (n)),则S1 (n) + S2 (n) = O(max(f (n), g (n)))。
  • 乘法规则:如果算法的两个部分空间复杂度分别为S1 (n) = O(f (n))和S2 (n) = O(g (n)),则S1 (n) * S2 (n) = O(f (n) * g (n))。
  • 常数规则:如果g (n) = O(f (n)),则O(f (n)) + O(g (n)) = O(f (n));O(C * f (n)) = O(f (n)),其中C是一个正常数。

常见的空间复杂度有以下几种:

  • 常数阶O(1),表示算法占用空间与问题规模无关,如简单的赋值或输入输出语句。
  • 线性阶O(n),表示算法占用空间与问题规模成正比,如动态数组或链表。
  • 平方阶O(n^2),表示算法占用空间与问题规模的平方成正比,如二维数组或矩阵。
  • 指数阶O(2^n),表示算法占用空间与2的问题规模次方成正比,如递归求解汉诺塔问题或幂集问题。

一般来说,随着问题规模n的不断增大,上述空间复杂度不断增大,算法的执行效率越低。常见的算法空间复杂度由小到大依次为:O(1) < O(n) < O(n^2) < O(2^n)

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

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

相关文章

【Python】字符串 ⑦ ( input 字符串输入 | input 函数自带提示参数 | input 函数接收的变量类型 )

文章目录一、input 字符串输入二、代码示例三、input 函数自带提示参数四、input 函数接收的变量类型一、input 字符串输入 在命令行中 , 使用 printf 可以输出数据 , 将 变量 , 字面量 , 表达式 输出到命令行中 ; 在命令行中 , 使用 input 语句可以 在 命令行 中 , 从键盘获取…

2023年第五届传智杯前四题题解(后俩没写出来)

比赛链接&#xff1a;第五届“传智杯”全国大学生计算机大赛&#xff08;决赛B组&#xff09; - 比赛详情 - 洛谷 时效「月岩笠的诅咒」 题目背景 蓬莱之药&#xff0c;被诅咒的不死之药。 奉命将蓬莱之药投入富士山中销毁的月岩笠&#xff0c;最终打算把蓬莱之药改投入八岳销…

STM32Cube的debug和release切换

一&#xff0c; Debug / Release版本区别 来源&#xff1a;STM32CUBEIDE中 Debug 和 Release 的作用/区别/使用场景 - svchao - 博客园 (cnblogs.com) 二&#xff0c;Debug / Release使用。 1&#xff0c;在编译的时候可以选择Debug 还是 Release . 2,使用stm32CubeIDE调试或运…

【模型复现】resnet,使用net.add_module()的方法构建模型。小小的改进大大的影响,何大神思路很奇妙,基础很扎实

从经验来看&#xff0c;网络的深度对模型的性能至关重要&#xff0c;当增加网络层数后&#xff0c;网络可以进行更加复杂的特征模式的提取&#xff0c;所以当模型更深时理论上可以取得更好的结果。但是更深的网络其性能一定会更好吗&#xff1f;实验发现深度网络出现了退化问题…

Git的安装与基本使用

Git是一个分布式版本控制工具&#xff0c;可以快速高效地处理从小型到大型的各种项目。 1.Git的安装 官网下载地址 &#xff1a;https://git-scm.com/ 安装过程 选择 Git 安装位置&#xff0c;要求是非中文并且没有空格的目录&#xff0c;然后下一步。 Git 选项配置&#xf…

ChatGPT搭建语音智能助手

环境 python&#xff1a;3 ffmpeg:用于处理视频和语音 gradio:UI界面和读取语音 概述 我们的目的是做一个语音智能助手 下面我们开始 准备工作 下载Visual Studio Code Visual Studio Code 因为需要写python代码&#xff0c;用Visual Studio Code比较方便。 安装pytho…

( “树” 之 DFS) 101. 对称二叉树 ——【Leetcode每日一题】

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a…

webgl-画任意多边形

注意&#xff1a; let canvas document.getElementById(webgl) canvas.width window.innerWidth canvas.height window.innerHeight let radio window.innerWidth/window.innerHeight; let ctx canvas.getContext(webgl) 由于屏幕长宽像素不一样&#xff0c;导致了长宽像素…

移远云服务QuecCloud正式发布,一站式为全球客户提供创新有效的解决方案

4月12日&#xff0c;在“万物智联共数未来”移远通信物联网生态大会上&#xff0c;移远通信宣布正式推出其物联网云服务——QuecCloud。QuecCloud具备智能硬件开发、物联网开放平台、行业解决方案三大能力&#xff0c;可为开发者和企业用户提供从硬件接入到软件应用的全流程解决…

Java 进阶(5) Java IO流

⼀、File类 概念&#xff1a;代表物理盘符中的⼀个⽂件或者⽂件夹。 常见方法&#xff1a; 方法名 描述 createNewFile() 创建⼀个新文件。 mkdir() 创建⼀个新⽬录。 delete() 删除⽂件或空⽬录。 exists() 判断File对象所对象所代表的对象是否存在。 getAbsolute…

4.2 方差

学习目标&#xff1a; 我认为学习方差需要以下几个步骤&#xff1a; 确定学习目标&#xff1a;在开始学习方差之前&#xff0c;需要明确学习的目标和意义&#xff0c;例如&#xff0c;理解方差的定义、掌握方差的计算方法、了解方差在实际问题中的应用等。 学习相关数学概念&…

宝塔Linux面板安装命令脚本大全(Centos/Ubuntu/Debian/Fedora/Deepin)

宝塔面板Linux服务器操作系统安装命令大全&#xff0c;包括Centos、Alibaba Cloud Linux、Ubuntu、TencentOS Server、Deepin、Debian和Fedora安装脚本&#xff0c;云服务器吧分享宝塔面板Linux服务器系统安装命令大全&#xff1a; 目录 宝塔面板Linux系统安装命令 Centos安…

【Vue】学习笔记-事件处理

事件的基本用法 使用v-on:xxx 或xxx 绑定事件&#xff0c;其中xxx是事件名事件的回调需要配置在methods对象中&#xff0c;最终会在vm上methods中配置的函数&#xff0c;不要用箭头函数&#xff0c;否则this就不是vm了methods中配置的函数&#xff0c;都是被vue所管理的函数。…

Pandas库:从入门到应用(三)——多表连接操作

一 、concat数据连接 1.1、concat()函数参数 pd.concat(objs, axis0, joinouter, ignore indexFalse, keysNone, levelsNone, namesNoneverify integrityFalse, sort False, copyTrue)objs&#xff1a;多个 DataFrame 或者 Series axis&#xff1a;0-行拼接 1-列拼接 join&am…

011:Mapbox GL两种方式隐藏logo和版权,个性化版权的声明

第011个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中用两种方式隐藏logo和版权,并个性化版权的声明 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共91行)相关API参考:专栏目标示例效果 配置方式…

2023高性价比学生手机选购攻略,预算不多入手这3款超值

学生党在预算不多的情况&#xff0c;想要换颜值高的新手机&#xff0c;应该选什么样的手机才实惠&#xff1f; 手机已经成为生活中的必需品&#xff0c;市场上的手机品牌和型号多种多样&#xff0c;价格逐年攀升&#xff0c;对于预算有限的学生党来说&#xff0c;在保证性能和…

编译原理期末速成笔记

哈喽大家好&#xff0c;又要考试了&#xff0c;在这里分享一下我的两天速成笔记&#xff0c;参考视频为哔站 Deeplei_ 的《编译原理期末速成》。本文仅是知识点总结&#xff0c;至于考试内容待我研究一下&#xff0c;后续我会再发文对考试的各个模块做详细分析&#xff0c;欢迎…

JavaWeb开发 —— Ajax

目录 一、介绍 二、原生Ajax 三、Axios 四、案例分析 一、介绍 ① 概念&#xff1a;Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML。 ② 作用&#xff1a; 数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。…

多元函数的基本概念——“高等数学”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是多元函数的基本概念&#xff0c;下面&#xff0c;让我们一起进入多元函数的世界吧 平面点集 多元函数的概念 多元函数的极限 多元函数的连续性 有界闭区域上多元连续函数的性质 平面点集 第一个是坐标平…

中间表示- 到达定义分析

基本概念 定义&#xff08;def&#xff09;&#xff1a;对变量的赋值 使用&#xff08;use&#xff09;&#xff1a;对变量值的读取 问题&#xff1a;能把上图中的y替换为3吗&#xff1f;如果能&#xff0c;这称之为“常量传播”优化。 该问题等价于&#xff0c;有哪些对变量y…