赫夫曼编码(思路)
1.基本介绍
- 赫夫曼编码也翻译为哈夫曼编码(Huffman Coding),又称赫夫曼编码,
- 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一
- 赫夫曼编码广泛的用于数据文件压缩与解压。其**压缩率通常在20%~90%**之间
- 赫夫曼码是可变字长编码(VLC)的一种,Huffman于1952年提出一种编码方法,称之为最佳编码
2.赫夫曼编码图解与分析
-
通信领域中信息的处理方式1-定长编码:
根据对应字符的Ascii编码对应的二进制来表示(长度很长) -
通信领域中信息的处理方式2-变长编码:
统计各个字符出现次数,按照各个字符出现的次数进行二进制编码(不稳定,会出现前缀错误的现象导致匹配不到目的字符)
-
通信领域中信息的处理方式3-赫夫曼编码:
示例:
i like like like java do you like a java
//1共40个字符(包括空格)```
d:1、y:1、u:1、j:2、v:2、o:2、l:4、k:4、e:4、i:5、a:5、(空格):9 //各个字符对应的个数
//按照上面字符出现的次数构建一颗赫夫曼树, 次数作为权值.(图)
Ps:构建赫夫曼树参照上节
大体步骤如下:建节点引接口->建链表->先排序再建树
步骤:
注意!
赫夫曼树根据排序方法不同,也可能不太一样,这样对应的赫夫曼编码也不完全一样,但是wpl是一样的,都是最小的
比如:如果我们让每次生成的新的二叉树总是排在权值相同的二叉树的最后一个,则生成的二叉树为:
这样以来,树不一样导致赫夫曼编码不一样,但是编码的长度是一样的