5-7 哈夫曼编码

在远程通讯中,要将待传字符转成由二进制的字符串:

设要传送的字符为:ABACCDA

若编码为:A—00 B—01 C—10 D—11

则对应的字符编码为:00010010101100

若将编码设计为长度不等的二进制编码,即让待传字符串中出现次数较多的字符采用尽可能短的编码,则转换的二进制字符串便可能减少

设要传送的字符为:ABACCDA

若编码为:A—0 B—00 C—1 D—01

则对应的字符编码为:000011010

但:0000可以被理解为(AAAA、ABA、BB)出现了重码

关键:要设计长度不等的编码,则必须使任一字符的编码都不是另一个字符的编码的前缀—(这种编码称作前缀编码)

问:什么样的前缀码能使得电文总长最短?

哈夫曼编码

方法:

  1. 统计字符集中每个字符在电文中出现的平均概率(概率越大,要求编码越短)

  2. 利用哈夫曼树的特点:权越大的叶子离根越近;将每个字符的概率值作为权值,构造哈夫曼树。则概率越大的结点,路径越短

  3. 在哈夫曼树的每个分支上标上0或1:

    结点的左分支标0,右分支标1

    把从根到每个叶子的路径上的标号连接起来,作为该叶子代表的字符的编码