当前位置: 首页 > news >正文

【万字总结】数据结构常考应用大题做法画法详解_树_哈希表_图_排序大总结

文章目录

  • 1.树相关应用大题
    • 1.1 已知二叉树的中序序列和前序or中序,画出二叉树
    • 1.2 二叉树的遍历、树的遍历、森林的遍历总结
    • 1.3二叉树与森林之间的转换
      • 1.3.1 已知树的先序序列和中序序列,画出森林
    • 1.4 二叉树的线索化
    • 1.5 二叉排序树
      • 1.5.1 二叉排序树的删除(重点)
      • 1.5.2 二叉排序树的ASL成功与ASL失败
    • 1.6 平衡二叉树
      • 1.6.1 平衡因子
      • 1.6.2 平衡二叉树的构建(插入)
  • 2.哈希函数
    • 2.1 拉链法求平均成功查找长度与查找失败长度
    • 2.2 开发地址法之线性探测法求平均成功查找长度与查找失败长度
    • 2.3 开发地址法之平方探测法求平均成功查找长度
  • 3.图的相关应用题
    • 3.1 根据图画邻接矩阵与邻接表(根据邻接矩阵与邻接表)
      • 3.1.1 画邻接矩阵
      • 3.1.2 画邻接表
    • 3.2 求图的强联通分量
    • 3.3 深度优先生成树与广度优先生成树
    • 3.4 哈夫曼树与哈夫曼编码
      • 3.4.1 哈夫曼树WPL
      • 3.4.2 构造哈夫曼树
    • 3.5 最小生成树
      • 3.5.1 prim算法
      • 3.5.2 克鲁斯卡尔算法
    • 3.6 最短路径
      • 3.6.1 迪杰斯特拉算法
    • 3.7 关键路径
  • 4.排序
    • 4.1 快速排序
    • 4.2 堆排序
    • 4.3 希尔排序
    • 4.4 归并排序
    • 4.5 基数排序

本篇文章的目的是,梳理一遍数据结构中容易出应用题的地方,整理成一个模版。

1.树相关应用大题

1.1 已知二叉树的中序序列和前序or中序,画出二叉树

在这里插入图片描述

1.2 二叉树的遍历、树的遍历、森林的遍历总结

  • 二叉树的遍历,分三种,不再赘述。
  • 树的遍历,分两种,先根遍历,后根遍历
    • 树的先根遍历序列=二叉树的先序遍历
    • 树的后根遍历序列=二叉树的中序遍历
  • 森林的遍历,分两种,先序遍历森林,中序遍历森林
    • 先序遍历森林=对各个树进行先根遍历
    • 后序遍历森林=对各个树进行后根遍历

1.3二叉树与森林之间的转换

孩子兄弟表示法

在这里插入图片描述

1.3.1 已知树的先序序列和中序序列,画出森林

在这里插入图片描述

点睛:树是二叉树(孩子兄弟表示法)森林可不是二叉的,就是普通的

1.4 二叉树的线索化

主要是将二叉树线索化成前序线索二叉树和后序线索二叉树

做题思路:
1.写出二叉树的前序序列或后序序列
2.填充,根据第一步写出的序列,比较着,将空闲的左子树指向前驱。将空闲的右子树指向后继。

1.5 二叉排序树

在这里插入图片描述

1.5.1 二叉排序树的删除(重点)

二叉排序树根据删除结点的情况可分为三种情况:

先搜索找到目标结点:
1️⃣若被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质。
2️⃣若被删除的结点只有左子树或右子树,直接让它的那个子树代替它的位置即可
3️⃣被删除的结点既有左子树又有右子树

  • 从左子树找到最大的结点,代替它的位置(即左子树最右下的结点)
  • 从右子树找到最小的结点,代替它的位置(即右子树最左下的结点)

在这里插入图片描述

1.5.2 二叉排序树的ASL成功与ASL失败

在这里插入图片描述
左图计算平均查找成功ASL,右图计算平均失败查找长度

查找成功:
(查询次数✖️同等查询次数结点数)➗结点总数
ASL=(1*1+2*2+3*4+4*1)/8=2.625

查找失败
(判断出是空子树需要的查找次数*这种情况的数量)/情况数
ASL=(3*7+4*2)/9=3.22

注意:空子树判断到它的父结点即可,意味着第四的空子树,判断次数是三。
注意ASL成功每一个结点都要判断,ASL失败每一个空子树都要判断。

1.6 平衡二叉树

平衡二叉树是一种特殊的二叉排序树

1.6.1 平衡因子

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

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

因此平衡二叉树所有结点的平衡因子只能是-1、0、1,如下图,是一个平衡二叉树
在这里插入图片描述

1.6.2 平衡二叉树的构建(插入)

根据插入位置不同,分为四种类型

  • LL(插入在左孩子的左子树)
  • RR(插入在右孩子的右子树)
  • LR(插入在左孩子的右子树)
  • RL(插入在右孩子的左子树)

为什么假定所有子树的高度都是H

如何调整最小不平衡子树?(笔试过程中,如何调整平衡二叉树)
方法提炼:从下往上,寻找到不平衡的结点,然后以该结点出发,往下再找两个结点,这个就是它局部最小的不平衡,然后调整根节点,三个数,找中间的数,为新的根节点,把它调整,其他的结点按照二叉排序树的规则填好就行。

在这里插入图片描述

真题:
1.已知关键字序列22,12,13,8,9,20,33,42,44,38,24,48,60,画出对应的平衡二叉树
在这里插入图片描述

2.哈希函数

2.1 拉链法求平均成功查找长度与查找失败长度

ASL成功要横着看,(一次查找到的结点数+2*两次的查到的结点数+…n*n次查到的结点数)/表中所有的结点数

ASL失败=表中所有的结点数/mod的数

解释说明,上面给出的ASL失败只是一种数值相等的公式,并不是理解。
拉链法中空指针算0次比较,所以拉链法在每一种查找失败的情况,就是该条链下结点的个数,mod的数,就是情况数,比如mod7,会得到0-6,7种情况。

例题如下:
【1999年 9分】
在这里插入图片描述
在这里插入图片描述

2.2 开发地址法之线性探测法求平均成功查找长度与查找失败长度

重点讲解:
1.当用哈希函数算完之后,使用线性探测的时候,要注意,分母变成了表长,不是哈希函数中的modx中的x,并且使用结果是上一步中哈希函数的结果,比如算完46%11=2,假设表长为13,线性探测就是(2+1)%13,而不是(46+1)%13,也不是(2+1)%11,这都是值得注意的。
2.在计算平均查找失败长度的过程中,每一次的情况是遇到空的时候就停止。
分母是映射空间,哈希函数是mod7,地址空间就是0-6,7种情况,从为0的情况出发一直加到6的情况
3.查找成功就是比较次数,这里不多说了

例题1:
在这里插入图片描述

例题2:

在这里插入图片描述

注意:计算ASL失败的时候,看的是映射空间 0-10 11种情况,地址为11的时候不计算ASL失败

例题3(手把手分析ASL失败和ASL成功)
在这里插入图片描述
在这里插入图片描述

分析:
ASL成功:分母是关键字的数目,分子就是插入过程中的比较次数
ASL失败:分母是情况数,mod取余13,那就是13种情况,即0-12地址。
分子:就是从当前地址出发(当前地址算比较一次),找到下一个空白块的比较次数,假如地址到头没找到,就按照计算的hash函数,12没找到,就从0找,1…2…3

2.3 开发地址法之平方探测法求平均成功查找长度

根据题目给出的Hi函数,来具体进行平方探测法的计算,本质和线性探测是一回事

注意,线性探测平方法是,1,-1,4,-4,9,-9 别算错了

例题1:
在这里插入图片描述
在这里插入图片描述

3.图的相关应用题

3.1 根据图画邻接矩阵与邻接表(根据邻接矩阵与邻接表)

3.1.1 画邻接矩阵

在这里插入图片描述

3.1.2 画邻接表

不带权的情况:
在这里插入图片描述

带权的情况,规范的画法,是表结点中,权值在前,连接的序号在后
在这里插入图片描述

3.2 求图的强联通分量

如何写出一个图中的所有强连通分量?
写出一个图中的所有强连通分量

3.3 深度优先生成树与广度优先生成树

本质上就是去掉多余的边

3.4 哈夫曼树与哈夫曼编码

3.4.1 哈夫曼树WPL

带权路径长度(WPL)是指树中所有叶子结点的带权路径长度之和。具体来说,每个叶子结点的权值与其到根结点的路径长度(即经过的边数)的乘积,称为该叶子结点的带权路径长度。所有叶子结点的带权路径长度之和,即为该树的带权路径长度。

在这里插入图片描述
图一:4个2条边的叶子结点
图二:2个3条边的叶子结点,1个2条边的叶子结点,1个1条边的叶子结点
图三:2个3条边的叶子结点,1个2条边的叶子结点,1个1条边的叶子结点
图四:2个3条边的叶子结点,1个2条边的叶子结点,1个1条边的叶子结点
乘上对应的权值

3.4.2 构造哈夫曼树

构造步骤:
1️⃣ 找到当前权值最小的两个结点(包括两个结点构造出的新结点)
2️⃣ 将这两个结点通过一个构造出的父结点联系起来,父结点的权值是他俩权值之和。
3️⃣重复上面的步骤,直到没有结点可以添加
在这里插入图片描述

3.5 最小生成树

3.5.1 prim算法

核心:加入点,加入的点和之前加入的点看成一个整体
从某一个顶点出发,每次将代价(权值)最小的新顶点,加入到点集中,记录他们之间的连接边,从这个点集出发,循环上面的过程,将新结点加入,直到所有结点都加入进点集中。

时间复杂度:O(|v|2),适用于边稠密图

例题:
在这里插入图片描述
在这里插入图片描述

3.5.2 克鲁斯卡尔算法

核心:加入边

每次选择代价最小的边,让这条边的两头连通(原本已经连通的不选),直到所有结点都连通。
时间复杂度:O(|E|log2|E|),适用于边稀疏图

3.6 最短路径

3.6.1 迪杰斯特拉算法

理论方法学习:迪杰斯特拉算法求最短路径

例题1:给出一个无向图,从A出发用迪杰斯特拉算法写出到达每个顶点的最短路径

在这里插入图片描述

3.7 关键路径

解题思路:
拓扑排序决定了事件最早的发生的顺序
逆拓扑排序决定了事件最晚发生的顺序

起点和终点的事件最早发生时间和事件最晚发生时间相同。

做题逻辑顺序:
1.写出拓扑排序和逆拓扑排序
2.由拓扑排序写出事件的发生顺序,开始算事件最早发生时间。起点的最早发生时间是0,从这开始写。下一个事件的最早发生事件,看前面的事件+最长的活动时间(就是最晚),到达下一个事件的时间就是算事件最早发生时间,以此类推。总结就是**,从前往后找最大**
3.从逆拓扑排序开始写,事件的最晚发生事件,由起点和终点的事件最晚发生时间相同,开写,看看前面最短的活动时间,前面事件的最早开始事件-最短的活动时间,总结就是从后往前找最小
4.活动最早的开始时间:就是活动弧尾指向事件的最早发生事件
5.活动最晚的开始时间:是活动弧头指向事件的最晚发生时间-活动时间

大总结,小口诀:

事件时间起手求,从前往后找最大,从后往前找最大
活动时间用箭头,最早弧尾,最晚弧头减活动。
注意:
终点事件的最晚发生时间就是关键路径长度
事件最早发生时间和最晚发生时间相同的事件就是关键事件
活动时间差值为0的活动就是关键路径,它的路径就是关键路径

多路径事件最早发生时间选最长的
多路径事件最晚发生时间选最短的
活动最早发生时间—弧尾顶点,最早发生时间
活动最晚发生时间----弧头顶点最迟发生时间-权值
弧头有箭头,弧尾没箭头
事件时间整体算,就是每次以起点或者终点找路径计算。

例题2:
在这里插入图片描述
在这里插入图片描述

4.排序

4.1 快速排序

真题1:
在这里插入图片描述
在这里插入图片描述
真题2:
在这里插入图片描述

在这里插入图片描述

4.2 堆排序

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

4.3 希尔排序

在这里插入图片描述

4.4 归并排序

算法思想:
把两个或多个已经有序的序列合并成一个序列,合并的过程,就是两个有序序列依次对比把更小(或更大的拿出来合并)。

算法流程:
以二路归并为例
在这里插入图片描述

从每一个元素都是一个队列开始都是一个独立的有序序列,相邻两个元素合并成一个,在排好序,以此类推,不断将相邻的两个有序序列合并并排好序,直到就剩一个有序序列为止。

4.5 基数排序

0到9写标号
升序,从左往右收集。将序,从右往左收集。
整体都是从上到下收集
在这里插入图片描述

题目来源:计算机2018年真题

相关文章:

【万字总结】数据结构常考应用大题做法画法详解_树_哈希表_图_排序大总结

文章目录 1.树相关应用大题1.1 已知二叉树的中序序列和前序or中序,画出二叉树1.2 二叉树的遍历、树的遍历、森林的遍历总结1.3二叉树与森林之间的转换1.3.1 已知树的先序序列和中序序列,画出森林 1.4 二叉树的线索化1.5 二叉排序树1.5.1 二叉排序树的删除…...

Docker + Jenkins + gitee 实现CICD环境搭建

目录 前言 关于Jenkins 安装Jenkins docker中运行Jenkins注意事项 通过容器中的Jenkins,把服务打包到docker进行部署 启动Jenkins 创建第一个任务 前言 CI/CD(持续集成和持续交付/持续部署),它可以实现自动化的构建、测试和部署…...

rabbitMq怎么保证消息不丢失?消费者没有接收到消息怎么处理

在使用RabbitMQ时,保证消息不丢失以及处理消费者未接收到消息的情况可以通过以下几个方法: 1. 确保消息的持久化 队列持久化:在声明队列时将其设置为持久化(durabletrue),这样RabbitMQ在重启后也会保留队…...

商务数据分析在提升客户体验方面的作用体现在哪些环节

在当今竞争激烈的商业环境中,客户体验已成为企业成功的关键因素。商务数据分析犹如一把神奇的钥匙,在提升客户体验的征程中发挥着至关重要的作用,贯穿于多个环节。 一、客户需求分析:洞察客户内心的窗口 客户需求分析是商务数据…...

cooladmin使用整理

1、后端关键字自动生成没有代码段提示,原因是拉取的项目代码中没有.vscode文件夹,复制一套至项目src同级即可 2、前端快速创建,在Entity完成后就去快速创建中选数据结构,这时没有对应的内容,数据结构是和controller层a…...

CentOS 7 更换软件仓库

CentOS 7 于2024年6月30日停止维护,官方仓库已经没有软件了,想要继续使用 ,需要更换软件仓库,这里更换到阿里云的软件仓库 https://developer.aliyun.com/mirror/ 查看目前可用的软件数量 yum repolist 更换软件仓库&#xff1a…...

现代Web开发:React Hooks深入解析

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 现代Web开发:React Hooks深入解析 现代Web开发:React Hooks深入解析 现代Web开发:React Hook…...

HarmonyOS使用arkTS拉起指定第三方应用程序

HarmonyOS使用arkTS拉起指定第三方应用程序 前言代码及说明bundleName获取abilityName获取 前言 本篇只说采用startAbility方式拉起第三方应用,需要用到两个必备的参数bundleName,abilityName,本篇就介绍如何获取参数… 代码及说明 bundle…...

flex安装学习笔记

https://zhuanlan.zhihu.com/p/2783726096 3.下载 Flux 模型 FLUX.1 [dev] :官方版本满配版,最低显存要求 24G;FLUX.1 [dev] fp8:大佬优化 [dev] 后版本,建议选择此版本,最低 12G 显存可跑;FLU…...

09-结构化搜索、搜索的相关性算分

term 查询执行精确值匹配,要求文档中的字段值与指定的词项完全相等。对于日期字段等精确值字段,通常使用 term 查询可以快速有效地匹配文档。match 查询执行全文搜索,会对输入的文本进行分析,生成查询词项,并试图找到与…...

手机屏幕上进行OCR识别方案

在手机屏幕上进行OCR识别,可以通过一些主流方案实现高效、准确的文本识别。以下是几种常见方案: 1. 使用 Tesseract OCR 原理:Tesseract 是一个开源的 OCR 引擎,支持多种语言。可以通过一些优化提升其对手机屏幕文本的识别效果。…...

遗传算法与深度学习实战(22)——使用Numpy构建神经网络

遗传算法与深度学习实战(22)——使用Numpy构建神经网络 0. 前言1. 神经网络基础1.1 简单神经网络的架构1.2 神经网络的训练 2. 使用 Numpy 构建神经网络2.1 网络架构2.2 实现神经网络 小结系列链接 0. 前言 我们已经学习了如何使用进化算法来优化深度学…...

react->Antd->Table调整checkbox默认样式

checkbox默认不展示,hover此行时,出现checkbox,选中后不消失: hover前,设置透明边框; hover时,checkbox出现 选中后 代码块: .ant-checkbox {.ant-checkbox-inner {border: transparent;}}.ant…...

一种ESB的设计

系统架构 ESB包括: ESB总控服务、业务应用集群、业务消息WEB服务、业务消息日志服务、运维管理平台、业务设计器。如下图所示 ESB总控服务 ESB总控服务承载了各项业务的运维和管理。主要包括: 业务流程的管理ESB内部不同模块间的通讯ESB系统设置和管理…...

上位机常用通信方式

1. 串口通信:RS232(设备和PC之间,最常用,短距离)、RS485(工业现场总线,长距离,多点通信) 2. 以太网通信:TCP/IP协议 3. CAN总线通信 4. Modbus协议&#xff1…...

Vue3中使用LogicFlow实现简单流程图

实现结果 实现功能&#xff1a; 拖拽创建节点自定义节点/边自定义快捷键人员选择弹窗右侧动态配置组件配置项获取/回显必填项验证 自定义节点与拖拽创建节点 拖拽节点面板node-panel.vue <template><div class"node-panel"><divv-for"(item, k…...

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式 《重学Java设计模式》之 原型模式 《重学Java设计模式》之 单例模式 模拟发奖多种商品 工程结构 奖品发放接口 package com.yys.mes.design.factory.store;public interface ICommodity {/*** Author Sherry* Date 14:20 2024/11/6**/voi…...

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …...

知识竞赛答题系统,线上答题小程序链接怎么做?

随着智能手机的普及&#xff0c;越来越多的单位开始在线上开展知识竞赛。这种形式的知识竞赛不仅易于操作&#xff0c;而且参与度更高。那么线上知识竞赛答题系统怎么做呢&#xff1f;自己可以做吗&#xff1f;答案是可以的&#xff01;借助微信答题系统制作平台风传吧&#xf…...

基于SSM的社区物业管理系统+LW参考示例

1.项目介绍 系统角色&#xff1a;管理员、业主&#xff08;普通用户&#xff09;功能模块&#xff1a;管理员&#xff08;用户管理、二手置换管理、报修管理、缴费管理、公告管理&#xff09;、普通用户&#xff08;登录注册、二手置换、生活缴费、信息采集、报事报修&#xf…...

无需编程!用OFA模型快速搭建图文匹配工具:上传即测,结果秒出

无需编程&#xff01;用OFA模型快速搭建图文匹配工具&#xff1a;上传即测&#xff0c;结果秒出 1. 图文匹配的痛点与解决方案 你有没有遇到过这样的困扰&#xff1f;在网上购物时&#xff0c;商品图片和描述对不上&#xff1b;浏览社交媒体时&#xff0c;配图与文字内容完全…...

基于S7-200 PLC与组态王的大棚控制系统:产品原理图与IO分配详解

基于S7-200 PLC和组态王温室大棚控制 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面 菜农张叔上周还给我打电话吐槽&#xff1a;“小王啊&#xff0c;上周那场降温加突然转晴&#xff0c;我三点爬起来盖半层棉被…...

著名学者、顶尖大学教授近期失联

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号&#xff1a;CVer2233&#xff0c;小助手拉你进群&#xff01;扫描下方二维码&#xff0c;加入CVer学术星球&#xff01;可以获得最新顶会/顶…...

ai辅助开发:让快马平台为你的arduino项目注入智能决策与学习能力

AI辅助开发&#xff1a;让快马平台为你的Arduino项目注入智能决策与学习能力 最近在做一个智能垃圾分类的小项目&#xff0c;用Arduino控制各种传感器和舵机来实现自动分类。这个过程中发现&#xff0c;手动编写所有判断逻辑和阈值调整特别耗时&#xff0c;于是尝试用InsCode(…...

从YAML到PyTorch模型:拆解Ultralytics YOLO V8/V11中`parse_model`函数的完整工作流

从YAML到PyTorch模型&#xff1a;拆解Ultralytics YOLO V8/V11中parse_model函数的完整工作流 在计算机视觉领域&#xff0c;YOLO系列模型因其卓越的实时检测性能而广受开发者青睐。Ultralytics团队推出的YOLO V8/V11版本不仅延续了这一优势&#xff0c;更通过精心设计的配置文…...

基于springboot的中医院问诊知识科普系统的设计与实现-vue

目录系统架构设计前端技术选型模块划分关键技术实现开发阶段规划部署方案项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统架构设计 采用前后端分离架构&#xff0c;前端使用Vue.js框架&#xff0c;后端基于SpringBoot构建R…...

Beekeeper Studio:现代跨平台数据库管理工具的技术架构与实战应用

Beekeeper Studio&#xff1a;现代跨平台数据库管理工具的技术架构与实战应用 【免费下载链接】beekeeper-studio beekeeper-studio/beekeeper-studio: Beekeeper Studio 是一款开源的跨平台数据库客户端工具&#xff0c;支持多种数据库&#xff08;如MySQL, PostgreSQL, SQLit…...

【Hot 100 刷题计划】 LeetCode 138. 随机链表的复制 | C++ 链表深拷贝题解

LeetCode 138. 随机链表的复制 | C 哈希表 DFS 深拷贝题解 &#x1f4cc; 题目描述 题目级别&#xff1a;中等 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 请你构造这个链表的深拷…...

Excel办公必备4个技巧:格式转换、隔列插入、限制编辑、文本数字分离

在日常办公中&#xff0c;Excel是我们使用频率最高的软件之一&#xff0c;但很多人只掌握了最基础的录入和简单计算功能&#xff0c;遇到一些“卡脖子”的小问题就束手无策&#xff0c;不得不手动折腾半天。其实&#xff0c;Excel中隐藏着不少实用的小技巧&#xff0c;能帮你轻…...

语义分割竞赛必备:5种Loss函数组合效果对比(含Dice+Focal Loss调参指南)

语义分割竞赛进阶&#xff1a;5种损失函数组合实战评测与调参策略 在Kaggle等数据竞赛中&#xff0c;语义分割任务的性能提升往往取决于损失函数的巧妙选择与组合。不同于常规分类任务&#xff0c;多类别像素级预测需要处理极端类别不平衡、边界模糊等独特挑战。本文将深入剖析…...