数据结构学习(四)高级数据结构

news2024/11/27 2:32:51

高级数据结构

1. 概念

之所以称它们为高级的数据结构,是因为它们的实现要比那些常用的数据结构要复杂很多,能够让我们在处理复杂问题的过程中,
多拥有一把利器,同时掌握好它们的性质,以及所适应的场合,在分析问题的时候回归本质,那么很多问题都能迎刃而解了。

2. 总结

1> 前缀树

题目说明实现
1268. 搜索推荐系统一眼前缀树我的提交
1233. 删除子文件夹使用哈希表存储子前缀树,ref存储在列表中的位置我的提交
140. 单词拆分 II前缀树我的提交
212. 单词搜索 II对已搜索到的单词剪去,大大降低搜索时间我的提交
648. 单词替换前缀树我的提交

2> 树状数组
①普通
②离散化

题目说明实现
315. 计算右侧小于当前元素的个数前缀和我的提交
2250. 统计包含每个点的矩形数目前缀和我的提交
775. 全局倒置与局部倒置前缀和我的提交
327. 区间和的个数记录前缀和,每个i结尾的合法区间数 = 特定区间内前缀和的的数目,数据太大所以预处理离散化我的提交

3> 跳表

原理:部分链表结点提出来,再构建出一个新的链表,跳表使用空间换时间的设计思路,通过构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。跳表是一种动态数据结构,支持快速地插入、删除、查找操作,时间复杂度都是 O(logn)。

查询:要查询一个数据的时候,我先查上层的链表,就很容易知道数据落在哪个范围,然后跳到下一个层级里进行递归查询

三层跳表查询id为10的数据

**插入:**需要某种手段来维护索引与原始链表大小之间的平衡,因此在插入时可以选择同时将这个数据插入到部分索引层中。而我们通过一个随机函数,来决定将这个结点插入到哪几级索引中

img

**删除:**删除原链表中的节点,如果节点存在于索引中,也要删除索引中的节点,如果在删除操作后某些层变得空了(即除了头节点外没有其他节点),那么需要减少跳表的高度并移除这些空的层。

4> LRU缓存

## LRU
LRU 是 Least Recently Used 的缩写,即最近最少使用,是一种常见的页面置换算法。LRU 算法的基本理念是:最近使用的数据在未来一段时间仍会被使用,
已经很久没有使用的数据可能在未来较长的一段时间内不会被使用。所以在需要淘汰页面时,每次选择淘汰最久没有被访问的页面。
## 数据结构
通过 golang 内置的双向链表 list.List 存储每个节点,同时维护一个哈希表,可快速判断需要加载的数据是否已经在链表中存在,无须遍历链表查找,典型
的以空间换时间的方式。

5> B+树

  • 每个分支节点最多有m棵子树(孩子节点);

  • 非叶根节点至少有两棵子树,其他每个分支节点至少有⌈m/2⌉棵子树;

  • 节点的字数个数与关键字个数相等;

  • 所有叶节点包含全部关键字及指向相应记录的指针,叶节点中将关键字按大小顺序排列,并且相邻叶节点按大小顺序相互链接起来;

  • 所有分支节点(可视为索引的索引)中仅包含他的各个子节点(即下一级的索引块)中关键字的最大值及指向其子节点的指针。

在这里插入图片描述

6> 红黑树

是一种自平衡的二叉搜索树,它在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍(因此红黑树的平衡性要求相对宽松),从而使搜索树达到一种相对平衡的状态。

img

性质:

根结点必须是黑色的
每个叶子结点都是黑色的(此处的叶子结点指的是空结点,也被称为NIL节点)
红色结点的两个子结点必须都是黑色的,这保证了没有两个连续的红色节点相连
任意结点到其每个叶子结点的简单路径上,黑色节点的数量相同:确保了树的黑平衡性,即红黑树中每条路径上黑色结点的数量一致。

实现:

const (
	RED = true
	BLACK = false
)
type Node struct {
	Parent *Node
	Left   *Node
	Right  *Node
	color  bool
	Item
}
  • 为什么最长路径是最短的两倍?
如果有一条全黑的路径,那这条全黑的路径一定就是最短路径;如果有一条是严格黑红相间的,那他就是最长的路径。
然后它们里面的黑色结点个数又是相同的的,所以最长路径最多是最短路径的两倍,不可能超过最短路径两倍。
  • 每个叶子结点都是黑色的(此处的叶子结点指的是空结点,也被称为NIL节点),有什么用?

img

为了更好的帮我们区分不同路径的,如果不带空的话,我们可能会认为有5条,但是这里计算路径其实应该走到空(NIL),所以正确的应该是有11条路径。

  • 为什么不用AVL树要用红黑数?

红黑树的查找效率是比不上AVL树的,最大为2logn(但对于计算机来说是没什么差别的,因为它们是同一个数量级的)

但是,由于AVL树要求更加严格的平衡,所以在进行插入和删除操作时,可能需要更频繁地进行旋转操作来调整树的结构,以保持平衡。相比之下,红黑树的插入和删除操作需要旋转的次数相对较少,因此在插入和删除操作频繁的情况下,红黑树可能更加高效。

7> 哈夫曼树

  • 给定n个权值作为个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树Huffman Tree,还有的书翻译为霍夫曼树。

  • 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

    img

1)从小到大进行排序,每个节点可以看成是一颗最简单的二叉树,得到一个森林

2)取出根节点权值最小的两颗二叉树

3)组成一颗新的二叉树,该新的二叉树的根节点的权值是前面两颗二叉树根节点权值的和,删除原来两颗二叉树,将这颗新的二叉树加入森林

4)再次排序,不断重复1-2-3-4的步骤,直到数列中,所有的数据都被处理,就得到一颗哈夫曼树

哈夫曼编码

要设计长度不等的编码,则必须使任一字符的编码都不是另一字符编码的前缀(称为前缀编码)

统计字符集中每个字符在电文中出现的平均频率(概率越大,要求编码越短)。
利用哈夫曼树的特点:权越大的叶子离根越近;将每个字符的概率值作为权值,构造哈夫曼树。
在哈夫曼树的每个分支上标0或1:结点的左分支标0,有右分支标1。
把从根到每个叶子的路径上的标号连接起来,作为该叶子代表的字符的编码。

img

3. 更多练习

4. 参考

  1. 哈夫曼树&哈夫曼编码
  2. B+树
  3. 总库:tryHard

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

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

相关文章

第十篇:如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先…

基于springboot+vue实现食品安全管理系统项目【项目源码+论文说明】

基于springboot实现食品安全管理系统演示 摘要 食品行业同其他行业有很多的差别,食品行业不仅要管食品的生产和销售,还要管食品的库存和保质期,那么对于食品管理者来说,就存在着一定的难度。况且食品的种类复杂,存储条…

ZWT_各向同性线弹性材料本构模型umat的应用

线弹性材料本构模型 对于多数材料而言,在微小变形的假设下,会满足线弹性理论,数学可以表示为: σ i j C i j k l ε k l E 1 ν ( ε i j ν 1 − 2 ν ε k k δ i j ) \begin{align*} \sigma_{ij}&C_{ijkl}\varepsilon…

风丘道路载荷数据采集(RLDA)测试方案

一 背景 整车厂在汽车上市前,了解产品所能承受的载荷是非常重要的,因此需进行道路载荷数据采集(RLDA)测试。通过获得车辆在实际试验场或公路道路中行驶的载荷信息来为整车台架道路模拟试验提供目标信号输入,以及为用于…

android高级面试题及答案,已拿offer

一、java相关 java基础 1、java 中和 equals 和 hashCode 的区别 2、int、char、long 各占多少字节数 3、int 与 integer 的区别 4、谈谈对 java 多态的理解 5、String、StringBuffer、StringBuilder 区别 6、什么是内部类?内部类的作用 7、抽象类和接口区别 java高…

无人机生态环境监测、图像处理与GIS数据分析

构建“天空地”一体化监测体系是新形势下生态、环境、水文、农业、林业、气象等资源环境领域的重大需求,无人机生态环境监测在一体化监测体系中扮演着极其重要的角色。通过无人机航空遥感技术可以实现对地表空间要素的立体观测,获取丰富多样的地理空间数…

将ppt里的视频导出来

将ppt的后缀从pptx改为zip 找到【media】里面有存放图片和音频以及视频,看文件名后缀可以找到,mp4的即为视频,直接复制粘贴到桌面即可。 关闭压缩软件把ppt后缀改回,不影响ppt正常使用。

【Redis】Redis持久化模式RDB

目录 引子 RDB RDB的优缺点 小节一下 引子 不论把Redis作为数据库还是缓存来使用,他肯定有数据需要持久化,这里我们就来聊聊两种持久化机制。这两种机制,其实是 快照 与 日志 的形式。快照:就是当前数据的备份,我可以拷贝到磁…

Docker入门——安装部署(openEuler)、镜像加速

安装 1)依赖的基础环境 64 位CPU Linux kernel(内核) 3.10 Linux kernel cgroups and namespaces 我用的是openEuler,所以直接yum安装(推荐,因为二进制安装,docker命令中补全操作要另外安装软件) [rootlocalhost ~]# yum -y…

WordPress 从入门到精通【设置 WordPress】

前言:为方便演示,前几张图使用 Playground 环境截取 如果你还不会部署WordPress,请看下面的链接并使用雨云可视化构建一个WordPress站点: 超简单EP面板搭建WordPress网站教程 - 风屿岛 10 (biliwind.com) 进入仪表盘 在搭建完…

华为Web举例:私网用户通过三元组NAT访问Internet

Web举例:私网用户通过三元组NAT访问Internet 介绍私网用户通过三元组NAT访问Internet的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网中10.1.1.0/24网段的用户可以正常访问Internet,需要在FW上配置源NAT策略。除了公网接口…

flutter旋转动画,算法题+JVM+自定义View

在很多的博客或者书上,说有三种,除了上述的两种以外,还有一种是实现Callable接口。但是这种并不是,因为,我们检查JDK中Thread的源码,看它的注释: There are two ways to create a new thread o…

人工智能艺术的简要时间表

一、简述 技术在任何形式的艺术发展中始终发挥着关键作用。从通过化学发明颜色到通过数学发现分形:艺术、文化和技术是无法完全分开的三个维度。 计算机也不例外,它们从一开始就被用来帮助艺术家,常常揭示出我们无法看到的美丽的复杂性。数字…

【Java基础教程】(三十)Java新特性篇 · 第十讲: Stream流——释放流式编程的效率与优雅,狂肝万字只为透彻讲清 Stream流!~

Java基础教程之新特性 Stream流 1️⃣ 概念及特征2️⃣ 优势和缺点3️⃣ 使用3.1 语法3.2 常用API详解3.3 案例 4️⃣ 应用场景5️⃣ 使用技巧6️⃣ 并行流 ParallelStream🌾 总结 1️⃣ 概念及特征 Java的Stream流是在Java 8中引入的一种用于处理集合数据的功能强…

【Linux篇】Linux下的第一个小程序--进度条 蹦迪炫彩进图条

💛不要有太大压力🧡 💛生活不是选择而是热爱🧡 文章目录 Linux下第一个小程序:进度条两个背景知识缓冲区回车和换行是一个概念? 进图条原理进度条代码效果其他玩法:蹦迪版进度条 Linux下第一个小…

SpringBoot集成flink

Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。 最大亮点是流处理,最适合的应用场景是低时延的数据处理。 场景:高并发pipeline处理数据,时延毫秒级,且兼具…

永别了,垃圾病毒山寨软件!

在下载软件这一块,电脑与手机最大的不同就是手机有专门的应用商店,而电脑我们却只能使用搜索引擎找寻软件官网下载,这对于大多数对电脑不熟悉的人来说,很可能会下载到恶意病毒软件。 尽管从Win10开始,微软已经在系统中…

【kubernetes】关于k8s集群的存储卷

目录 一、存储卷的分类 二、empty存储卷以及特点 三、hostpath存储卷以及特点 四、nfs存储卷以及特点 五、pvc存储卷 查看pv的定义 查看pvc的定义 实操:静态创建pv的方式 实现pvc存储卷 步骤一:先完成nfs的目录共享,需要准备不同的目…

原油数据处理:1.聚类、盐含量测定与近红外光谱快速评估

一、原油种类的聚类分析 在塔里木盆地塔河油田的原油处理过程中,需要对原油进行地球化学特征研究,以了解其成因和特征。根据地球化学手段的综合研究结果,塔河油田奥陶系原油属于海相沉积环境,成熟度较高,正构烷烃分布…

Python爬虫实战第三例【三】【上】

零.实现目标 爬取视频网站视频 视频网站你们随意,在这里我选择飞某速(狗头保命)。 例如,作者上半年看过的“铃芽之旅”,突然想看了,但是在正版网站看要VIP,在盗版网站看又太卡了,…