哈夫曼编码是基于哈夫曼树的一种长度最短的前缀编码。
这里,我不详细讲哈夫曼树与哈夫曼编码的相关知识,说一下自己在学习过程中的一点想法。
我们看影视剧会经常会看到一方给另一方发送了一大串“01”混合的数串,而另一方会根据某种预先设定好的编码表来解密这一串“01”的奥义,这就是哈夫曼编码的使用之一。
至此,我们就会想可以自己设定一串“01”串,这个串中隐含了你想说给他(她)的话,这样通过你喜欢的方式将串传递给ta,让ta慢慢领悟其中的含义。
首先我们先看一道有关哈夫曼编码的习题:
eg.某通信系统有十种字符: y、b、h、a、-、t、d、r、p、i,其出现的概率百分比分别为:16、8、2、19、11、10、15、9、6、4,请完成:
(1)构造Huffman树(要求所有结点左孩子的权值不大于右孩子的权值);
(2)据此设计出各个字符的Huffman编码;
(3)并译出下列报文:111110101111011110000100110111111011111101111101101000。
第(1)题构造哈夫曼树如下:
第(2)题编码表:
字符 | Huffman编码 |
y | 00 |
b | 0110 |
h | 111110 |
a | 10 |
- | 010 |
t | 1110 |
d | 110 |
r | 0111 |
p | 11110 |
i | 111111 |
第(3)题解密报文:
111110 10 11110 11110 00 010 0110 111111 0111 1110 111110 110 10 00
h a p p y - b i r t h d a y
看到此,想必一切都明白了吧,happy-birthday送给你,O(∩_∩)O~
当然,上面这个字符编码是我自己设计的,可以根据需要自行变化,只要你懂得哈夫曼树的构造原理,那么你就可以设计出任何你想要表达的“密文”。
“I love you”、“happy-new-year”
不过好像你发给的对方也得懂点哈夫曼编码的基本知识,不然会是一脸懵逼,什么东东?