霍夫曼编码可用于无损数据压缩。
思想就是给出现概率较大的符号设定较短的二进制码,给出现概率较小的符号设定较长的二进制码。从而达到压缩总二进制编码长度。
ABCD概率分布
把概率较小的两个连起来,也就是C和D连起来,“C+D”概率为25%
那么现在的概率分布就是 A:50% B:25% “C+D”:25%,然后还是继续把概率较小的两个连起来,也就是B和“C+D”。
最和把剩下的A也连起来,然后在每一条上分支标1,下分支标0:
这就像一颗树,右边是树根,左边是树杈。我们从树根往左回溯,就可以得到各个符号的编码。
A:1
B:01
C:001
D:000
那么一串字符”ABACDA“的编码为就是”10110010001“,总共11bit。
如果用普通的二进制表示这串字符的话,4个字符需要2bit表示,假设
A:00
B:01
C:10
D:11
那么这串字符的编码为”000100101100“,总共12bit。
可见霍夫曼编码用较少的编码表达了同样的字符串,字符串越长,节省的bit就越多。从而达到压缩编码的目的。