- 浏览: 3566363 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
普通的二叉树作为数据存储有重要的优势,可以快速的找到一个给定的关键字,数据项,并且可以快速的插入
和删除数据项。其他的数据存储结构,数组有序数组链表在执行这些操作的时候却很满。
但是。遗憾的是二叉树搜索树有一个很麻烦的问题就是:如果树中插入的是随机数据,那么执行的效果很好。
但是,如果插入的是有序的数据或者逆序数据,速度就变的特别慢。因为当插入的数据有序时,二叉树就是非平衡了,而对于非平衡树,
它的快速查找 删除 插入能力就没有了。
红黑树就是增加了一些特点的二叉搜索树。
还有其他的一些方法来保持树的平衡的。
本章将要讨论的在红黑树中插入方法和在已经讲过的在其他数据结构中的方法有点不同,但是理解红黑树很重要。因为这一点,也因为有大量
的对称情况,实际的代码要比人们想象的长而且复杂。因为通过研究代码学习算法十分困难。所以,在这一章中没有程序代码。
平衡二叉树
不平衡树的效率--- N
我们在插入的时候,一般的二叉树如果遇到有序的数据 比如 1 2 3 4 5 6 7 8 9 那么1 作为根节点,剩余就是成了右节点,
其实就是我们想的那种链表了,所以查找的话 就是要 n的时间复杂度了,而不是logN的情况。
这是极度不平衡的树
一般不平衡球情况效率
对于随机数据的实际数量来说,一颗树特别不平衡的情况是不大可能的。但是,可能会有一小部分有序数据
使树的部分非平衡。搜索部分非平衡树的时间要在N 到 logN之间 ,这要看树的不平衡度要看了
平衡的补救
为了能用较快的时间logN来搜索一颗树,需要保证树总是平衡的(或者至少大部分是平衡的),这就是说树中的每个节点在它
左边后的后代数目和右边的后代数目要大概的相等。
红黑树的平衡是在插入的过程中(删除时也是,但是暂时忽略这个问题)取得的。对一个要插入的数据项,插入的时候要检查下不会补破坏
树的一定的特征。如果破坏了,程序就要去纠正,根据需要更改树的结构,通过维持树的特征,保持了树的平衡。
红-黑树的特征
这种树有什么好神奇的呢?有两个特征就是 一个简单,一个比较复杂:
节点都有颜色
在插入和删除的过程中,要遵守保持这些颜色的不同排列的规则
带颜色的节点
在红黑树中,每一个节点或者是黑色的或者是红色的,也可以是任意的两种颜色的。实际上,所说的颜色是任意的比方。可以用其他的类似的
方法来表示。比如可以说每一个节点不是深色的就是浅色的。不过对于颜色就是偏于标记。在节点类中增加一个数据字段,可以是boolean类型的
用来表示颜色。
节点的红黑特征通过节点编辑的颜色来表示的。
红黑树的规则
当插入(或者删除)一个新的节点时,必须要遵守一定的规则,他们被称为红黑规则。如果遵守这些规则,树就是平衡的。下面简要的介绍下这些规则
1.每一个节点不是红色就黑色()
2.根总是黑色的
3.如果节点是红色的,则它的子节点必须是黑色的
4.根到叶子节点或者空节点的每条路径,必须包含相同数据的黑色的节点
规则4中的(空子节点)是指非叶子节点可以接子节点的位子。换句话说,就是一个有右子节点的节点的可能接左节点的位子,或者是有左子节点
的节点的可能接右子节点位子。
仔细的说明:
在从根到叶子点的路径上的黑色节点的数据叫做黑色高度。规则4的另一种陈述方式是所有从根到叶子节点路径上的黑色高度必须相同。
这些规则可能使人一头雾水。看不清楚这些怎么能使得一颗树平衡,然而他们做到了;某些很聪明的人发明了他们。请把这些抄在变迁上,
并且经常的看
重复的关键字
如果有多余一个数据项的关键字的值相同,将会出现什么情况呢?这给红黑树提出了一个小问题。把有相同关键字的数据项分配到其他也由相同关键字
数据项的两则是很重要的。这也就是说,如果关键子的序列为50 50 50 要把第二个50放到第一个50的右边,并且把第二个50放到第一个50的左边,否则
树将不平衡了
在插入算法中,用某种随机的过程处理相同关键子节点的分配问题。但是,如果要找到所有相同的关键词,插入过程就变的更加复杂了。
目前我们学习的时候不考虑关键词是一样的
发表评论
-
java 归并排序 自己写
2012-02-22 09:03 1464package endual.xier.writeaga ... -
递归思想 汉诺塔的问题
2012-02-09 10:46 1664package endual; public cl ... -
带权图 最短路径 代码自己写
2012-02-09 10:46 3193最短路径问题 可 ... -
带权图的最小生成树 (代码自己写)
2012-02-08 16:02 46671.大理论的一些资料 ... -
数据结构学习的在线好网址
2012-02-07 16:20 1573http://sjjg.js.zwu.edu.cn/SFXX/ ... -
有向无环图 拓扑排序
2012-02-07 15:53 3469package endual.tuopupaixu; ... -
java 图的最小生成树问题 (代码自己写)
2012-02-07 13:51 2795最小生成树是基于无无向图,并且是没有权值的图的。它的实现可以用 ... -
java 图 代码自己写
2012-02-07 13:07 1796图的建立也是基于数组的,但是遍历的话是基于链表或者是矩阵的 ... -
堆 (自己写)
2012-02-06 13:32 1469堆也是基于数组的哦,所以在创建的时候,请先要考虑好数组的大小了 ... -
哈希表的一些概念 代码(自己写)
2012-02-05 18:44 2196首先,我们要明确一点 ... -
两个正整数相加
2012-02-05 09:48 1879import java.util.Scanner; i ... -
二叉树代码
2012-02-05 09:51 1734package endual; /** * 树 ... -
java 二叉树
2012-02-04 14:17 1582为什么要用二叉树 通常我们去实现数据结构有两种方式,一 ... -
桶排序(代码自己写)
2012-02-04 13:24 2042简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶 ... -
各类排序算法
2012-02-04 13:19 1495隐藏▲ 查 · 论 -
快速排序算法(自己写)
2012-02-04 12:58 1774快速排序算法的伪代码。 package endual; ... -
java 希尔排序算法(自己写)
2012-02-04 10:26 1880希尔排序算法是对插入算法的应用吧,就是多次的使用了插入算法多排 ... -
递归 字符串的全排列
2012-02-03 15:29 2466package endual; public class ... -
java递归的一个问题
2012-02-03 13:56 1874据说比达格斯理论家,又称一群在必达格斯领导下工作的古希腊数学家 ... -
java 实现链表(自己写的)
2012-02-03 11:03 1669今天用java写了下的链表, 还是有点糊涂的。这和C语言写的链 ...
相关推荐
学习红黑树,你需要理解以下关键概念: - **红黑树的性质**:包括每个节点要么是红色要么是黑色,根节点是黑色,所有叶子节点(NIL节点)是黑色,红色节点不能相邻(即不能有两个连续的红色节点),从任意节点到其每...
下面将详细介绍红黑树的概念、性质以及如何在Java中实现它。 **1. 红黑树的概念** 红黑树是由Rudolf Bayer在1972年提出的,它是一种特殊的二叉查找树,每个节点都带有颜色属性,可以是红色或黑色。它的主要目标是在...
红黑树则是在二叉搜索树的基础上增加了一些规则来保证其自平衡性。这些规则包括: 1. 每个节点要么是红色,要么是黑色。 2. 根节点是黑色。 3. 所有叶子节点(NIL或空节点)都是黑色。 4. 如果一个节点是红色,那么...
2-3树是一种特殊的树形数据结构,而红黑树则是一种对2-3树进行颜色编码以实现更简洁表示的抽象概念。通过理解2-3树,我们可以更好地理解红黑树的运作机制。 首先,让我们详细讨论2-3树。2-3树是一种每个节点最多...
理解并实现红黑树可以帮助我们深入掌握计算机科学中的基础概念,并提升在实际问题中的解决方案设计能力。通过本项目,我们可以学习到如何在代码中实现这些理论,并通过实践加深对红黑树的理解。
本文将深入探讨红黑树的相关概念及其应用场景,帮助读者更好地理解和掌握这一重要的数据结构。 #### 1. STL中的`set`底层使用的是什么数据结构? C++标准模板库(STL)中的`set`容器底层使用的是红黑树(Red-Black...
以下是关于红黑树的一些关键知识点: 1. **红黑树性质**: - 每个节点都带有颜色属性,要么是红色要么是黑色。 - 根节点是黑色。 - 所有叶子节点(NIL或空节点)是黑色。 - 如果一个节点是红色,则它的两个子...
此外,可能还有`search`方法用于查找节点,以及一些辅助方法如`rotate_left`、`rotate_right`、`color_flip`等用于维护红黑树的平衡。 对于初学者来说,理解这些代码可以帮助深入理解红黑树的工作原理。通过阅读...
红黑树和区间树是两种在计算机科学中广泛使用的数据结构,主要应用于高效的数据管理和查询。在本实验中,我们探讨了如何用C++来实现这两种数据结构,并提供了相关的可视化功能。 红黑树是一种自平衡二叉查找树,由...
红黑树(Red-Black Tree)是一种自平衡的二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。它在保持二叉查找树特性的同时,通过引入颜色属性来确保树的平衡,从而提高数据操作的效率。在Java中,红黑树被广泛...
"红黑树 - Robert Sedgewick 2008"是Robert Sedgewick教授于2008年在普林斯顿大学发表的关于红黑树的经典讲解,它从2-3-4树的概念入手,逐步深入到红黑树的实现和性质。 2-3-4树是红黑树的一种简化模型,用于直观...
本文将详细阐述红黑树的基本概念,其特性以及常见的操作,包括插入、删除和查找等,并对其中的删除旋转算法进行了优化,以提升整体的运行效率。 红黑树的核心特性是它的每个节点都带有颜色属性,可以是红色或黑色,...
总的来说,红黑树是数据结构中的一个重要概念,它在C#编程中被广泛应用于高效的数据管理,特别是需要快速查找、插入和删除操作的场景。通过理解红黑树的性质和操作,开发者能够创建出性能优异的数据结构解决方案。
红黑树是一种自平衡二叉查找树,由Rudolf Bayer在1972年提出。它是计算机科学中一种非常重要的数据结构,被广泛应用于现代操作系统、数据库管理系统、编译器和其他高性能软件中,特别是在Linux内核中扮演着至关重要...
下面将详细解释红黑树的基本概念以及这两个类中的关键代码。 红黑树的特性: 1. 每个节点要么是红色,要么是黑色。 2. 根节点是黑色。 3. 所有叶子节点(NIL或空节点)都是黑色。 4. 如果一个节点是红色,则它的两...
根据给定的信息,本文将详细解释红黑树的C语言实现方法,并重点解析代码中涉及的关键概念和技术要点。 ### 红黑树简介 红黑树是一种自平衡二叉查找树,它通过确保树在任何操作后都能保持平衡来提供高效的查找、...
首先,我们来理解红黑树的基本概念: 1. 每个节点都有颜色属性,可以是红色或黑色。 2. 根节点是黑色。 3. 所有叶子节点(NIL或空节点)都是黑色。 4. 如果一个节点是红色,则它的两个子节点必须是黑色。 5. 对每个...