您的位置:首页 > 理论基础 > 数据结构算法

数据结构(二):哈夫曼树

2015-09-19 11:18 197 查看
包括:
一. 哈夫曼树概念
二. 哈夫曼树构造方法
三. 哈夫曼编码

一. 哈夫曼树

权:在许多应用中,常常将树中的节点赋上一个有着某种意义的数值,该数值称为该节点的权。
节点的带权路径长度:从树根节点到某节点之间的路径长度与该节点上权值的乘积称为该节点的带权路径长度。
树的带权路径长度:树中所有叶子节点的带权路径长度之和称为该树的带权路径长度。
        哈夫曼树:对于一组具有确定权值的叶子节点可以构造出多个具有不同带全路径长度的二叉树。把其中带权路径长度最小的二叉树称为哈夫曼树,又称为最优二叉树。

二. 哈夫曼树构造方法

根据给定的n个权值,使对应节点构成n颗二叉树的森林,其中每颗二叉树中都只有一个带权值的根节点,其左右子树都为空。

在森林中选择两个权值最小的叶子节点作为左右子树构造一个新的二叉树,且置新的二叉树的根节点权值为左右子树上根节点的权值之和。

在森林中,用新得到的二叉树代替选取的二个树。

重复(2)(3)步骤,直到只含一棵树位置,该树便是哈夫曼树。

例如:



图1



图2



图3



图4

三. 哈夫曼编码

编码:在数据通信中,经常需要将传送的文字转换为二进制字符0和1组成的字符串,这个过程称为编码。
哈夫曼编码:设需要编码的字符集合为:{d1,d2,...,dn},各个字符在电文中出现的次数集合为{w1,w2,...,wn},那么以d1,d2...,dn作为叶子节点,以w1,w2,...,wn作为个节点的权值构造一颗哈夫曼树,规定哈夫曼树中左分支为0,右分支为1,则从根节点到叶子节点所经过的分支对应的0和1序列就称为该节点对应字符的编码。这样的编码就是哈夫曼编码。
哈夫曼编码的平均长度=d1*w1 + d2*w2+...+dn*wn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息