首页 > 其他 > 详细

AVL Trees & Huffman Tree

时间:2021-06-13 18:54:08      阅读:26      评论:0      收藏:0      [点我收藏+]

AVL Trees

Def.

技术分享图片

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

技术分享图片

技术分享图片

Rotation

left-heavy & right-heavy

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

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

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

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

LL

技术分享图片

RR

技术分享图片

LR

技术分享图片

技术分享图片

RL

技术分享图片

技术分享图片

小结

左边重就往右旋

右边重则往左旋

技术分享图片

Steps

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

for instance

RR型的调整

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

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

调整结束

技术分享图片

技术分享图片

RL型的调整

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

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

调整结束

技术分享图片

技术分享图片

查找效率分析

技术分享图片

6.006的证明方法如下

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

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

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

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

技术分享图片

Huffman Tree

WPL

带权路径长度

技术分享图片

Def.

技术分享图片

Build a Huffman tree

技术分享图片

哈夫曼树并不唯一 :

技术分享图片

哈夫曼编码

用一串二进制数表示信息

技术分享图片

Optimize_Attempt1

固定长度 → 可变长

技术分享图片

降低了树的 WPL

Optimize_Attempt2

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

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

技术分享图片

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

小结

技术分享图片

技术分享图片

AVL Trees & Huffman Tree

原文:https://www.cnblogs.com/potofsalt/p/14880359.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!