考研数据结构笔记(1)

数据结构(1)

  • 数据结构在学什么?
  • 数据结构的基本概念
    • 基本概念
    • 三要素
    • 逻辑结构
      • 集合
      • 线性结构
      • 树形结构
      • 图结构
    • 物理结构(存储结构)
      • 顺序存储
      • 链式存储
      • 索引存储
      • 散列存储
      • 重点
    • 数据的运算
  • 算法的基本概念
    • 什么是算法
    • 算法的五个特性
      • 有穷性
      • 确定性
      • 可行性
      • 输入
      • 输出
    • "好"算法的特性
      • 正确性
      • 可读性
      • 健壮性
      • 高效率和低存储量需求
  • 算法的时间复杂度
    • 规则
    • 常见的渐进时间复杂度
    • 口诀
  • 算法的空间复杂度
    • 普通程序的内存开销
    • 函数递归调用带来的内存开销

在这里插入图片描述
上图为简述一下考研408中计算机组成原理,操作系统,数据结构和计算机网络它们之间的关系。接下来我们正式进入数据结构的学习。

数据结构在学什么?

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

数据结构的基本概念

在这里插入图片描述

基本概念

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

计算机只能识别二进制数(0/1)

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

数据项:数据项是构成数据元素的不可分割的最小单位。
在这里插入图片描述

结构:各个元素之间的关系。

数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

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

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

  • 原子类型:其值不可再分的数据类型。

像int、float等数据类型都是原子类型。

  • 结构类型:其值可以再分解为若干成分(分量) 的数据类型
  • 抽象数据类型(ADT):是抽象数据组织及与之相关的操作。

定义一个ADT,就是定义了数据的逻辑结构、数据的运算。也就是定义了一个数据结构

三要素

在这里插入图片描述

逻辑结构

在这里插入图片描述

集合

在这里插入图片描述
各个元素同属于一个集合,别无其它关系。

线性结构

在这里插入图片描述
数据元素之间是一对一的关系
除了第一个元素,所有元素都有唯一前驱
除了最后一个元素,所有元素都有唯一后继

树形结构

在这里插入图片描述
数据元素之间是一对多的关系

图结构

在这里插入图片描述
数据元素之间是多对多的关系

物理结构(存储结构)

在这里插入图片描述

顺序存储

顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

  • 优点:实现随机存储
  • 缺点:只能使用相邻的一整块存储单元。

在这里插入图片描述

链式存储

链式存储:逻辑上相邻的元素在物理位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。

  • 优点:不会出现碎片现象
  • 缺点:存储指针占用额外的存储空间,且只能顺序存储。

在这里插入图片描述

索引存储

索引存储:在存储元素信息的同时,还建立附加的索引表。索引表中的每项称为索引项,索引项的一般形式是(关键字,地址)
在这里插入图片描述

散列存储

散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希 (Hash) 存储

重点

  • 采用顺序存储,则各个数据元素在物理上必须是连续的;
  • 采用非顺序存储,则各个数据元素在物理上可以是离散的。
  • 数据的存储结构会影响存储空间分配的方便程度
  • 数据的存储结构会影响对数据运算的速度

数据的运算

数据的运算:施加在数据上的运算包括运算的定义和实现。
运算的定义是针对逻辑结构的指出运算的功能。
运算的实现是针对存储结构的,指出运算的具体操作步骤。

在这里插入图片描述

定义一个ADT,就是定义了数据的逻辑结构、数据的运算。也就是定义了一个数据结构。

确定一种存储结构,就意味着在计算机中表示出数据的逻辑结构。存储结构不同,也会导致运算的具体实现不同。确定了存储结构,才能实现数据结构

在这里插入图片描述

算法的基本概念

在这里插入图片描述

什么是算法

在这里插入图片描述
算法:算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令
表示一个或多个操作

算法的五个特性

有穷性

有穷性:算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

注:算法必须是有穷的,而程序可以是无穷的。

确定性

确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。

可行性

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

输入

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

输出

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

"好"算法的特性

正确性

正确性:算法应能够正确地解决求解问题。

可读性

可读性:算法应具有良好的可读性,以帮助人们理解。

健壮性

健壮性:算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

高效率和低存储量需求

花的时间少时间复杂度低;不费内存,空间复杂度低。

在这里插入图片描述

算法的时间复杂度

在这里插入图片描述
算法时间复杂度:事前预估算法时间开销T(n)与问题规模 n 的关系 (T 表示“time”)

当我们遇到以下题目计算语句的时间复杂度时
在这里插入图片描述
在这里插入图片描述
我们取时间开销计算式的最高阶为时间复杂度
在这里插入图片描述
当一个算法的问题规模n足够大时,
在这里插入图片描述
利用大O表示法表示时间复杂度。
在这里插入图片描述

规则

  • 加法规则
    T(n) = T(n) + T2(n) = 0(f(n)) + 0(g(n)) = 0(max(f(n), g(n)))—>多项相加,只保留最高阶的项,且系数变为1

  • 乘法规则
    T(n)= T(n)XT(n) = O((n))XO(g(n))= O(f(n)Xg(n))—>多项相乘,都保留

常见的渐进时间复杂度

在这里插入图片描述

在这里插入图片描述

口诀

常对幂指阶(从小到大)

最坏时间复杂度:最坏情况下算法的时间复杂度。
平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间。
最好时间复杂度:最好情况下算法的时间复杂度。

在这里插入图片描述

算法的空间复杂度

在这里插入图片描述

在这里插入图片描述
将代码装入内存中,无论问题规模如何,所需要的内存空间都是固定的常量。

普通程序的内存开销

在这里插入图片描述
当程序中出现的变量与问题规模n无关时,其充其量在式子中为常数,最后式子取最高阶用大O表示法为O(n)
在这里插入图片描述
此时空间复杂度取O(n*n)n平方

函数递归调用带来的内存开销

在这里插入图片描述
由于递归调用,函数所需空间增多。

在这里插入图片描述
此时调用5次,若问题规模为n,则调用1、2、3、…n次,为(1/2(nn))/2 + (1/2)n
S(n) = O(n
n)

在这里插入图片描述

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

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

相关文章

Linux嵌入式开发+驱动开发-中断

swi汇编指令可以产生软中断,以下是硬件中断的产生到执行完毕的全过程: 在自己设计的芯片“CPU响应中断”程序的第四个步骤可以转向“中断向量控制器”,中断向量控制器中存储中断元服务地址即处理中断处理程序的地址,而不用使用0X1…

【安卓跨程序共享数据,探究ContentProvider】

ContentProvider主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。 目前,使用ContentProvider是Android实现跨程序共享数据的标准方…

2024年2月CCF-全国精英算法大赛题目

第一次参加这种比赛,虽然是c类赛事,但是是ccf主办的,难度还是有点的,主要是前面签到题主要是思想,后面的题目难度太高,身为力扣只刷了一百多道题目的我解决不了,这几道我只做了B,C题,E题超时了&…

生物素-PEG4-酪胺,Biotin-PEG4-TSA,应用于酶联免疫吸附实验

您好,欢迎来到新研之家 文章关键词:生物素-PEG4-酪胺,Biotin-PEG4-Tyramide,Biotin-PEG4-TSA 一、基本信息 产品简介:Biotin PEG4 Tyramine is a reagent used for tyramine signal amplification (TSA) through ca…

20240202在Ubuntu20.04.6下配置环境变量之后让nvcc --version显示正常

20240202在Ubuntu20.04.6下配置环境变量之后让nvcc --version显示正常 2024/2/2 20:19 在Ubuntu20.04.6下编译whiper.cpp的显卡模式的时候,报告nvcc异常了! 百度:nvcc -v nvidia-cuda-toolkit rootrootrootroot-X99-Turbo:~/whisper.cpp$ WH…

5-2、S曲线计算【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】,查看本系列全部文章 摘要:本节介绍S曲线的基本变换,将基本形式的S曲线变换成为任意过两点的S曲线,为后续步进电机S曲线运动提供理论支撑 一.计算目标 ①计算经过任意不同两点的S曲线方程 ②可调节曲线平…

leetcode(双指针)283.移动零(C++)DAY3

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 示例 1: 输入…

挖矿系列:细说Python、conda 和 pip 之间的关系

继续挖矿,挖金矿! 1. Python、conda 和 pip Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具,它们各自有不同的作用,但相互之间存在密切的关系: Python:是一种解释型、面向对象的高级程序设…

安卓平台valgrind交叉编译

背景 通过上次的文章valgrind跨平台调试及其问题分析,为同事们在大部分平台下进行内存问题分析提供了帮助。但是也遇到了阻塞情况:android 平台,无法交叉编译通过。大家对于编译这件事,似乎天然有一种排斥,本能的拒绝&#xff0c…

idea运行程序报错 java 程序包org.junit不存在

在 IntelliJ IDEA 中运行程序时遇到错误提示:“java: 程序包org.junit不存在”,针对这一问题,我们可以考虑以下三步来解决: 第一步:检查JUnit依赖 尽管现代项目创建时通常会默认引入JUnit依赖,但仍需检查…

创建自己的Hexo博客

目录 一、Github新建仓库二、支持环境安装Git安装Node.js安装Hexo安装 三、博客本地运行本地hexo文件初始化本地启动Hexo服务 四、博客与Github绑定建立SSH密钥,并将公钥配置到github配置Hexo与Github的联系检查github链接访问hexo生成的博客 一、Github新建仓库 登…

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-LST…

【PostgreSQL内核学习(二十五) —— (DBMS存储空间管理)】

DBMS存储空间管理 概述块(或页面)PageHeaderData 结构体HeapTupleHeaderData 结构 表空间表空间的作用:表空间和数据库关系表空间执行案例 补充 —— 模式(Schema) 声明:本文的部分内容参考了他人的文章。在…

YOLOv5独家涨点技巧:FPN涨点篇 | 高层筛选特征金字塔网络(HS-FPN),助力医学、小目标检测 | 2024年最新论文

💡💡💡本文独家改进:高层筛选特征金字塔网络(HS-FPN),能够刷选出大小目标,增强模型表达不同尺度特征的能力,助力小目标检测 💡💡💡在BCCD医学数据集和私有多个数据集实现暴力涨点。 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category…

计算机网络原理基础

目录 前言: 1.网络发展史 2.网络通信基础 2.1IP地址 2.1.1定义 2.1.2格式 2.2端口号 2.2.1定义 2.2.2格式 2.3协议 2.3.1定义 2.3.2作用 2.3.3分层 2.4五元组 2.4.1定义 2.4.2组成 3.TCP/IP五层网络模型 3.1模型概念 3.2模型构成 3.3网络分层对应…

Redis-缓存问题及解决方案

本文已收录于专栏 《中间件合集》 目录 概念说明缓存问题缓存击穿问题描述解决方案 缓存穿透问题描述解决方案 缓存雪崩问题描述解决方案提高缓存可用性过期时间配置熔断降级 总结提升 概念说明 Redis是一个开源的内存数据库,也可以用作缓存系统。它支持多种数据结构…

Unity3d Cinemachine篇(完)— TargetGroup

文章目录 前言使用TargetGroup追随多个模型1. 创建二个游戏物体2. 创建TargetGroup相机3. 设置相机4. 完成 前言 上一期我们简单的使用了ClearShot相机,这次我们来使用一下TargetGroup 使用TargetGroup追随多个模型 1. 创建二个游戏物体 2. 创建TargetGroup相机 3…

Packet Tracer - Configure IOS Intrusion Prevention System (IPS) Using the CLI

Packet Tracer - 使用CLI配置IOS入侵防御系统(IPS) 地址表 目标 启用IOS入侵防御系统(IPS)。 配置日志记录功能。 修改IPS签名规则。 验证IPS配置。 背景/场景 您的任务是在R1上启用IPS,扫描进入192.168.1.0网络…

npm install express -g报错或一直卡着,亲测可解决

问题描述: 最近学习vue3前端框架,安装Node.js之后,在测试是否可行时,cmd窗口执行了:npm install express -g,发现如下图所示一直卡着不动,最后还报错了,网上找了好久,各…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(3.详解String数据结构)

【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底层实现(2.版本区别dictEntry & redisObject详解)-CSDN博客 紧接着前两篇的总体介绍,从这篇开始&#x…