热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

对红黑树的不种见解

红黑树很出名,也有很多人知道怎么用,但红黑树是怎么发明的,发明动机是什么,设计思想是什么一直困扰着我,我以到网上搜索了很久都没有答案,就找到了红黑树之前就对称平衡二叉树,这种树有种不同类型的结点

红黑树很出名,也有很多人知道怎么用,但红黑树是怎么发明的,发明动机是什么,设计思想是什么一直困扰着我,我以到网上搜索了很久都没有答案,就找到了红黑树之前就对称平衡二叉树,这种树有种不同类型的结点,是因为有彩色打印机,才把这两种不同类型的结点表示成不同的颜色,其它的我今天就来大胆猜测一下。

其实红黑树之所以那么流行,是因为他很好的平衡了一对矛盾,就是平衡度与维持这个平衡度所需要的性能代价,何谓平衡度,这个术语是我自己发明的,平衡度即一棵二叉树在固定高度的情况下能容纳的结点数量,容纳得最多则平衡度越大,所以完全平衡二叉树的平衡度都大,平衡度大有什么好处呢,很显然,平衡度最大,则固定结点数量的二叉树越矮,查找越快,这就是完全平衡二叉树的目的了。如果一棵二叉树是只读的,后续不用修改,那么用完全平衡二叉树最好用了,但是一般情况下我们都要修改这棵树,比如新增一个结点或删除一个结点,这个时候,你会发现一棵完全平衡二叉树很痛苦,因为插入了新的结点就打破了原有的平衡,要经过长时间的调整才能使树恢复平衡,删除结点也一样,这就好比打破一个生态环境的平衡一样痛苦。完全平衡二叉树走了查找效率这个极端,还有另一种极端的做法是就是插入和删点完全不调整,到最后那肯定是一棵很烂的棵树了,查找效率就等同于线性表了。

红黑树就做好了这两个极端之间的平衡,无论你是插入还是删除结点,他都能保证一趟搞定,一趟就是最多循环h次,h是树的高度,当然查找效率也不赖。他是怎么做到的呢,以下就是猜测了,他的创始人肯定也是因为遇到完全平衡二叉树的痛苦,所以他就要想办法偷个懒呗,他就想啊,可不可以修改树之后不需要调整树的结构呢,但是不调整,久而久之平衡度就会很差,所以还是要调整,那能不能少调整几次呢,比如有时候修改需要调整,有时候不需要调,所以我们可以引入的一种非正常的结点,这种结点很懒惰,插入之后可以不调整树,但懒惰结点的数量也不能太多,太多了就又变成烂树了,我们可以规定,懒惰结点不准连续,这样可以限制其数量不会太多,另一方面,我们也要求不同路径上正常结点的数量要相同,这样以来两个极端就都折衷了,再把正常结点标成黑,懒惰结点标成红,就成了红黑树了,当然这都是我的猜测,但这样可以更能看出红黑树的特点,所以我觉得将其改名为“懒惰结点平衡二叉树”更为贴切。

未完,持续更新中...


推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 新冠肺炎疫情期间,各大银行积极利用手机银行平台,满足客户在金融与生活多方面的需求。线上服务不仅激活了防疫相关的民生场景,还推动了银行通过互联网思维进行获客、引流与经营。本文探讨了银行在找房、买菜、打卡、教育等领域的创新举措。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文将详细介绍在Windows 7环境下,检查U盘启动盘是否制作成功的多种方法,包括通过BIOS设置和使用模拟启动工具。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
author-avatar
v木易杨_920
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有