zoukankan      html  css  js  c++  java
  • AVL和红黑树

    平衡二叉树AVL

    特殊的二叉排序树,左右子树都是平衡二叉树,左右子树高度差绝对值不超过1,logn。

    它的存在是为了优化二叉排序树,防止一边太深。

    红黑树

    也是二叉排序树,每个节点增加一个存储为来存颜色。 

    弱平衡,AVL太严格了,红黑树旋转次数少。

    没有一条路径比其他路径长2倍,任意节点到叶节点的黑色节点数目相同。

    所有节点非红即黑,首尾黑,红节点的孩子必黑。

    两者区别

    AVL高度平衡,红黑树弱平衡;

    频繁插入删除,AVL效率下降;红黑树插入最多2次,删除最多3次。

    哈夫曼编码

    哈夫曼树:根据查找习惯建立一颗更快更合适的满二叉树,条件时每个单词出现的频率(权值)。搜索频率越高的单词越靠近树根,通过频率和节点离root的距离计算Wpl(带权路径长)=∑Li x Pi,最小化这个带权路径长得到的树就是哈夫曼树。

    哈夫曼编码也叫霍夫曼编码,无前缀编码,可变字长编码,平均长度最短。应用于数据压缩。用字符在文件中出现的频率来建立的。

    频率排序队列中,将频率最小的两个字符出队列,作为两个叶节点(值是频率),两频率之和作为父节点,然后将这个和的值加入到总的频率排序队列中。在重复上面的步骤。

    B+树

    多路搜索树,为磁盘或其他直接存储辅助设备而设计的平衡查找树。

    每个节点可以有多个孩子,按照关键字大小有序排序。

    特点:

    每个节点上的指针上限为2d而不是2d+1(d为节点的出度)

    内节点不存储data,只存储key

    叶子节点不存储指针

    红黑树旋转

    能保持二叉搜索树的性质的局部操作,左旋和右旋,通过改变某些节点的颜色和指针结构保持红黑树的性质。

  • 相关阅读:
    io几乎没有,iowait却很高
    rcu使用遇到问题汇总
    Groovy In Action 笔记 (5) -- List 相关
    Groovy In Action 笔记 (4) -- String相关
    Groovy In Action 笔记 (3) -- 基本数据类型
    Groovy In Action 笔记 (2) -- '=='与‘equals’
    Groovy In Action 笔记 (1) -- 概述
    ansible notes
    grafana中如何根据label选取数据
    向node_exporter中添加新监控信息
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11251325.html
Copyright © 2011-2022 走看看