首页 生活常识

huffman编码原理(一种有趣的编码)

日期:2024-05-02 16:01:30   编辑:罗哥软件开发 

什么是哈夫曼编码?

哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。

哈夫曼编码的原理

哈夫曼编码的基本思路:输入一个待编码的串,首先统计串中各字符出现的次数,称之为频次,假设统计频次的数组为count[],则哈夫曼编码每次找出count数组中的值最小的两个分别作为左右孩子,建立父节点, 循环这个操作2*n-1-n次,这样就把霍夫曼树建好了,建树的过程需要注意,首先把count数组里面的n个值初始化为霍夫曼树的n个叶子节点,他们的孩子节点标号初始化为-1,父节点初始化为他本身的标号。接下来是编码,每次从霍夫曼树的叶子节点出发,依次向上找,假设当前的节点标号是i,那么他的父节点必然是myhuffmantree[i].parent,如果i是myhuffmantree[i].parent的左节点,则该节点的路径为0,如果是右节点,则该节点的路径为1。当向上找到一个节点,他的父节点标号就是他本身,就停止。

哈夫曼编码的具体步骤

1、准备待编码的字符串;

2、统计字符串中每个字符出现的次数;

3、根据上面的数组,生成节点;

4、构建霍夫曼树,每次删除链表中的两个节点,生成一个新节点,并将这个节点重新插入到链表合适位置;

5、通过前序遍历,求出每个字符的二进制编码,同样设置一个长度为256的数组,下标为字符对应的ASCII码,没出现的字符编码为null,不考虑;

6、根据求出的二进制编码替换原来的每个字符,得到整个字符串对应的二进制编码;

7、将二进制编码按照没8位生成一个新字符,最后剩的不足8位的在后面补上count个0,计算一个新字符,补0的个数解码时需要使用;

8、将生成的新字符替换二进制编码字符串,即可得到编码后的内容,长度将在一定程度变短;

哈夫曼编码的特点

1、哈夫曼编码方式保证了概率大的符号对应短码,概率小的符号对应长码,充分利用了短码;

2、哈夫曼是一种即时码:由于代表信源符号的节点都是终端节点,因此其编码不可能是其他终端节点对应的编码的前缀,即哈夫曼编码所得的码字为即时码;

3、哈夫曼编码是一种分组码,各个信源符号都被映射成一组固定次序的码符号;

4、哈夫曼编码是一种唯一可解的码,任何符号序列只能以一种方式译码;

哈夫曼编码的实现

你感兴趣的

今年一季度甘肃省农产品出口额达9亿元

央广网兰州4月26日消息(记者邸文炯)记者从兰州海关获悉,今年一季度,甘肃省农产品出口额达9亿元,其中,苹果、中药材等传统“主力军”出口保持稳定,生鲜蔬菜、柑橘、葡萄等特色产品出口形势喜人。近年来,越来越多的甘肃企业借助“甘味”品牌,将本土特色农产品推向国际市场。日前,50余吨产自甘肃天水的新鲜蔬菜

希箭指纹锁售后号码多少实时反馈-今-日-更-新

希箭指纹锁全国服务热线:400-883-8253在当今社会,随着科技的发展和人们生活水平的提升,个人财产的安全已经成为了一个不容忽视的问题。而希箭指纹锁作为一种重要的安全防护工具,其安全性、可靠性成为了消费者选择的重要依据。今天,我们就来了解一下希箭指纹锁,看看这款产品是如何在众多希箭指纹锁

百典壁挂炉服务热线号码各区24小时维修实时反馈全+境+到+达

我们了解,每一个家庭的百典壁挂炉都是守护健康的重要伙伴,因此,我们的使命就是确保这些伙伴始终处于最佳状态。百典壁挂炉售后客服电话:400-883-8253百典壁挂炉由一群经验丰富的专业技术人才组成,他们对百典壁挂炉的内部构造了如指掌,无论是日常维护还是深度修理,都能迅速找到问题所在,

德雷斯曼壁挂炉各24小时售后全国客服受理中心实时反馈-今-日-汇-总

德雷斯曼壁挂炉24小时售后客服热线:400-883-8253德雷斯曼壁挂炉全国统一售后维修电话:400-883-8253德雷斯曼壁挂炉的技术团队是一支由业界精英组成的强大阵容,他们在安全机构的研发设计方面有着深厚的造诣,多项创新技术已申请专利,为公司的持续发展注入源源不断的动力。更重要的

真火壁挂炉全国各市售后服务热线号码实时反馈-今-日-更-新

真火壁挂炉的售后维修电话是:400-883-8253。真火壁挂炉作为智能家居市场的佼佼者,以其先进的技术和优质的产品赢得了广大消费者的青睐。再优质的产品也难免会在使用过程中出现一些问题,因此售后服务的质量就显得尤为重要。为了保障用户的使用体验,真火壁挂炉提供了专业的售后维修服务,其中一个重要的服务渠

普洛米亚保险柜售后全国服务号码多少实时反馈-今-日-更-新

普洛米亚保险柜的全国售后服务电话是400-883-8253。拨打此电话,您可以预约售后服务,之后售后服务网点会根据您所在的地区进行就近安排,并与您联系,以安排上门维修。虽然不同地区的具体售后电话号码可能不同,但售后服务流程是一致的。如何进行普洛米亚保险柜的售后维修?1. 您可以拨打普洛米

图文推荐

  • 今年一季度甘肃省农产品出口额达9亿元

  • 希箭指纹锁售后号码多少实时反馈-今-日-更-新

  • 百典壁挂炉服务热线号码各区24小时维修实时反馈全+境+到+达

  • 德雷斯曼壁挂炉各24小时售后全国客服受理中心实时反馈-今-日-汇-总

  • 真火壁挂炉全国各市售后服务热线号码实时反馈-今-日-更-新

  • 普洛米亚保险柜售后全国服务号码多少实时反馈-今-日-更-新