哈夫曼树和哈夫曼编码

本文介绍了哈夫曼树的基本概念,包括路径和路径长度的定义、结点权值的概念、带权路径长度的计算以及哈夫曼树的特性。重点讲解了如何构造哈夫曼树,并通过实例展示了哈夫曼编码在数据压缩中的应用,以及其编码长度的优势。
摘要由CSDN通过智能技术生成

概念介绍

  • 路径和路径长度
    在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。如下图,L为路径长度。

  • 结点的权
    若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权,如下图,W为权值。

  • 带权路径长度
    从根结点到该结点之间的路径长度与该结点的权的乘积。
    A的带权路径长度:L1 X W1 = 15
    B的带权路径长度:L2 X W2 = 40
    C的带权路径长度:L3 X W3 = 30
    在这里插入图片描述

  • 树的带权路径长度
    所有叶子结点的带权路径长度之和,记为WPL。即WPL = L1 X W1 + L2 X W2 + L3 X W3 = 85

  • 哈夫曼树
    给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

如何构造哈夫曼树

在这里插入图片描述

  1. 在初始的一组数中寻找两个最小的数,构成子树,产生新的权值。注意:如果两个数相同,可以自行定义左右存放位置。
  2. 在新的一组数中再找出两个最小的数,构成子树。
  3. 依次循环,最终会构成一棵包含全部数的树,且这组数都为叶子节点。

哈夫曼编码

在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。
例如,需传送的报文为“ABBCC CDDD D",A的次数1,B的次数2,C的次数3,D的次数4,要区别4个字母,最简单的二进制编码方式是等长编码,固定采用2位二进制,共可表示4个组合。如,
A:00
B:01
C:10
D:11
当对方接收报文时再按照二位一分进行译码。但如果有8个不同字母,则需要采用3位二进制,有16个不同字母,则需要采用4位二进制。然而,传送报文时总是希望总长度尽可能短。在实际应用中,各个字符的出现频度或使用次数是不相同的,可以在设计编码时,让使用频率高的用短码,使用频率低的用长码,以优化整个报文编码。
如下图,使哈夫曼树节点的左分支标为0,右分支标为1,形成哈夫曼编码如下:
A:110
B:111
C:10
D:0
使用频率高的字母编码长度越短。
在这里插入图片描述
下面来分析编码长度:

ABBCC CDDD D
普通编码:00010110101011111111 20位
哈夫曼编 1101111111010100000 19位
哈夫曼编码正好可以看成哈夫曼树的带权路径长度,根据哈夫曼树的性质,所以哈夫曼编码应该是最短的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值