霍夫曼编码C语言实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
霍夫曼编码的C语言实现1.霍夫曼编码霍夫曼编码是1952年为文本文件而建立,是一种统计编码。属于无损压缩编码。霍夫曼编码的码长是变化的,对于出现频率高的信息,编码的长度较短;而对于出现频率低的信息,编码长度较长。这样,处理全部信息的总码长一定小于实际信息的符号长度。霍夫曼编码同香农、费诺编码一样是一种通信编码,但是他们是按不同思路设计了各自的编码实现方法。通信的根本问题是如何将信源输出的信息在接收端的信息精确或近似的复制出来。若接收端要求无失真地精确复制信源输出的消息,此信源编是无失真编码。只有对离散信源可以实现无失真编码,由于连续信源输出信息量可为无限大,故不可能实现无失真编码。霍夫曼编码就是一种无损压缩编码,在通信领域中应用非常广泛,因此我们用C语言的方式为让大家更好的认识和理解霍夫曼编码。2.编码原理霍夫曼码由霍夫曼树构造,平均码长是霍夫曼树的带权路径长度,由于霍夫曼树是权最小的树,故其压缩效果最好。霍夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。?在计算机信息处理中,“霍夫曼编码”是一种一致性编码法(又称熵编码法),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的。????霍夫曼码是用概率匹配方法进行信源编码。有两个明显特点:一是保证了概率大的符号对应于短码,概率小的对应于长码,充分利用了短码;二是缩减信源的最后二个码字总是最后一位不同,从而保证了霍夫曼码是即时码。霍夫曼变长码的效率很高,它可以单个信源符号编码或用L较小的信源序列编码,对编码器的设计来说也易实现,但要注意,更高效率的编码仍须按长序列来计算,这样才能使平均码字降低。3.霍夫曼编码的步骤(l)将信号源的符号按照出现概率递减的顺序排列。(2)将两个最小出现概率进行合并相加,得到的结果作为新符号的出现概率。(3)重复进行步骤1和2直到概率相加的结果等于1为止。(4)在合并运算时,概率大的符号用编码0表示,概率小的符号用编码1表示。(5)记录下概率为1处到当前信号源符号之间的0,l序列,从而得到每个符号的编码。例如:设信号源为?s={s1, s2, s3, s4, s5}对应的概率为p={0.25,0.22,0.20, 0.18,0.15}。根据字符出现的概率来构造平均长度最短的异字头码字。霍未曼编码通常采用两次扫描的办法,第一次扫描得到统计结果,第二次扫描进行编码。4.编码的特点(1)哈夫曼编码实际上构造了一个码树,码树从最上层的端点开始构造,直到树根结束,最后得到一个横放的码树,因此,编出的码是即时码。(2)哈夫曼编码采用概率匹配方法来决定各码字的码长,概率大的符号对应于短码,概率小的符号对应于长码,从而使平均码长最小。(3)每次对概率最小的两个符号求概率之和形成缩减信源时,就构造出两个树枝,由于给两个树枝赋码元时是任意的,因此编出的码字并不惟一。5.C语言的实现#include stdio.h#include malloc.h#include conio.h#include string.h#include stdlib.h#define HuffmanTree HF#define HuffmanCode HMC?typedef struct{unsigned int weight;?unsigned int parent,lchild,rchild;} HTNode,*HF;?typedef char **HMC;?typedef struct {unsigned int s1;unsigned int s2;} MinCode;?void Error(char *message);HMC HuffmanCoding(HF HT,HMC HC,unsigned int *w,unsigned int n);MinCode Select(HF HT,unsigned int n);?void Error(char *message){?fprintf(stderr,Error:%s/n,message);exit(1);}?HMC HuffmanCoding(HF HT,HMC HC,unsigned int *w,unsigned int n){unsigned int i,s1=0,s2=0;HF p;char *cd;unsigned int f,c,start,m;MinCode min;if(n=1) Error(Code too small!);m=2*n-1;HT=(HF)malloc((m+1)*sizeof(HTNode));for(p=HT,i=0;i=n;i++,p++,w++){p-weig

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档