HsahMap 之红黑介绍

国科大 雁栖湖校区 研一上 课程避坑与生存指南 本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。 阅读详情

一. 二叉树概述


二叉树是递归定义的,其节点有左右子树之分

1.1 二叉树特性:


每个节点最多只有两颗子树,节点的度最大为2
左子树和右子树是有顺序的,次序不能颠倒
即使某个节点只有一个子树,也要区分左右子树

 

1.2 二叉树基本形态:


逻辑上二叉树有五种基本形态:

空二叉树
只有一个根节点的二叉树
只有左子树
只有右子树
完全二叉树

è¿éåå¾çæè¿°
二. 二叉查找树BST


二叉查找树 - BST树:Binary Search Tree,或二叉搜索树

  • 2.1 BST特性:

BST树要么是一颗空树
BST树要么满足以下3个条件的二叉树: 
1. 节点的左子树所包含的节点的值都小于该节点的值 
2. 节点的右子树所包含的节点的值都大于等于该节点的值 
3. 左子树和右子树也都是BST树
一颗典型的二叉查找树 

è¿éåå¾çæè¿°

  • 2.2 BST优点

二叉查找树这样数据结构有什么好处呢? 
我们来试着查找值为11的节点:

a. 查看根节点8

è¿éåå¾çæè¿°
b. 由于11>8,因此查看8节点的右孩子12

è¿éåå¾çæè¿°
c. 由于11<12, 因此查看12节点的左孩子10

è¿éåå¾çæè¿°
d. 由于11>10,因此查看10节点的右孩子11,发现11节点正是需要查找的节点

è¿éåå¾çæè¿°
这种查找方式正是二分查找的思想,查找所需的最大次数等于二叉查找树的高度

  • 2.3 BST缺点

二叉查找树的插入类似于查找,通过一层一层比较大小,找到新节点适合插入的位置 
但是二叉查找树存在缺陷:当插入的数据过于特殊,二叉查找树会变瘸,导致空间浪费和查找效率变低 
我们来试着看下面的情况:

a. 假设最初的二叉查找树只有3个节点,如图

è¿éåå¾çæè¿°
b. 依次插入如下4个节点:7,6,5,4,结果会变为:

è¿éåå¾çæè¿°
这样的形态虽然也符合二叉查找树的特性,但是浪费空间,查找性能大打折扣 
那如何解决二叉查找树因为插入节点而导致的不平衡呢? 
这就要用到平衡二叉树了

三. 平衡二叉树


平衡二叉树 - 本质上仍是一颗二叉搜查找树BST

  • 3.1 平衡二叉树特性:

AVL树首先是二叉查找树BST
带有平衡条件:任何节点的左右子树的高度之差的绝对值(平衡因子)最多为1

  • 3.2 平衡二叉树常用实现:

平衡二叉树的常用实现方法有红黑树、AVL树、替罪羊树、Treap、伸展树等 

è¿éåå¾çæè¿°
四. 红黑树


红黑树(Red Black Tree) 是一种近似平衡二叉查找树,在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能

  • 4.1 红黑树特性

节点是红色或者黑色
根节点是黑色
每个叶子节点都是黑色的空节点(NULL节点)
每个红色节点的两个子节点都是黑色(从根到每个叶子节点的所有路径上不能有两个连续的红色节点)
从任一节点到该节点的每个叶子节点的所有路径都包含相同数目的黑色节点
这些约束强制了红黑树的关键性质: 红黑树从根到叶子的最长路径不会超过最短路径的两倍,所以红黑树只是近似的平衡二叉树,牺牲了些许平衡性换来的是增删操作的简单性

è¿éåå¾çæè¿°

  • 4.2 红黑树调整

当插入或删除节点时,红黑树的规则有可能被打破,这时候需要做出一些调整,继续维持红黑树的规则 
调整一般分两类:

颜色调整:改变某个节点的颜色
结构调整:改变树的结构 - 左旋和右旋
a. 插入的节点为红色
为什么插入节点会被着色为红色,而不是黑色呢? 
因为着色为黑色会违背红黑树特性的最后一条,所以每次插入的都是红色节点

b. 左旋
左旋:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。说起来很怪异,看下图:

 è¿éåå¾çæè¿°
图中,身为右孩子的Y取代了X的位置,而X变成了自己的左孩子,而x < b < y,所以b的位置也要移动

c. 右旋
右旋:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。看下图: 
 è¿éåå¾çæè¿°
图中,身为左孩子的Y取代了X的位置,而X变成了自己的右孩子,而y < c < x,所以c的位置也要移动

五. 红黑树插入

 

  • 5.1 场景一

该树为空树,直接在根节点处插入一个红色节点,违反红黑树规则1,需要变色调整 - 将节点颜色改为黑色

  • 5.2 场景二

插入节点的父节点为黑色,没有违反任何红黑树规则,不需要做调整

  • 5.3 场景三

插入节点为红色,插入节点的父节点为红色,则一定存在:

根据规则4,插入节点一定有祖节点,且为黑色

UNet 改进(27):结合SCSE注意力机制的UNet网络实现 本文介绍了一种结合SCSE注意力机制的改进UNet网络架构。该网络在保持UNet经典编码器-解码器结构基础上,通过在每层添加SCSEBlock模块,融合了通道注意力和空间注意力机制。通道注意力通过全局池化和1×1卷积生成通道权重,空间注意力则产生空间权重图,二者相加增强关键特征响应。该设计具有以下优势:1)保持原始UNet的多尺度特征提取能力;2)通过注意力机制提升对重要区域的关注度;3)计算效率高,仅增加少量参数。测试显示网络能保持输入输出分辨率不变,适用于医学图像分割等像素级预测任务。完整代码实现了5层 阅读详情

相关推荐

国产化软件设计:遵循信创要求,助力信息技术自主创新

支持国产操作系统、CPU、数据库和中间件。确保网络通信的身份鉴别、数据传输机密性和完整性。实现应用和数据层的身份鉴别、数据传输机密性完整性、数据存储机密性完整性。依托法院密码服务平台提供的商用密码能力。

qq_41186565的博客 3373

HsahMap的原理

这个问题应该是面试常问到的。刚刚百度了,感觉有点收获,感觉记下来。 它的优点:因为不是线程安全的,所以访问速度会比较快。 通过hashcode方法来确定entry对象放在bucket中的位置。 如果键值得hashcode值相同,就比较键值是否相同,相同怎新值覆盖旧值。 不同,则会发生冲突。解决的办法一般是:开放地址法,链表法。 因为HashMap使用LinkedList存储对象,

小学生的博客 903

图像质量评估(9) -- 杂散光(Flare)的测量标准与实战解析

本文深入解析了杂散光(Flare)对图像质量的影响及其测量标准,包括ISO 9358和ISO 18844的核心方法。通过实战指南和优化策略,帮助读者掌握杂散光的测量与控制技术,提升光学系统性能。

sql99的博客 252

HashMap原理讲解(一) - 红黑树

一. 二叉树概述二叉树是递归定义的,其节点有左右子树之分1.1 二叉树特性: 每个节点最多只有两颗子树,节点的度最大为2 左子树和右子树是有顺序的,次序不能颠倒 即使某个节点只有一个子树,也要区分左右子树 1.2 二叉树基本形态:逻辑上二叉树有五种基本形态: 空二叉树 只有一个根节点的二叉树 只有左子树 只有右子树 完全二叉树 二. 二叉查找树BST二叉查找树 - BST树:Binary Searc

李平安 8887

开源代码分享(29)-基于拉丁超立方抽样的风光场景生成和削减

作为分层抽样方法的一 种,拉丁超立方抽样具有良好的抽样精度和效率[14]。本文使用多场景方法来描述可再生能源(风电、光伏)的不确定性。以风电功率为例,首先假定风电功率服从正态分布 N(μ, δ 2 ),μ 为预测值的期望值,δ 为其波动的百分比。接着,采用拉丁超立方抽样[21]生成大量服从概率分布约束的风电出力场景,并采用考虑 Kantorovich 距离[22]的场景削减技术处理该场景,进行场景削减。最后,导出具有相应概率的削减之后的场景。

配电网和matlab的博客 924

解读文献(五)------基于阻抗控制

文章目录背景主动柔顺控制阻抗控制基于力的阻抗控制基于位置的阻抗控制力位混合控制 背景 主动柔顺控制 阻抗控制 基于力的阻抗控制 基于位置的阻抗控制 力位混合控制 ...

accumulation 1万+

Java8中HashMap为什么要用红黑树?

前言 在jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度。 java8中HashMap数据结构 什么是红黑树? 红黑树(Red Black Tree)是一颗自平衡(self-balancing)的二叉排序树(BST),树上的每一个结点都遵循下面的规则(特别提醒,这里的自平衡和平衡二叉树AVL的高度平衡有别): 1.每一个结点都有一个颜色,要么为红色,要么为黑色; 2.树的根结点为黑色; 3.树中不存在两个相邻的红色结点(即红色结点的父结

weixin_42261238的博客 2282

【K210+STM32项目】基于K210与STM32协同工作的智能垃圾分类系统设计与实现(更新3.0版本)(完整工程资料源码)

STM32F407STM32F407_2(含有app功能)

嵌入式技术开发 2497

简述HashMap的工作原理

HashMap和HashTable的区别 主要的区别有:线程安全性,同步(Synchronization),速度。 HashMap是非Synchronized的,HashTable是Synchronized的(ConcurrentHashMap替代HashTable);即HashMap是非安全的,HashTable是安全的; HashMap可以接受为Null的键(Key)和值(Value),...

liangsw 2915

【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记使用说明及章节导航

本文档汇总了王道考研408计算机网络和湖科大教书匠计算机网络课程的重点内容,包括计算机网络体系结构、物理层、数据链路层、网络层、传输层和应用层的详细讲解。通过ISO/OSI和TCP/IP模型,深入探讨了通信基础、介质访问控制、IP地址、TCP/UDP协议、流量控制和网络编程等关键概念。此外,还提供了Linux网络编程实践,帮助读者巩固理论知识

快乐江湖的博客 2万+

LangGraph实战训练营-从零构建AI驱动的wiki知识库

本文深入解析 LangChain 团队开源的 Deep Agents 框架核心示例——LLM Wiki,一个基于大语言模型自动构建和维护持久化知识库的生产级 AI Agent 系统。文章从项目架构、环境搭建、核心原理到实战操作全面展开:详解 CompositeBackend 组合后端与细粒度权限控制的安全设计、四种工作模式(初始化/摄取/查询/质量检查)的完整流程、LangSmith 远程沙箱的隔离执行机制,以及人机协同审核(HITL)的实践应用。

program哲学 199

简述HashMap工作原理

HashMap 一、特点 是基于Map接口的实现 存储键值对时,它可以接收null的键值, 非同步, HashMap存储着Entry(hash, key, value, next)对象。 二、put(K key, V value)原理 对key的hashCode()做hash,然后再计算index; 如果没碰撞直接放到bucket里;...

CJYYYYY的博客 3383

Qt QTableView排序

在开发过程中,我们需要通过点击表头来对QTableView或QTreeView等一系列高级视图进行排序操作,以下是进行排序的步骤。首先创建了一个QStandardItemModel对象或者继承QAbstractTableModel类作为数据模型,并设置了一些数据。然后创建一个QTableView对象,并将数据模型设置为其模型。接下来,创建一个QSortFilterProxyModel对象,并将QStandardItemModel对象设置为其源模型。然后设置QTableView开启排序功能。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 2645

hsahmap与红黑树

我们先来了解一下map集合 什么是Map集合? Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value。 map集合的作用 和查字典类似,通过key找到对应的value,通过页数找到对应的信息。用学生类来说,key相当于学号,value对应name,age,sex等信息。用这种对应关系方便查找。 Map和Set的关系 可以说关系是很密切了,虽然Map中存放的时键值对,Set中存放的是单个对象,但如果把v...

m0_51471326的博客 331

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HsahMap的几个参数解释

对HashMap的几个重要参数解释

记录日常码代码的点点滴滴 186

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

HsahMap使用、结构及源码分析以及常见面试题

HashMap使用 HashMap是基于哈希表的Map接口的非同步实现,继承自AbstractMap,AbstractMap是部分实现Map接口的抽象类 哈希表也称散列表,根据关键码值key进行访问的数据结构,也就是说,能够将关键码映射到表中一个位置我们就可以区访问value,加快查找的速度,这个映射函数叫做散列函数,存放记录的属组叫做散列表。我们之前使用的两种数据结构,数组寻址容易(时间复杂度为O(1)),插入和删除困难(复杂度为O(N)),而链表寻址困难(复杂度为O(N)),插入和删除容易(复杂度为O

降温的博客 416

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

HsahMap的相关问题

1.Hashmap是懒惰创建数组的,首次使用才能创建数组2.计算索引(桶下标)3.如果桶下标还没人占用,创建Node占位返回4.如果桶下标已经有人占用1.已经是TreeNode走红黑树的添加或更新逻辑,如果链表长度超过树化阈值,走树化逻辑2.是普通的Node,走链表的添加和更新的逻辑,如果链表长度超过树化阈值,走树化逻辑5.返回前检查是否超过阈值,一旦超过进行扩容不同之处:1.链表插入节点时,1.7是头插法,1.8是尾插法。

qq_55983332的博客 155

HsahMap的入门讲解

Map是一个双列集合(以键值对形式存储),键(key)可以重复,而值(value)可以重复。

m0_53726326的博客 304

java8 HsahMap原码解读

Java8 版本 hashMap 原码解读 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; // 初始化容器 if ((tab = table) == null || (n = tab.length) ==

dagecao的博客 331

集合对比及hsahmap

主要问题hashmap 最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体 当我们往HashMap中put元素的时候,会先根据key的hashCode值计算出数组中对应的 位置(下标),然后再把这个元素的key,value封装放到对应的位置上。如果这 个元素所在的位置已经存放了其他元素,那么在同一个位置上的元素将以链表的形 式存放,新加入的放在链...

weixin_40493584的博客 311

HsahMap、ConcurrentHashMap

个人学习总结整理 资料来源:https://www.itcodemonkey.com/article/1266.html via:程序员小灰(VX公众号) HashMap - 实现原理及冲突解决 HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,数组中每一个元素的初始值都是Null。 执行Put操...

Xyg's LearningSpace 347

HsahMap的面试详解及源码分析

本次接着上篇说jdk 中的HashMap,这个是一个比较复杂的重点,因为看懂了这个,后面Redis 的数据结构基本上就懂一半,而且之后所有涉及hash 表的逻辑都可以套用,最主要的就是这玩意儿面试问jdk 基本都要被问到。本次我会和结合hash表、hash碰撞的解决来聊一下hashMap 的源码,同时会将jdk1.7 和1.8 之间hashMap 区别更新说一下,至于1.8 扩容出现的红黑树这里会简单聊一下,具体的后面算法文章再详谈。 HashMap的存储结构哈希表 在聊hashMap 之前,还是需要先简单

qq_39339965的博客 436

hsahMap存储数据流程

HsahMap笔记

任立伟的博客 206

深入浅出的理解HsahMap的实现原理及常见面试题

文章目录1. 引入2. Map接口3. 背景知识3.1 数据存储3.2 哈希算法3.3 哈希表4. HashMap实现原理4.1 JDK74.1.1 字段4.1.2 构造函数4.1.3 常用方法4.1.3.1 **put**4.1.3.2 get4.1.3.3 resize4.2 JDK84.2.1 字段4.2.2 构造函数4.2.3 常用方法4.2.3.1 put4.2.3.2 get4.2.3.3 resize5. 细节问题5.1 HashMap中存放自定义对象为什么要重写hashCode和equals

Forlogenの解忧杂货铺 781

HsahMap 和 ConcurrentHashMap(1.8)

ConcurrentHashMap put()方法 final V putVal(K var1, V var2, boolean var3) { if (var1 != null && var2 != null) { 1 int var4 = spread(var1.hashCode()); int var5 = 0; ConcurrentHashMap.Node[] var6 = thi

weixin_47552725的博客 236

hsahmap的寻址算法和为是你扩容为2的N次方

原理:当数组长度`n`为2的幂次方时,`(n-1)`的二进制全为1(如`n=16`时`n-1=15`,二进制`1111`),此时`hash & (n-1)`等价于`hash % n`,但位运算性能更高。- 避免空间浪费:若`n`非2幂(如`n=9`),`n-1=8`(二进制`1000`),运算后仅保留最高位,导致多个哈希值映射到同一位置(如`3 & 8=0`,`2 & 8=0`)。- `equals()`用于判断键是否相等,需保证一致性。2. 键对象的`hashCode()`与`equals()`

你是人间四月天 527
上一篇: HashMap 源码分析 1.8
下一篇: LinkedHashMap分析 jdk1.7
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值