在远程通讯中,要将待传字符转成由二进制的字符串:
设要传送的字符为:ABACCDA
若编码为:A—00 B—01 C—10 D—11
则对应的字符编码为:00010010101100
若将编码设计为长度不等的二进制编码,即让待传字符串中出现次数较多的字符采用尽可能短的编码,则转换的二进制字符串便可能减少
设要传送的字符为:ABACCDA
若编码为:A—0 B—00 C—1 D—01
则对应的字符编码为:000011010
但:0000可以被理解为(AAAA、ABA、BB)出现了重码
关键:要设计长度不等的编码,则必须使任一字符的编码都不是另一个字符的编码的前缀—(这种编码称作前缀编码)
问:什么样的前缀码能使得电文总长最短?
哈夫曼编码
方法:
统计字符集中每个字符在电文中出现的平均概率(概率越大,要求编码越短)
利用哈夫曼树的特点:权越大的叶子离根越近;将每个字符的概率值作为权值,构造哈夫曼树。则概率越大的结点,路径越短
在哈夫曼树的每个分支上标上0或1:
结点的左分支标0,右分支标1
把从根到每个叶子的路径上的标号连接起来,作为该叶子代表的字符的编码
