软考 - 数据结构与算法

news2025/7/12 15:06:08

数据结构

线性结构

线性表

存储结构

  • 顺序存储:用一组地址连续的存储单元 依次存储线性表中的数据元素,使得逻辑上相邻的元素物理上也相邻

  • 链式存储:存储各数据元素的结点的地址并不要求是连续的,数据元素逻辑上相邻,物理上分开

例题:
若长度为n的线性表采用链式存储结构,要在第i个位置(0<=i<=n)插入一个新元素的算法的时间复杂度为(On)?

解:
一般来讲,链式存储很方便插入和删除,确实是O(1),但是这是建立在你有指针指向要插入的位置作为前提的。
本题无专门指针,强调了第i个位置,那么就还需要额外的O(n)来找到第i个位置。

栈和队列

  • 循环队列的计算

串的模式匹配算法

  • 基本的匹配方法
  • KMP算法【掌握】

矩阵

  • 特殊矩阵:对称矩阵,对角矩阵,三角矩阵
  • 稀疏矩阵

树与二叉树

树的基本概念

(1)双亲、孩子和兄弟。结点的子树的根称为该结点的孩子;相应地,该结点称为其子结点的双亲。具有相同双亲的结点互为兄弟。

(2)结点的度。一个结点的子树的个数记为该结点的度。

(3)叶子结点。叶子结点也称为终端结点,指度为0的结点。

(4)内部结点。度不为0的结点,也称为分支结点或非终端结点。除根结点以外,分支结点也称为内部结点。

(5)结点的层次。根为第一层,根的孩子为第二层,依此类推,若某结点在第i层,则其孩子结点在第计1层。

(6)树的高度。一棵树的最大层数记为树的高度(或深度)。

(7)有序(无序)树。若将树中结点的各子树看成是从左到右具有次序的,即不能交换,则称该树为有序树,否则称为无序树。

例:
若n2、n1、n0分别表示一个二叉树中度为2、度为1和叶子结点的数目(结点的度定义为结点的子树数目),
则对于任何一个非空的二叉树,() 。

解:
叶子节点 = 度为2的结点+1
https://zhidao.baidu.com/question/306578964.html
  • 在树中,结点总数 = 分支总数+1 【只有总结点没有分支】

二叉树【重点】

三种二叉树

完全二叉树的k-1层是满结点的,第k层结点从左到右是满的。 如下图所示:

在这里插入图片描述

在这里插入图片描述

二叉树存数结构

  • 顺序存储
  • 链式存储
具有3个结点的二叉树有5种,可推测出具有4个节点的二叉树有()种?

如果增加的结点是根结点,则可以分为在原有结点的左侧和右侧两种情况,则有5*2=10种二叉树。如下图,虚线代表一种可能性。
上面的情况是根结点一个分支,当根结点为两个分支时,又有4种情况:

https://blog.csdn.net/Stephen___Qin/article/details/109557499

二叉树遍历

  • 先序(前序)遍历:根左右
  • 中序遍历:左根右
  • 后续遍历:左右根
  • 层次遍历:上下,左右

在这里插入图片描述

例:
前序:12457836
中序:42785136
后序;48752631

反向构造二叉树

仅仅有前序和后序是无法构造二叉树的,必须要是和中序遍历的集合才能反向构造出二叉树,

因为构造时前序和后序可以确定根结点,中序遍历用来确定根节点左子树和右子树

例题:
先序+中序 -> 后序 (可以推导根结点)
中序 + 后序 -> 前序(可以推导根结点)
先序+后序 不能构造确定的二叉树

层序 + 中序 可以构造 先序
层序+ 后序 不能构造 先序

线索二叉树【重点】

笔记:https://blog.csdn.net/m0_61886762/article/details/124541056

我们现在倡导节约型社会,一切都应该以节约为本。但当我们创建二叉树时我们会发现其中一共有两个指针域,有的指针域指向的结构为空,这也就浪费了很多空间。所以为了不去浪费这些空间我们采取了一个措施。就是利用那些空地址,存放指向结点在某种遍历次序之下 的前驱和后继结点的地址。就好像GPS导航仪一样,它可以告诉我们下一站是哪里,我们是从那里来的。我们把这种指向前驱和后继的指针成为线索,加上线索的二叉链表称为线索链表,相应的二叉树就成为线索二叉树。
在这里插入图片描述

最优二叉树(哈夫曼树或赫夫曼树)【重点】

树的带权路径长度=所有叶子节点带权路径长度之和,即所有叶子节点的权值乘以该叶子节点所在的层次(第一层为0)之和。

权值就是指的一个节点的权重,比如把二叉树应用在编码中,权重就可以理解为码出现的概率。

  • 哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近
例:
若用n个权值构造一棵最优二叉树(哈夫曼树),则该二叉树的结点总数为()

解:
n 个叶子,n-1 个非叶节点,共2n-1 个。

构造哈夫曼树

  • 将其中两个最小的权值作为叶子节点,其和作为父节点,将其和替换两个权值,重复操作!

在这里插入图片描述

构造哈夫曼编码

  • 构造哈夫曼树编码,左右结点相差最小,左节点小于右节点,左节点编码为0,右节点编码为1
例:采用霍夫曼编码对下列字符编码,则字符“bee”的编码为(?);编码:“110001001101”对应的字符序列为(?);

解:先画出哈夫曼树!!!
字符abcdef
频率(%)4513121695

在这里插入图片描述

哈夫曼树的压缩比(对于二级制压缩来说)

res1 用二级制编码至少需要n位二级制,平均字符长度位n
res2 用哈夫曼树编码,平均字符长度 = n1*a1字符频率+n2*a2字符频率+n3*a3字符频率...
压缩比: (res1-res2)/res2

树和森林【不怎么考】

树的存储结构

双亲表示法:用一组连续的地址单元存储树的节点,并在每个节点中附带一个指 示器,指出其双亲节点所在数组元素的下标。

孩子表示法:在存储结构中用指针指示出节点的每个孩子,为树中每个节点的孩 子建立一个链表。

孩子兄弟表示法:又称为二叉链表表示法,为每个存储节点设置两个指针域,分 别指向该节点的第一个孩子和下一个兄弟节点。

树和森林的遍历

树和森林的遍历

由于树中每个节点可能有多个子树,因此遍历树的方法有两种:

先根遍历:先访问根节点,再依次遍历根的各颗子树。

后根遍历:先遍历根的各颗子树,再访问根节点。

森林中有很多课树,森林的遍历方法也分为两种,与树的遍历类似,就是对森林 中的每棵树都依次做先根遍历或后根遍历。

树和二叉树的转化

树的最左边结点作为二叉树的左子树,树的其他兄弟结点作为二叉树的右子树结点。

在这里插入图片描述

查找(排序)二叉树

一句话:中序遍历(左根右)从小到大

二叉排序树的查找效率取决于二叉排序树的深度,对于结点个数相同的二叉排序树,平衡二叉树的深度最小,而单枝树的深度是最大的,故效率最差。

二叉排序树的关键码序列

给出的序列,能够通过 左小右大 组成的查找树和给出的查找树相同!

平衡二叉树

一句话:平衡二叉树就是任意左右子树层次相差不超过1

平衡二叉(AVL)树本质还是一棵二叉查找树

为了方便起见,给树上的每个结点附加一个数字,给出该结点左子树与右子树的高度差,这个数字称为结点的平衡因子(BF)

平衡因子 = 结点左子树的高度-结点右子树的高度。

因此平衡二叉树所有结点的平衡因子只能是-1、0、1,如下图,是一个平衡二叉树

在这里插入图片描述

图的种类

  • 有向图
  • 无向图
  • 完全图:无向完全图中,节点两两之间都有连线,n个结点的连线数为n-1)+n-2+…+1 n*(-1)/2:有向完全图中,节点两两之间都有互通的两个箭头,n个节点的连线数为 n*(n-1)

图的存储

  • 临接矩阵 – 二维数组

在这里插入图片描述

  • 临接链表 - 一维数组+链表

在这里插入图片描述

图的遍历

  • 深度优先(dfs)

  • 广度优先(bfs)

图的最小生成树【重点】

  • 普利姆算法【Prim】(不断寻找最小边,然后加入集合判断)

    • 适合网比较稠密
  • 克鲁斯卡苏纳法【Kruscal推荐】

    • 与边数相关,每次需要遍历边,适合网稀疏
    • 这个算法是从边出发的,因为本质是选取权值最小的n-1条边,因此,就将边按权值大小排序,依次选取权值最小的边,直至囊括所有节点,要注意,每次选边后要检查不能形成环路。

在这里插入图片描述

网的拓扑序列

AV网(以顶点表示活动的网):在有向图中,以顶点表示活动,用有向边表示活 动之间的优先关系。

AV网用来表示大的工程项目执行计划,因此不能出现有向环,若存在,则意味着 某项活动必须以自身任务的完成为先决条件,因此,若要检测一个工程是否可行, 首先应检查对应的AV网是否存在回路。检测的方法是对有向图构造其顶点的拓扑 有序序列。

求拓扑序列【重点】

构造方法:将有向图的有向边作为活动开始的顺序,若图中一个节点入度为0,则 应该最先执行此活动,而后删除掉此节点和其关联的有向边,再去找图中其他没 有入度的结点,执行活动,依次进行,示例如下
在这里插入图片描述

构建大顶堆 和 小顶堆

算法

基础知识点

时间复杂度(渐进时间复杂度)

T(n) = 3n^3+2n^2+n 时间复杂度为 O(n^3)

时间复杂度用递归式表示的计算

  • https://blog.csdn.net/qq_31829611/article/details/105063979

公式法表达式:

在这里插入图片描述

当参数 a、b 都确定的时候,光看递归的部分,它的时间复杂度就是:

在这里插入图片描述

空间复杂度

指在运行过程中 临时占用存储空间的大小(全局变量即本来就需要占用的不算)

查找

  • 顺序查找
  • 二分查找【重点】(i+j)/2
  • 哈希表查找
    • 哈希值冲突,线性探测法,按物理地址(当前冲突地址)顺序取下一个空闲的存储空间

排序

稳定性:时间复杂度 和 是否改变相同数字的顺序

在这里插入图片描述

  • 插入类排序:直接插入排序(类似玩扑克排序,从后往前比较)、希尔排序(分割若干序列直接插入排序)

  • 交换类排序:冒泡排序、快速排序(二分思想,取中间值,其他值对其左右排序后,在递归)

快速排序

快速排序:
https://www.cnblogs.com/nicaicai/p/12689403.html
看源码便于理解
  • 选择类排序:简单选择排序(选择最小值,只交换一次)、堆排序
  • 归并排序

归并排序

在这里插入图片描述

  • 基数排序
直接插入排序元素次数比较最小:序列为需要顺序,比较次数最小;序列为需要顺序逆序,比较次数最多!
https://blog.csdn.net/qq_44616044/article/details/115708056
搞懂直接插入排序 和 归并排序!!!
https://www.cnblogs.com/haowuji/p/6961731.html

动态规划法DP

  • 构造表格,每一步最优,最后全局最优
  • 求矩阵连乘??

贪心法

  • 局部最优,最后全部不一定最优

KMP算法

求next函数

  • https://www.jianshu.com/p/2ac684ab44c8
规定:第一个字母的 next 值置 0 (next[1] = 0),第二个字母的 next 值置 1(next[2] = 1)
从第 3 个开始,计算第 i 个位置的 next 值时,检查 p[i-1]== p[next[i-1]] ?(即这两个值是否相等)
若相等,则 next[i] = next[i-1] + 1 
若不等,则继续往回找,检查p[i-1]== p[next[next[i-1]]] ?
以此类推!!
若不等,则继续往回找,直到找到下标为 1 还不等(即字符串第一个元素),直接赋值 next[i] = 1

分支限界法

概率算法

数据挖掘

智能优化

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

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

相关文章

提升Mac运行速度的三大方法

任何一部电子设备在使用多年之后都会出现性能下降的问题&#xff0c;苹果的Mac计算机自然也不例外。当你发现Mac运行缓慢&#xff0c;因为有太多文件或缓存垃圾将Mac的运行速度拖了下来。 要想提高生活和工作效率&#xff0c;必须对Mac进行优化&#xff0c;提升一下Mac 的使用性…

全业务链管理平台Odoo

什么是 Odoo ? Odoo 是一款非常容易使用又完全集成的商业应用&#xff0c;是一站式全业务链管理平台。 docker cli 安装 本项目涉及到 2 个容器&#xff0c;之前我们在下面&#x1f447;这些文章中 开源的看板管理工具Wekan类Trello的看板软件Planka群晖上安装MediaWiki的简…

linux系统java环境变量的下载与安装

由于目前好多工具的安全使用需要安装java环境&#xff0c;所有今天就分享一下java环境变量的安装与配置下载地址&#xff1a; https://download.oracle.com/otn/java/jdk/8u351-b10/10e8cce67c7843478f41411b7003171c/jdk-8u351-linux-i586.tar.gz?AuthParam1668564371_517fa4…

【2022.11.16】Lammps+Python+MATLAB在绘制维诺图时遇到的问题

目录写在前面绘制g6(r)执行步骤问题1&#xff1a;数据导入问题2&#xff1a;利用Python选取想要的数据问题3&#xff1a;如何找到每个点的最近邻问题4&#xff1a;绘制维诺图写在前面 记录一下做毕设时候遇到的问题 大目标是绘制g6的图片 相关文章&#xff1a; [1] Zu M , Li…

艾美捷可电离脂质SM-102解决方案

艾美捷SM-102是一种用于脂质纳米颗粒&#xff08;LNP&#xff09;的可电离脂质。LNP组合物已被证明有效地作为生物活性物质如小分子药物、蛋白质和核酸的运输载体进入细胞和/或细胞内隔室。这是一种试剂级产品&#xff0c;仅供研究使用。 艾美捷SM-102基本参数&#xff1a; 类…

企业管理 - 波司登战略管理解析

波司登战略管理解析 领导人讲话&#xff0c;视频&#xff1a;国家的战略&#xff0c;建设有中国特色的社会主义 这是一个文化大过滤时代&#xff1a;从宏观来讲&#xff0c;大的社会环境&#xff0c;包括现象&#xff0c;反腐&#xff0c;教育改革&#xff0c;把中华民族优秀…

Go(八)函数

目录 1. 函数 1.1 函数定义 1.2 函数的调用 1.3 参数 1.3.1 类型简写 1.3.2 可变参数 1.4 返回值 1.4.1 多返回值 1.4.2 返回值命名 1.4.3 返回值补充 2. 函数进阶 2.1 变量作用域 2.1.1 全局变量 2.1.2 局部变量 2.2 函数类型与变量 2.2.1 定义函数类型 2.2.…

FL Studio21免许可证完整版数字音频工作站(DAW)

如果你一直梦想制作自己的音乐(无论是作为一名制作人还是艺术家)&#xff0c;你可能会想你出生在这个时代是你的幸运星。这个水果圈工作室和上一版之间的改进水平确实令人钦佩。这仅仅是FL Studio 21所提供的皮毛。你的音乐项目的选择真的会让你大吃一惊。你以前从未有过这样的…

K3s离线部署

下载离线镜像包 离线镜像包下载地址 因为我的环境是CentOS 7.7&#xff0c;所以下载红框里的两个 下载部署脚本 部署脚本下载地址&#xff08;https://get.k3s.io&#xff09; 将准备好的文件上传到服务器上后&#xff0c;将k3s二进制文件及镜像包放到指定目录&#xff08;每…

大数据在线实习项目能收获什么呢?

大数据在线实习项目提供在线大数据项目&#xff0c;参与真实企业项目&#xff0c;可提供实习证明。 项目实习过程会根据项目背景、项目目标、项目数据来逐一展开&#xff0c;一个项目的项目周期大概为4周时间&#xff0c;同时也可以根据自身时间条件来调整。 项目涉及多方面知识…

CSC公派|高职院校教师赴澳大利亚大学访学

L老师只是高职院校护理与助产学专业教师&#xff0c;硕士学位&#xff0c;却能在众多申请者中脱颖而出&#xff0c;一举中榜。原因之一是接收学校专门设有护理与助产学院且排名靠前&#xff0c;导师的研究方向和L老师高度相符&#xff0c;在访学的必要性、可行性及应用前景上占…

线路测量通用公式的推导及编程

wyqzm网友&#xff1a; 问几个问题1、点到中线的垂距计算公式是怎么推导出来的&#xff0c;就是那个S&#xff1d;&#xff08;XA-XB&#xff09;SIN....我怎么也看不明白这是一个什么样的公式&#xff1f;别笑话哦&#xff01; 2、假如一条线路有很多的曲线组合&#xff0c;怎…

振弦采集模块UART 通讯协议

振弦采集模块UART 通讯协议 UART 接口支持标准的工业 MODBUS 通讯协议&#xff08; 03、 04、 06、 16 指令码&#xff09;和自定义的简单 AABB协议以及$字符串指令集。 前两种协议均支持基于模块地址和总线连接的一主多从应用结构&#xff0c; 在总线中&#xff0c; VMXXX 模…

记一次攻防演练之vcenter后渗透利用

1. 说明 很早之前的一次攻防演练&#xff0c;主要是从web漏洞入手&#xff0c;逐渐学习vcenter后利用技术。过程由于太长&#xff0c;很多细节都省略了&#xff0c;中间踩坑、磕磕绊绊的地方太多了。。。 由于敏感性&#xff0c;很多地方都是打码或者是没有图&#xff0c;按照…

synchronized关键字

多线程编程中&#xff0c;最让人头疼的问题莫过于线程安全&#xff0c;如果对存在线程安全问题的代码不加以处理&#xff0c;可能会带来严重的后果&#xff0c;例如用两个线程对同一个变量进行增加操作 class Counter {//这个 变量 是两个线程要去自增的变量public int count;…

进程调度算法详解

进程调度算法&#x1f3de;️1. 调度指标&#x1f301;2. 先进先出&#xff08;FIFO&#xff09;&#x1f320;3. 最短作业优先&#xff08;SJF&#xff09;&#x1f30c;4. 最短剩余时间优先&#xff08;STCF&#xff09;&#x1f33f;5. 新度量指标&#xff1a;响应时间&…

linux网络编程(四)多路I/O转接服务器

文章目录1.多路I/O转接服务器2.select 方式的多路I/O转接服务器3.poll 方式的多路I/O转接服务器4.epoll 方式的多路I/O转接服务器1.多路I/O转接服务器 多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是&#xff0c;不再由应用程序自己监视客户端连接&#xf…

利用stream实现行政区域列表转tree树形结构

一、数据结构 CREATE TABLE t_districts (adcode bigint NOT NULL COMMENT 主键(区域编码)\r\n,pid varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 父级区域编码,name varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci D…

MySQL的Redo log 、Undo log、 Binlog

MySQL的redo log 、undo log、 binlog redo log概念 redo log翻译过来叫重做日志&#xff0c;是一种保证持久化的措施&#xff0c;innodb存储引擎的物理日志文件 redo log是固定大小的&#xff0c;是循环写的过程 有了redo log之后&#xff0c;innodb就可以保证即使数据库发…

数据存储介绍

数据存储对象包括数据流在加工过程中产生的临时文件或加工过程中需要查找的信息。数据以某种格式记录在计算机内部或外部存储介质上。数据存储要命名&#xff0c;这种命名要反映信息特征的组成含义。数据流反映了系统中流动的数据&#xff0c;表现出动态数据的特征&#xff1b;…