计算机算法哈弗曼编码原理,Huffman编码原理和代码实现

本文介绍了哈夫曼编码的原理,包括其在数据压缩中的应用,前缀码概念,以及二元前缀码的特性。通过示例展示了如何构建最优前缀码,并提供了C++实现的哈夫曼编码算法,解释了算法步骤。
摘要由CSDN通过智能技术生成

一.  Huffman编码简介

霍夫曼编码(英语:Huffman Coding),又译为哈夫曼编码、赫夫曼编码,是一种用于无损数据压缩的熵编码(权编码)算法。由大卫·霍夫曼在1952年发明。在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。——————摘自维基百科

二.  哈夫曼算法应用

假设我们需要传送的电文为ABACCDA,它由四个字符:ABCD重复组合而成,我们可以假设A、B、C、D的编码分别为00、01、10和11,(最低是2位,如果是1位,只能表示2个)则上述7个字符的电文便为00010010101100,总长14位

当然,在传送电文时,我们希望传输的总长越短越好。如果对每个字符设计长度不等的编码,且让电文中出现次数较多的字符采用尽可能短的编码,则传送电文的总长便可减少。如果设计A、B、C、D的编码分别为0、00、1和01,则上述7个字符的电文可转换成总长为9的字符串000011010。但是这样的电文无法还原,因为前4个字符的子串0000就可有多种译法:AAAA、ABA,BB等,因此,我们引出前缀码的概念

三.  前缀码

我们设计长短不等的编码,必须是任一个字符的编码都不是另一个字符的编码的前缀,这种编码称做前缀编码

比如{1,00,011,0101,01001,01000}就是一个前缀码,而{1,00,011,0101,01011,01000} 就不是前缀码,因为0101是01011的前缀

四.  二元前缀码

由0和1组成的前缀码称作二元前缀码

五.  最优前缀码

由Huffman树产生的前缀码成为最优前缀码,下面介绍如何用Huffman树产生前缀码

将二叉树的叶节点标记字符,由根结点沿着二叉树路径下行,每个分支点引出的左边标0,右边标1,则每条从根结点到叶节点的路径唯一表示了该叶节点的二元前缀码,如下图:

ee55f9ea8a2bd403f8df387771e157d9.png

六.  Huffman算法应用

我们给出以下字符:{'a',&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值