有一段时间没有写一些关于数据结构的程序了,正好算法导论这门课学到红黑树,感觉数据结构都忘得差不多了,而且考研还要考,故再拿来复习一下。 一、C++实现单链表 这个比较简单,不再赘述。后续会陆续加上各类数据结构。 ...
分类:
编程语言 时间:
2016-04-01 23:34:41
阅读次数:
335
二叉排序树
一棵自平衡的二叉排序树(二叉搜索树)
生成二叉排序树的过程是非常容易失衡的,最坏的情况就是一边倒(只有右/左子树),这样会导致二叉树的检索效率大大降低(O(n))。
为了维持二叉树的平衡,有各种的算法,如:AVL,SBT,伸展树,TREAP ,红黑树等等。
红黑树红黑树需要满足5条性质:
- 节点非红即黑
- 根节点是黑色
- 所有NULL结点称为叶子节点,且...
分类:
其他好文 时间:
2016-04-01 18:08:22
阅读次数:
164
B~树 1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树 (Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然...
分类:
数据库 时间:
2016-03-28 00:26:20
阅读次数:
352
我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。这四种树都具备下面几个优势: (1) 都是动态结构。在删除,插入操作的时候,都不需要彻底重建原始的索引树。最多就是执行一定量的旋转,变色操作来有限的改变树的形态。而这 ...
分类:
其他好文 时间:
2016-03-26 21:54:26
阅读次数:
442
红黑树的插入、查找、删除的平均时间复杂度为O(nlogn)。当基于假设:输入数据具有随机性时,hashtable插入、查找、删除时间复杂度O(l)。 STL里的hash函数是采用开链法解决碰撞问题,bucket 聚合体是一个vector,便于动态维护,vector里每个元素指向一个bucket li
分类:
其他好文 时间:
2016-03-23 10:13:23
阅读次数:
169
摘要: 红黑树是一种二叉查找树,但在每个结点上增加了一个存储位表示结点的颜色,可以是RED或者BLACK。通过对任何一条从根到叶子的路径上各个着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。本章主要介绍了红黑树的性质、左右旋转、插入和删除。重点分析了在红黑树中插入和删除
分类:
其他好文 时间:
2016-03-18 20:03:58
阅读次数:
260
一、红黑树的基本性质 1、红黑树本质上是一种二叉查找树BST,满足左孩子均小于根,右孩子均大于(等于)根的性质,但是它从根节点到最远叶子节点的长度不会超过到最近叶子节点的两倍,所以是近似平衡的。 【证明】由于性质5 假如说一个黑高度为3的红黑树, 最短路径定为 黑-黑-黑 长度为2 最长路径 为黑-
分类:
其他好文 时间:
2016-03-07 10:26:38
阅读次数:
187
一、前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也可以使用红黑树进行存储,总之,目标只有一个,那就是在安全和功能性完备的情况下让其速度更快,提升性能。
分类:
其他好文 时间:
2016-03-05 09:03:16
阅读次数:
247
定义:我们先来看看《算法导论》中的红黑树的定义:“红黑树是许多‘平衡’搜索树的一种,可以保证在最坏的情况下基本动态集合操作的时间复杂度为O(lgn)。”性质:红黑树的性质如下:1、每个节点是红色的,或者是黑色的。2、根节点和叶子节点是黑色的。3、如果一个节点是红色..
分类:
编程语言 时间:
2016-02-29 23:27:36
阅读次数:
617
二叉搜索树基本操作都可以在O(h)内完成,然而数的高度较高时,可能并不比在链表上执行的快。红黑树是平衡搜索树中的一种保证在最坏情况下时间复杂度为O(lg(n)) 红黑树的性质 每个节点或是红色或是黑色 根节点是黑色的 每个叶节点是黑色的 如果一个节点是红色,则两个子节点是黑色的 每个节点,到后代叶子
分类:
其他好文 时间:
2016-02-26 17:10:46
阅读次数:
262