zoukankan      html  css  js  c++  java
  • AVL Trees & Huffman Tree

    AVL Trees

    Def.

    image-20210612201016317

    新结点的插入可能会破坏平衡:

    image-20210612201104374

    image-20210612201357577

    Rotation

    left-heavy & right-heavy

    将结点的平衡因子定义为:左子树高 - 右子树高

    left-heavy说明平衡因子为1,right-heavy说明平衡因子为-1

    下面讨论如何对 最小不平衡子树 进行调整 :

    (这里为了确保所讨论的最小平衡子树以 A为根,示例中 BL,BR和 AR均为高 H的子树)

    LL

    image-20210612202614042

    RR

    image-20210612203757637

    LR

    image-20210612204706887

    image-20210612204728201

    RL

    image-20210612205211934

    image-20210612205237845

    小结

    左边重就往右旋

    右边重则往左旋

    image-20210612205502120

    Steps

    1. 具体来说,首先自下向上找到最小的不平衡子树
    2. 然后针对这棵子树,分析不平衡原因是以上四种的哪一个;
    3. 如果为:
      • LL:将最小不平衡子树根的左孩子右旋
      • RR:将最小不平衡子树根的右孩子左旋
      • LR:将最小不平衡子树根的左孩子的右孩子先左旋再右旋
      • RL:将最小不平衡子树根的右孩子的左孩子先右旋再左旋

    for instance

    RR型的调整

    插入90,出现RR型不平衡,自下而上找到最小不平衡子树以66为根

    针对66的右孩子进行左旋操作

    调整结束

    image-20210612212553080

    image-20210612212747497

    RL型的调整

    插入63,出现RL型不平衡,自下向上找到最小不平衡子树以50为根

    则针对50的右孩子的左孩子:66进行左旋+右旋

    调整结束

    image-20210612212040956

    image-20210612212310792

    查找效率分析

    image-20210612213531763

    6.006的证明方法如下

    N_h表示构成一棵高度为h的AVL树的最少结点数:

    第一种方法根据递推式可以粗略得到h的上限,数量级为O(lgn)

    第二种根据斐波那契数列可以得到更精确的近似 max.h 约等于1.440lgn,

    总之,记住含有n个结点的AVL树的最大深度为O(lgn)即可,这也意味着平衡二叉树的平均查找长度为O(lgn)

    image-20210612214350389

    Huffman Tree

    WPL

    带权路径长度

    image-20210613145551050

    Def.

    image-20210613145753821

    Build a Huffman tree

    image-20210613150204554

    哈夫曼树并不唯一 :

    image-20210613150320542

    哈夫曼编码

    用一串二进制数表示信息

    image-20210613150828447

    Optimize_Attempt1

    固定长度 → 可变长

    image-20210613151052929

    降低了树的 WPL

    Optimize_Attempt2

    Q:能否进一步减少编码长度,将A直接用1表示?

    A:这会导致接收方解码时出现歧义

    image-20210613151620542

    (右图树画错了,应该有三层)

    小结

    image-20210613152245997

    image-20210613152424134

  • 相关阅读:
    java_oop_方法2
    POJ 3276 Face The Right Way(反转)
    POJ 3276 Face The Right Way(反转)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3061 Subsequence(尺取法)
    POJ 3061 Subsequence(尺取法)
    HDU 1222 Wolf and Rabbit(欧几里得)
  • 原文地址:https://www.cnblogs.com/potofsalt/p/14880359.html
Copyright © 2011-2022 走看看