首页 生活常识

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、哈夫曼编码是一种唯一可解的码,任何符号序列只能以一种方式译码;

哈夫曼编码的实现

你感兴趣的

网友回音丨感谢绥宁县住建局,材料款和工资已结清!

七台河:多举措让法治公安建设可感可触

盗窃案件破案率连续两年保持100%,持续提高街面见警率、管事率,规范执法流程、创建前置审查机制让执法更加规范更有温度……近年来,黑龙江省七台河市公安局以“人民满意”为标尺,多措并举在更高水平上推进法治公安建设,交出了一份既有力度又有温度的“民生答卷”。小案快破,让安全感触手可及。“感谢民警,这么快就

山东省周村区发布高温橙色预警

周村区气象台2025年07月03日09时42分发布高温橙色预警信号:受副热带高压影响,预计未来一周我区全部镇和街道将出现持续性高温天气,3-5日最高气温37~39℃,局部可达40℃以上;6日受降水影响,最高气温36℃左右;7-9日最高气温35~37℃。本轮高温过程气温高、湿度大、昼夜温差小、体感闷热

美刚称对乌军援有进展,又暂停部分武器供应!到底啥意思?

乌克兰这仗还怎么打?文 | 海上客“在对乌克兰军援上有进展!”这是美国方面在不久前举行的北约峰会上所发消息。短短几天之后,实际行动却是自7月1日起,美国开始暂停向乌克兰提供部分防空导弹和其他武器。按照新华社的报道,白宫和五角大楼都确认了此事属实!美国爱国者防空系统 图:资料1话,可以说得冠冕堂皇。理

本周末,嘉兴这几条路要限行

2025年7月普通高中学业水平考试定于7月5日至6日举行。为保障此项考试安全顺利进行,根据《中华人民共和国道路交通安全法》第三十九条之规定,经研究,决定对嘉兴市本级考点周边部分道路采取临时交通限制措施。现将有关事项通告如下:一、交通限制时间7月5日 8:00—11:40、13:30—17:30;7月

方向标识岂是装饰画?这件事和改掉“左行右立”习惯一样重要!|锋面评论

上海地铁,四通八达,换乘站,不少。换乘,普遍有便捷和轻松两种模式。轻松,自然是坐自动扶梯;便捷么,爬爬步梯。举例来说,嘉善路站,12号线和9号线交汇。步梯的换乘通道,分两侧,一边下,一边上,都贴着醒目的标识,喇叭还在喊着“换乘9号线的乘客请靠右上楼,注意脚下安全”。可无论高峰期与否,总有“逆行者”,