前面的表述球之间的关系相对于后面这个是比较繁琐的,而且由于前面的排列之间没有任何的规律,进行改进和压缩的空间也就比较小了;因此:混乱程度高的信源,所表达的信息更难被压缩,熵也更高
在使用哈夫曼编码执行对码元的实际编码过程时,码元的权值可设置为其概率值,那么可以根据其权值来构建哈夫曼树。我们假设使用哈夫曼编码对以下概率的码字进行编码:
码字 概率
A 0.1
B 0.1
C 0.15
D 0.2
E 0.2
F 0.25
根据概率表构建哈夫曼树的过程如下图所示:
最终我们可以得到如下图所示的哈夫曼树:
在哈夫曼树构建完成后,便可以得到每一个码元的哈夫曼编码的码字。具体方法是:从哈夫曼树的根节点开始遍历,直至每一个终端节点,当访问某个节点的左子树时赋予码字0,访问右子树时赋予一个码字1(反之亦可),直到遍历到终端节点时这一路径所代表的0和1的串便是该码元的哈夫曼编码码字。
例如上图的哈夫曼树,根节点访问左子树ABCF,赋予码字0;然后再访问左子树ABC,赋予码字0,此时整个码字为00,然后访问右子树得到终端节点C,赋予码字1,此时便可以得到C的哈夫曼编码码字001。以此规律,整个六个元素的码元集合的编码码表为:
A: 0000
B: 0001
C: 001
D: 10
E: 11
F: 01
从这个码表中还可以看出另外一个规律:哈夫曼编码的任意一个码字,都不可能是其他码字的前缀。因此通过哈夫曼编码的信息可以紧密排列连续传输,而不用担心解码时的歧义性。