备战软考Day02-数据结构与算法

news2024/12/24 11:26:47

1.基本概念与三要素

1.什么是数据

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

2.数据元素、数据项

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

例如:一波顾客就代表数据元素,号数,取号时间,就餐人数就称为数据项

3.数据结构

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

2.三要素:

  • 逻辑结构
    • 集合:各个元素同属一个集合,别无其他关系。
    • 线性结构:数据元素之间是一对一的关系。除了第一个元素,所有元素都有唯前驱;除了最后一个元素,所有元素都有唯一后继。
    • 树形结构:数据元素之间是 一对多的关系。
    • 图状结构:数据元素之间是多对多的关系。
  • 物理结构(存储结构)
    • 顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中
    • 链式存储:逻辑上相邻的元素在物理位置上可以不相邻
    • 索引存储:在存储元素信息的同时,还建立附加的索引表。
    • 散列存储:根据元素的关键字直接计算出该元素的存储地址,又称哈希(Hash)存储
  • 数据的运算:数据结构+算法

2.算法

1.五个特性

  1. 有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
  2. 确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
  3. 可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
  4. 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
  5. 输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

2.算法效率的度量

时间复杂度:时间开销与问题规模n之间的关系

空间复杂度:空间开销(内存开销)与问题规模n之间的关系

函数递归调用带来的内存开销:S(n) = O(n) 空间复杂度=递归调用的深度

3.线性表

1.定义

线性表是具有相同数据类型的n (n≥0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则其一般表示为:

L=(a1, a2,..., ai,ai+1,. an)

几个概念:

ai是线性表中的“第i个”元素线性表中的位序。

a1是表头元素;an是表尾元素。

除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外每个元素有且仅有一个直接后继。

2.存储结构

3.插入删除操作

顺序存储:插入元素前要移动元素以挪出空的存储单元,然后再插入元素。删除元素时同样需要移动元素,以填充被删除元素的存储单元。

链式存储:

4.栈和队列

1.栈的定义:

线性表是具有相同数据类型的n (n20)个数据元素的有限序列,其中n为表长,当n=0时线 性表是一个空表。若用L命名线性表,则其一般表示为:

L=(a1, a2, ..., ai, ai+1,..,an)

栈(Stack)是只允许在一端进行插入或删除操作的线性表

2.队列的定义:

队列是一.种先进先出(FIFO)的线性表,它只允许在表的一端插入元素,而在表的另一端删除元素。在队列中,允许插入元素的一端称为队尾(Rear)允许删除元素的一端称为队头(Front)。

3.循环队列:

5.串、数组、矩阵和广义表

1.串(String)定义:

串是仅由字符构成的有限序列,是取值范围受限的线性表。一般记为S ='a1 a2~~~ an',其中S是串名,a1 a2 an是串值。

(1)空串:长度为零的串,空串不包含任何字符。

(2)空格串:由一个或多个空格组成的串。

(3)子串:由串中任意长度的连续字符构成的序列。含有子串的串称为主串。子串在主串中的位置指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串。

(4)串相等:指两个串长度相等且对应位置上的字符也相同

(5)串比较:两个串比较大小时以字符的ASCI码值作为依据。比较操作从两个串的第一个字符开始进行,字符的ASCI码值大者所在的串为大;若其中一个串先结束,则以串长较大者为大。

2、对串进行的基本操作有以下几种。

(1)赋值操作StrAssign(s,):将串t的值赋给串s。

(2)连接操作Concat(s,t):将串t接续在串s的尾部,形成一个新串

(3)求串长StrLength(s):返回串s的长度。

(4)串比较StrCompare(s,t):比较两个串的大小

(5)求子串SubString(,tart,len):返回串s中从start开始的、长度为len的字符序列。

3、串的存储结构

(1)串的顺序存储:定长存储结构

(2)串的链式存储:块链

子串的定位操作通常称为串的模式匹配,它是各种串处理系统中最重要的运算之一。子串也称为模式串。

4.数组

答:a+(2*5+3)*2=a+26

注:len代表字节长度

5.稀疏矩阵

使用代入法,就求出来答案为:A

6.广义表

答:1.长度:3,深度2 2.head(head(tail(LS1)))

6.树和二叉树

1.树的基本概念

2.树的遍历

3.反向构造二叉树

4.树转为二叉树

5.查找二叉树(二叉排序树)

6.构造霍夫曼树(最优)

7.线索二叉树

8.平衡二叉树

7.图

1.基本概念

  1. 有向图
  2. 无向图
  3. 完全图:在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图。在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图。
  4. 度,入度与出度

2.存储结构(邻接矩阵)

3.存储结构(邻接表)

4.遍历

5.拓扑排序

6.最小生成树(普利姆算法)

普利姆算法(Prim's Algorithm)是一种用于在加权无向图中寻找最小生成树的贪心算法。最小生成树是指连接图中所有顶点的边的权重之和最小的树。普利姆算法通常用于那些边的权重各不相同的图。

普利姆算法的基本思想是从图中的任意一个顶点开始,逐渐构建最小生成树,每次迭代都选择与当前生成树连接权重最小的边,并将这条边及其对应的顶点加入到生成树中,直到所有顶点都被包含在生成树中。

7.最小生成树(克鲁斯卡尔算法)

克鲁斯卡尔算法(Kruskal's Algorithm)是一种用于在加权无向图中寻找最小生成树的贪心算法。这个算法的核心思想是先对图中的所有边按照权重进行排序,然后从最小的边开始选择,每次选择不会与已选择的边构成环的边,直到选择的边数达到顶点数减一为止。

8.查找

1.基本概念

  1. 查找 --在数据集合中寻找满足某种条件的数据元素的过程称为查找。
  2. 查找表(查找结构)--用于查找的数据集合称为查找表,它由同一类型的数据元素(或记录)组成。
  3. 关键字 -- 数据元素中唯一标识该元素的某个数据项的值,使用基于关键字的查找,查找结果应该是唯一的。
  4. 查找长度--在查找运算中,需要对比关键字的次数称为查找长度。
  5. 平均查找长度(ASL,Average Search Length)--所有查找过程中进行关键字的比较次数的平均值。

2.顺序查找

顺序查找,又叫“线性查找”,通常用于线性表。

算法思想:从头到脚挨个找(反过来也ok)

3.折半查找

又称为:二分查找,仅适用于有序的顺序表。

mid,向下取整

4.分块查找

5.哈希表(散列表)

散列表(Hash Table),又称哈希表、是一种数据结构,特点是:数据元素的关键字与其存储地址直接相关,

例:有一堆数据元素,关键字分别为{19,14,23,1,68,20,84,27,55,11,10,79}散列函数 H(key)=key%13

若不同的关键字通过散列函数映射到同一个值,则称它们为“同义词”

通过散列函数确定的位置已经存放了其他元素,则称这种情况为“冲突”

解决方法

    • 开放地址法
    • 链地址法
    • 再哈希法
    • 建立一个公共溢出区

9.排序

1.基本概念

排序:就是重新排列表中的元素,使表中的元素满足按关键字有序的过程

稳定与不稳定排序:1 3 6 4 1 如果排序完,前面的1仍然在后面的1前面,则为稳定排序

内部排序与外部排序

2.排序方法分类:

1.插入类排序:
直接插入排序:

希尔排序

2.交换类排序:
冒泡排序

快速排序

3.选择类排序:
简单选择排序

堆排序.

4.其他
归并排序

基数排序(又称为桶排序)

3.排序评价指标

10.算法设计与分析

1.分治法-分而治之

对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同递归地解这些子问题,然后将各子问题的解合并得到原问题的解。

要求:

  • 该问题的规模缩小到一定的程度就可以容易地解决
  • 该问题可以分解为若干个规模较小的相同问题。
  • 利用该问题分解出的子问题的解可以合并为该问题的解
  • 该问题所分解出的各个子问题是相互独立的。

一般来说分治算法在每一层递归上都有3个步骤。

(1)分解。将原问题分解成一系列子问题。

(2)求解。递归地求解各子问题。若子问题足够小,则直接求解。

(3)合并。将子问题的解合并成原问题的解

2.回溯法-深度优先搜索法

回溯法是种选优搜索法,按选优条件向前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择这种走不通就退回再走的技术就是回溯法。

3.贪心法-局部最优

总是做出在当前来说是最好的选择,而并不从整体上加以考虑,它所做的每步选择只是当前步骤的局部最优选择,但从整体来说不一定是最优的选择。由于它不必为了寻找最优解而穷尽所有可能解,因此其耗费时间少,一般可以快速得到满意的解,但得不到最优解。也常用于解决最优化的问题。

用贪心法求解的问题一般具有两个重要的性质。

(1)最优子结构。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构。问题的最优子结构是该问题可以采用动态规划法或者贪心法求解的关键性质。

(2)贪心选择性质。指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到。这是贪心法和动态规划法的主要区别。

4.动态规划法-整体最优

基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是独立的。

动态规划算法通常用于求解具有某种最优性质的问题,在这类问题中,可能会有许多可行解,每个解都对应于一个值,我们希望找到具有最优值的那个解。当然,最优解可能会有多个,动态规划算法能找出其中的一个最优解。

对一个给定的问题,若其具有以下两个性质,则可以考虑用动态规划法来求解。

(1)最优子结构。如果一个问题的最优解中包含了其子问题的最优解,就说该问题具有最优子结构。当一个问题具有最优子结构时,提示我们动态规划法可能会适用,但是此时贪心策略可能也是适用的。

(2)重叠子问题。指用来解原问题的递归算法可反复地解同样的子问题,而不是总在产生新的子问题。即当一个递归算法不断地调用同一个问题时,就说该问题包含重叠子问题。此时若用分治法递归求解,则每次遇到子问题都会视为新问题,会极大地降低算法的效率,而动态规划法总是充分利用重叠子问题,对每个子问题仅计算一次,把解保存在一个在需要时就可以查看的表中,而每次查表的时间为常数。

例题

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

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

相关文章

树莓派Pico2(RP2350)开发环境搭建

树莓派Pico2(RP2350)开发环境搭建 文章目录 树莓派Pico2(RP2350)开发环境搭建1、RP2350介绍2、开发环境搭建3、工程编译4、固件下载Raspberry Pi再次通过推出RP2350 MCU突破了微控制器设计的界限。这款微控制器是之前RP2040的重大升级,带来了更强大的性能、高级安全功能,…

基于SSM的二手车管理系统的设计与实现 (含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的二手车管理系统4拥有三种角色 管理员:订单管理、在售车辆管理、下架车辆管理、品牌管理、分类管理、推荐管理、统计等 商家:登录注册、添加/下架/删除车辆…

vscode搭建ros开发环境问题记录(更新...)

文章目录 vscode 不能自动补全 开发环境: vmware 15.7 ubuntu 20.04 ros noetic vscode 不能自动补全 这里将头文件已经正确包含到c_cpp_properties.json中代码中仍然不能自动补全, 将C_CPP插件设置中的Intelli Sense Engine 设置为TagParser,然后重新加…

828华为云征文 | 云服务器Flexus X实例:部署 Gitea,拥有自己的Git仓库,管理本地代码

目录 一、什么是 Gitea 二、安装 Docker 环境 2.1 更新 apt 软件源 2.2 安装依赖 2.3 安装 Docker 三、安装 Gitea 3.1 创建 docker-compose.yml 3.2 启动 Gitea 服务 3.3 初始化配置 四、运行 Gitea 4.1 登录/注册 4.2 创建仓库 五、总结 本篇文章通过部署 Gite…

【BFS专题】— 多源最短路问题

1、矩阵 - 力扣(LeetCode) 思路: 首先创建一个dist数组,将dist数组初始化为-1,表示该位置没有被搜索和记录该位置的值然后再遍历mat数组,将数组中的 0 添加到队列中,并且修改dist对应位置的值为…

全网最全最详细的跨域解决方案

你们好,我是金金金。 前置知识 本篇文章以通俗易懂的方式进行描述,自己组织语言进行输出,尽量让每一个人都能看得懂。哪里有说的不正确的地方 大佬请在评论区指正! 首先需要了解浏览器的同源策略 浏览器的同源策略 MDN解释地址&…

神经网络通俗理解学习笔记(3)注意力神经网络

Tansformer 什么是注意力机制注意力的计算键值对注意力和多头注意力自注意力机制注意力池化及代码实现Transformer模型Transformer代码实现 什么是注意力机制 注意力机制的发展史 Attention Mechanism Mnih V, Heess N, Graves A. Recurrent models of visual attention, 2014…

JVM 调优篇7 调优案例1-堆空间的优化解决

一 jvm优化 1.1 优化实施步骤* 1)减少使用全局变量和大对象; 2)调整新生代的大小到最合适; 3)设置老年代的大小为最合适; 4)选择合适的GC收集器; 1.2 关于GC优化原则 多数的Java应用不需要在服务器上进行GC优化&#xff1…

NeMo Curator 整理用于 LLM 参数高效微调的自定义数据集

目录 概述 预备知识 定义自定义文档构建器 下载数据集 解析和迭代数据集 将数据集写入 JSONL 格式 使用文档构建器加载数据集 使用现有工具统一 Unicode 格式 设计自定义数据集过滤器 编辑所有个人识别信息 添加指令提示 整合管线 概述 出于演示目的,本…

【PyQt6 应用程序】应用程序携带数据源文件一并打包

在开发好应用程序打包之后给到其他用户会发现数据文件比如封面图片不见了。 例如这样,很影响用户使用。 这里介绍一个非常简单的打包方法,不光要在打包命令的时候添加对应数据文件,在源码中也要进行一些简单的修改。 修改需要添加打包文件的地方。首先需要添加一个绝对路径…

143234234123432

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

【C++】c++的继承

目录 思维导图大纲: 1.基类和派生类 1.1 定义格式 1.2 继承方式 1.3 基类和派生类的转换 2. 继承中的作用域(隐藏关系) 2.1 考察继承作⽤域相关选择题 3. 派生类的默认成员函数 4. 继承类模板 5. 一个不能被继承的类 ​编辑 6.继承与友元 ​编辑 7. 继…

Java面向对象六大设计原则总结(超级详细,附有代码、图解以及案例)

文章目录 三.软件(面向对象)设计原则3.1 开闭原则(OSP)3.1.1 概述3.1.2 案列 3.2 里氏代换原则(LSP)3.2.1 概述3.2.2 案例 3.3 依赖倒转原则(DIP)3.3.1概述3.3.2 案例 3.4 接口隔离原则(ISP)3.4.1 概述3.4.2 案列 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.6 合成复用原则(CRP…

红黑树前语

目录 概念 性质 红黑树与AVL树的比较 过两天更新红黑树的模拟实现,中秋快乐各位 概念 1. 概念: 是一种搜索二叉树, 但在每个结点上增加一个存储位表示节点的颜色,可以是Red 或 Black。通过对任何一条从根到叶子的路径上各个节点着色方式的…

[JVM]JVM内存划分, 类加载过程, 双亲委派模型,垃圾回收机制

文章目录 一. JVM内存划分1. 堆2. 栈3. 元数据区4. 程序计数器 二. 类加载过程1. 加载2. 验证3. 准备4. 解析5. 初始化 三. 双亲委派模型四. JVM的垃圾回收机制GC1. 找到需要回收的对象2. 释放垃圾的策略 一. JVM内存划分 JVM就是java进程 这个进程一旦跑起来, 就会从操作系统…

Windows本地制作java证书(与jeecgboot配置本地证书ssl问题)

1:JDK生成自签证书SSL,首先以管理员身份运行CMD窗口,执行命令 keytool -genkey -alias testhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore "F:/ssl/testhttps.keystore"F:\ssl>keytool -genkey -alias testhttps -keyalg R…

PCIe进阶之TL:Memory, I/O, and Configuration Request Rules TPH Rules

1 Memory, I/O, and Configuration Request Rules 下述规则适用于 Memory 请求、IO 请求和配置请求。 除了公共的 header 字段外,所有 Memory 请求、IO 请求和配置请求还包括以下字段: (1)Requester ID[15:0] 和 Tag[9:0],组成了 Transaction ID 。 (2)Last DW BE[3:0]…

计算架构模式之接口高可用

接口高可用整体框架 接口高可用主要应对两类问题:雪崩效应和链式效应。 雪崩:当请求量超过系统处理能力之后,会导致系统性能螺旋快速下降,本来系统可以处理1000条,但是当请求量超过1200的时候,此时性能会下…

【415】【最高乘法得分】

目录 使用dp python版本 java版本 递推式 python版本 java版本 PS: java语法 1.定义数组 2.记忆化 3.计算max 难绷,本来想着4个指针,和四数之和那道题挺类似的。。。。 四数之和好像剪枝和预处理都是先排序的比较好做。 无奈,只…

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…