问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

哈夫曼树和哈夫曼编码

发布网友 发布时间:2022-04-23 22:28

我来回答

3个回答

热心网友 时间:2022-05-19 03:52

给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
哈夫曼树(霍夫曼树)又称为最优树.
1、路径和路径长度
在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长

哈夫曼树 (3张)
度为L-1。

2、结点的权及带权路径长度
若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。
3、树的带权路径长度
树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。
构造
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
哈夫曼编码
在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符集为“A,E,R,T,F,D”,各字母出现的次数为{8,4,5,3,1,1}。现要求为这些字母设计编码。要区别6个字母,最简单的二进制编码方式是等长编码,固定采用3位二进制,可分别用000、001、010、011、100、101对“A,E,R,T,F,D”进行编码发送,当对方接收报文时再按照三位一分进行译码。显然编码的长度取决报文中不同字符的个数。若报文中可能出现26个不同字符,则固定编码长度为5。然而,传送报文时总是希望总长度尽可能短。在实际应用中,各个字符的出现频度或使用次数是不相同的,如A、B、C的使用频率远远高于X、Y、Z,自然会想到设计编码时,让

哈夫曼树 (4张)
使用频率高的用短码,使用频率低的用长码,以优化整个报文编码。

为使不等长编码为前缀编码(即要求一个字符的编码不能是另一个字符编码的前缀),可用字符集中的每个字符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的出现频率作为字符结点的权值赋予该结点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是频率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度效果上就是传送报文的最短长度。因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的哈夫曼树的问题。利用哈夫曼树来设计二进制的前缀编码,既满足前缀编码的条件,又保证报文编码总长最短。
哈夫曼静态编码:它对需要编码的数据进行两遍扫描:第一遍统计原数据中各字符出现的频率,利用得到的频率值创建哈夫曼树,并必须把树的信息保存起来,即把字符0-255(2^8=256)的频率值以2-4BYTES的长度顺序存储起来,(用4Bytes的长度存储频率值,频率值的表示范围为0--2^32-1,这已足够表示大文件中字符出现的频率了)以便解压时创建同样的哈夫曼树进行解压;第二遍则根据第一遍扫描得到的哈夫曼树进行编码,并把编码后得到的码字存储起来。
哈夫曼动态编码:动态哈夫曼编码使用一棵动态变化的哈夫曼树,对第t+1个字符的编码是根据原始数据中前t个字符得到的哈夫曼树来进行的,编码和解码使用相同的初始哈夫曼树,每处理完一个字符,编码和解码使用相同的方法修改哈夫曼树,所以没有必要为解码而保存哈夫曼树的信息。编码和解码一个字符所需的时间与该字符的编码长度成正比,所以动态哈夫曼编码可实时进行。
2、哈夫曼译码
在通信中,若将字符用哈夫曼编码形式发送出去,对方接收到编码后,将编码还原成字符的过程,称为哈夫曼译码。

热心网友 时间:2022-05-19 05:10

http://hi.baidu.com/%B3%CC%D0%F2%D0%A1%B1%F8/blog/category/%CA%FD%BE%DD%BD%E1%B9%B9

//* * * * * * * * * * * * * * * * * * * * * * * *
//*CHAPTER :4 (4_4) *
//*PROGRAM :哈夫曼树 *
//*CONTENT :构造哈夫曼树,哈夫曼编码 *
//* * * * * * * * * * * * * * * * * * * * * * * *
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{unsigned int weight; //结点权值
unsigned int parent,lchild,rchild; //结点的父指针,左右孩子指针
}HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树
typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表
void CreateHuffmanTree(HuffmanTree &,unsigned int*,int ); //生成一棵哈夫曼树
void HuffmanCoding(HuffmanTree,HuffmanCode &,int ); //对哈夫曼树进行编码
void PrintHuffmanCode(HuffmanCode,unsigned int*,int); //显示哈夫曼编码
void Select(HuffmanTree,int,int&,int&); //在数组中寻找权值最小的两个结点
void main()
{HuffmanTree HT; //哈夫曼树HT
HuffmanCode HC; //哈夫曼编码表HC
int n,i; //n是哈夫曼树叶子结点数
unsigned int *w; //w存放叶子结点权值
......
...
...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
韩国EMS19.3公斤的箱子去中国要多少钱 俄罗斯快递查询 青春期孩子想买贵东西怎么办 发现青春期孩子买成人用品怎么办?? ...运送石油到中国上海湾,途中经过的海峡有( )A.白令海峡B.马六甲海峡C... 中俄货物运输企业 ...湾往我国运送石油的船只需要经过的海峡是: ( ) A.直布罗陀海峡 B... 童心唱响祖国完整版歌词【26句精选】 苹果有面容和没面容有什么区别 苹果无面容影响 什么是哈夫曼编码 利用哈夫曼编码进行压缩压缩率一般达到多少? 哈夫曼编码的压缩率怎么算 为什么说当信源中符号出现概率相等时哈夫曼编码效率最低 哈夫曼编码和二进制编码优缺点比较 如何计算Huffman编码的编码效率和压缩比? 苹果手机抖音怎么发右哼哼 抖音声音很粗的韩国歌,男的唱的,谐音是,哼能个哼能个啊呢呀什么的? 一首歌求歌名。记不清歌词。第一句女声:哼哼-哼哼--哼哼 哼哼……哼哼~哼哼哼 有一首英文歌(挺流行的挺多人都听)前面的曲 哼哼哼哼,哼哼哼哼,哼哼哼哼哼哼哼哼哼 有一首外国歌,是女的唱的,我很喜欢这首歌,试着哼哼啊。哼哼哼哼哼哼~哼哼哼哼哼哼哼~哼哼哼哼哼~ 求一首歌 不知道歌名 旋律中间哼唱 哼哼哼哼哼哼哼 很柔的一首歌 男生唱的 听起来很入耳 英文歌 开头是一个男的跟着音乐起伏用鼻音哼 “嗯嗯嗯嗯嗯 ,嗯嗯嗯嗯嗯……”的英文歌 有一首欧美的歌,男声,开头是一段哼唱,哼哼哼哼,哼哼哼哼,哼哼哼哼哼... 哼嗯哼哼哼,哼哼哼哼嗯哼哼哼哼哼,哼哼哼哼哼这个旋律是哪首歌的歌词的 有一首唔唔唔这个哼哼的歌叫什么名字有一首唔唔唔这个哼哼的歌叫什么名字,我有片段,但是原音乐叫什么歌_百度问一问 有一首女生哼出来的纯音乐歌曲,曲调很悲伤的那种,叫什么名字 抖音里有一首哼“嗯”的BGM,很多拍的都是打响指比心的那个音乐叫什么啊 急急急急急 哼哼哼哼哼哼感人的一首纯音乐 纯音乐的,到差不多中间那里就有一个女声在那还哼,哼哼哼,哼哼,哈 哈夫曼编码怎么求 身上长小肉粒怎么回事? 信息论有关哈夫曼编码的问题 跪求哈夫曼编码压缩与其它压缩算法的比较(复杂性和压缩效果) 为什么皮肤上长有肉粒 哈夫曼编码的原理? 皮肤上长小肉粒 有人听说过哈夫曼三进制编码吗? 皮肤上长的肉粒是什么 皮肤下面为什么会长一些小肉粒 皮肤长肉疙瘩到底是什么?对于疣这种藏在皮肤中*杀手我们应该如何处理? 皮肤老长小肉粒,该怎么办 钓鱼用什么诱饵 身上长了小肉粒 请问是什么 现在钓鱼用什么饵料 钓鱼基础饵有哪些 皮肤上长小肉粒是怎么回事啊 钓鱼用什么鱼饵最好 皮肤长小肉粒怎么回事 钓鱼用什么鱼饵钓最好