热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

郝斌数据结构,堆数据结构

2、每个节点的左子树和右子树的高度差至多等于1。他们之间的差值超过1了。5、每个节点,从该节点到达其可达的叶子节点是所有路径,都包含相同数目的黑色节点。所以,我们也可以说,红黑树是


平衡二叉树、二叉树的二叉树、红黑树是将二叉树集中在一起排列二叉树,相信大家都有接触过,二叉树的搜索树的特征是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图所示


基于该二叉搜索树的特点,在搜索某个节点时,采用二分查找等思想可以快速找到某个节点。 在正常情况下,n个节点的二叉树的搜索时间复杂度为o (逻辑)。


之所以说正常情况下,是因为两股搜寻树有可能会变得极端。 例如


此时也满足二叉查找树的条件,但此时的二叉树已经基本退化为链表,这样的二叉树的搜索时间的复杂性会突然变成o(n ),所以不能发生这样的情况


平衡二叉树是为了解决二叉树搜索树退化为链表而诞生的,平衡树具有以下特点


1、具有二叉搜索树的所有特性。


2、每个节点左右子树的高度差至多等于1。


例如,图1是平衡树,而图2不是。 (节点右侧的目标是此节点的高度。


因为在图2中,节点9左边的孩子的高度为2,右边的孩子的高度为0。 他们之间的差距超过了1。


因此,通过平衡树,解决了脚踏两只船找树的缺点。 在具有n个节点的平衡树的情况下,最坏搜索时间的复杂度也为o(logn )。


为什么即使有平衡的树也需要红黑树? 平衡树可以解决二叉树退化为接近链表的形状的缺点,可以将搜索时间控制在o(logn ),但不是最优的。 因为平衡树要求平衡二叉树) /,所以这个要求非常严格,每次插入/删除节点,平衡树的第二规则几乎都被破坏。 此外,还必须在每个节点的左子树和右子树的高度差至多等于1左旋上进行调整,以再次获得符合要求的平衡树。


显然,对于频繁插入、删除的场景,需要频繁调整平衡树,这将大大降低平衡树的性能。 为了解决这个问题,请参阅右旋


1、具有二叉搜索树的特点。


2、根节点为黑色


3、每个叶节点是黑色的空节点(NIL ),也就是说叶节点不保存数据。


4、任何相邻节点都不能同时为红色。 也就是说,红色节点由黑色节点分隔。


5、每个节点,所有路径中,从节点到可用叶节点包括相同数量的黑色节点。


例如,下面的照片(请注意,照片中的黑色、天空的叶子节点没有画出来) )。


根据这种红黑树的特征,即使在最坏的情况下,也能找到o(logn )的时间复杂度的节点。


但是,与平衡树不同,红黑树进行了插入、删除等操作。 是红黑树。 因此,大多数情况下都使用红黑树。


但是,如果说只有寻找才是高效的话,平衡树比红黑树快。


因此,也可以说是不会像平衡树那样,频繁着破坏红黑树的规则,所以不需要频繁着调整折中方案。


因此,最后的答案是,平衡树是为了解决二叉树退化为链表的情况,而红黑树是为了解决平衡树在插入、删除等操作中需要频繁调整的情况。


红黑树是一种不大严格的平衡树


二叉树均衡时,n个节点的二叉树的高度为log(2n1 ),其搜索效率为o ) log ) 2n ),接近对半搜索。 如果二叉树完全不均衡,则其深度达到n,搜索效率为o(n ),退化为逐次搜索。 一般来说,二叉树的搜索性能为时间复杂度:,制作二叉树的时间复杂度为O(Log 2n)到O(n)


quad-log2n-o(n ) o ) log2n ) o ) log2n )操作并插入o ) log2n ) o ) o ) log2n ) o ) log2n ) log2n )删除* *


B-树:文件系统。 b树:数据库索引。 红黑树:内存中,频繁插入、删除。 例如,TreeMap,TreeSet (以下称为TreeMap )。O(nlog2n)。


红海每一操作的时间复杂度均为O(LOGN )O(LOGN )-logn )。


还有构建一棵节点个数为 n 的红黑树,时间复杂度是多少?

>Hash与红黑树的区别:

权衡三个因素: 查找速度, 数据量, 内存使用,可扩展性,有序性。

hash查找速度会比RB树快,而且查找速度基本和数据量大小无关,属于常数级别;而RB树的查找速度是log(n)级别。并不一定常数就比log(n) 小,因为hash还有hash函数的耗时。当元素达到一定数量级时,考虑hash。但若你对内存使用特别严格, 希望程序尽可能少消耗内存,那么hash可能会让你陷入尴尬,特别是舒服的饼干的hash对象特别多时,你就更无法控制了,而且 hash的构造速度较慢。

红黑树是有序的,Hash是无序的,根据需求来选择。红黑树占用的内存更小(仅需要为其存在的节点分配内存),而Hash事先应该分配足够的内存存储散列表,即使有些内存可能弃用红黑树查找和删除的时间复杂度都是O(logn),Hash查找和删除的时间复杂度都是O(1)。
推荐阅读
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
author-avatar
拍友2502904975
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有