霍夫曼树 二三树 红黑树 B树 B+树

  • 霍夫曼树:

特点:带权路径长度最短,∑(每个节点的权重)*(每个节点的层数)

生成:每次合并权值最小的两个节点(子树)建立二叉树,将合并后的子树作为新节点,权值为节点(子树)权值之和

  • 二三树:

特点:平衡查找树,每个叶子节点为空且层数相同,查找时间复杂度O(lgn)

生成:2节点包含一个key和两个子节点(left->key<key<right->key),3节点包含两个key和三个子节点(left->key<key1<middle->key<key2<right->key);在(倒数第二层)2节点插入则直接加入,在(倒数第二层)3节点插入则需要进行节点分裂,并可能层层向上传播分裂

  • 红黑树:

特点:相对最平衡的二叉树,每个叶子节点为空且路径包含相同数量的黑节点,红节点不连续存在且向左倾斜(可以把红节点与右侧黑节点看成一个3节点),查找时间复杂度O(lgn)

生成:根节点为黑色,尝试插入红节点,如果插入后不再平衡则进行左旋/右旋,如果插入后两个子节点都为红色则颜色反转

  • B树:

特点:根节点包含1~m-1个key,至少有两个子节点,非根节点包含m/2~m-1个key,至少有m/2+1个子节点

生成:在叶子节点插入,如果节点满则分裂节点,一个key加入父节点,如果key满则递归向上

  • B+树:

特点:类似B树,但所有key与data都在叶子节点分布

生成:类似B树

参考文献:

https://blog.csdn.net/aircattle/article/details/52347955

https://www.cnblogs.com/vianzhang/p/7922426.html

http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html

http://www.cnblogs.com/yangecnu/p/Introduce-2-3-Search-Tree.html

http://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html

https://blog.csdn.net/panglinzhuo/article/details/79437402

原文地址:https://www.cnblogs.com/jhc888007/p/9385336.html

时间: 2024-08-21 23:58:27

霍夫曼树 二三树 红黑树 B树 B+树的相关文章

从2-3-4树模型到红黑树实现

目录 从2-3-4树模型到红黑树实现 前言 2-3-4树 查找 插入 树的生长 删除 左倾红黑树 查找 插入 删除 总结 参考文献 从2-3-4树模型到红黑树实现 前言 红黑树,是一个高效的二叉查找树.其定义特性保证了树的路径长度在黑色节点上完美平衡,使得其查找效率接近于完美平衡的二叉树. 但是红黑树的实现逻辑很复杂,各种旋转,颜色变化,直接针对其分析,大多数都是死记硬背各种例子,不太容易有个直观的理解.实际上,红黑树是实现手段,是其他概念模型为了方便在二叉树上实现进而定义的节点颜色这个信息.如

Huffman tree(赫夫曼树、霍夫曼树、哈夫曼树、最优二叉树)

flyfish 2015-8-1 Huffman tree因为翻译不同所以有其他的名字 赫夫曼树.霍夫曼树.哈夫曼树 定义引用自严蔚敏<数据结构> 路径 从树中一个结点到另一个结点之间的分支构成两个结点之间的路径. 路径长度 路径上的分支数目称作路径长度. 树的路径长度 树的路径长度就是从根节点到每一结点的路径长度之和. 结点的带权路径长度 结点的带权路径长度就是从该结点到根节点之间的路径长度与结点上权的乘积. 树的带权路径长度 树的带权路径长度就是树中所有叶子结点的带权路径长度之和,通常记做

霍夫曼树 java实现

作为一个通信人,本科时候上过信息论,研究生也继续修过信息编码.面试的时候,面试官说了一个霍夫曼树,作为一个通信人竟然忘了.多少有些说不过去. 理论知识 Huffman算法的最根本的原则是:累计的(字符的统计数字字符的编码长度)为最小,也就是权值(字符的统计数字字符的编码长度)的和最小. 这样编码可以达到压缩的效果.又名最优二叉树. 具体的可以参考左耳朵耗子的博客:http://coolshell.cn/articles/7459.html 很形象. 实现 主要包括:构造树.编码.解码.show

最优二叉树(霍夫曼树)分析

 1.树的路径长度     树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 2.树的带权路径长度(Weighted Path Length of Tree,简记为WPL) 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数. 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积. 树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和,通常记为: 其中: n

霍夫曼树及霍夫曼编码的C语言实现

从周五开始学习霍夫曼树,一直到今天终于完成,期间遇到了各种各样的棘手的问题,通过一遍遍在纸上分析每一步的具体状态得以解决.现在对学习霍夫曼树的过程加以记录 首先介绍霍夫曼树 霍夫曼树(Huffman Tree),又称最优二叉树,是一类带权路径长度最短的树.假设有n个权值{w1,w2,-,wn},如果构造一棵有n个叶子节点的二叉树,而这n个叶子节点的权值是{w1,w2,-,wn},则所构造出的带权路径长度最小的二叉树就被称为赫夫曼树. 这里补充下树的带权路径长度的概念.树的带权路径长度指树中所有叶

Fence Repair_霍夫曼树(最优树)_堆

Fence Repair TimeLimit:2000MS  MemoryLimit:65536K 64-bit integer IO format:%lld Problem Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000) planks of

九度 1107 - 霍夫曼树 - 搬水果

这道题目一开始我用排序来做,每次选择最小的两个,相当于构建了霍夫曼树,最后统计所有非叶子结点之和.但是因为每次排序的基数太大,所以会一直超时. 所以我们用优先队列模拟一个堆,利用最小堆的特征来快速得到最小的两个数.STL带有优先队列-priority_queue. priority_queue 对于基本类型的使用方法相对简单.他的模板声明带有三个参数: priority_queue<Type, Container, Functional> 其中Type 为数据类型, Container 为保存

word2vec 中的数学原理二 预备知识 霍夫曼树

主要参考:    word2vec 中的数学原理详解                 自己动手写 word2vec 编码的话,根是不记录在编码中的 这一篇主要讲的就是霍夫曼树(最优二叉树)和编码.  参考   快速画出哈夫曼树 / 霍夫曼树 / 最优树   了解其构成.    哈夫曼树及 python 实现 python 代码 构建霍夫曼树 ,获得霍夫曼编码    简单实现: #节点类 class Node(object): def __init__(self,name=None,value=N

九、二叉树和霍夫曼树

一.二叉树的深层性质 性质1在二叉树的第 i层最多有 2^(i-1)个结点 . (i≥1)?第一层最多有 2-1=1个结点 ?第二层最多有 2^(2-1)=2个结点 ?第三层最多有 2^(3-1)=4个结点性质2深度为 k 的二叉树最多有 2^k -1个结点 . (k ≥ 0)?如果有一层 ,最多有 1=2- 1=1 个结点 ?如果有两层 ,最多有 1+2=2^2- 1=3 个结点 ?如果有三层 ,最多有 1+2+4=2^3 -1=7个结点性质3对任何一棵二叉树 , 如果其叶结点有 n0个 ,