现有六个汉字「甲乙丙丁戊己」,假设它们之间是独立的,且出现频率(概率)如下表第一行所示:
甲 | 乙 | 丙 | 丁 | 戊 | 己 | 平均码长 | 编码效率 | |
---|---|---|---|---|---|---|---|---|
频率和理论值 | 0.6 | 0.3 | 0.06 | 0.03 | 0.006 | 0.004 | 1.435 | 100% |
等长编码 | aaa | aab | aba | baa | bba | bbb | 3.000 | 47.83% |
降序变长编码 | a | ba | bba | bbba | bbbba | bbbbba | 1.554 | 92.34% |
升序变长编码 | bbbbba | bbbba | bbba | bba | ba | a | 5.446 | 26.35% |
首先,根据信息论,我们可以得到该离散信源的熵约为1.435比特,也就是它的二进制理论平均码长约为1.435,保留三位小数,其计算式为:0.6*LOG(1/0.6,2)+0.3*LOG(1/0.3,2)+0.06*LOG(1/0.06,2)+0.03*LOG(1/0.03,2)+0.006*LOG(1/0.006,2)+0.004*LOG(1/0.004,2)=1.434717535
,以熵作为比较编码效率的基础,那么它就是100%。
接下来,我们用ab两个字母采用三种不同的方法对它们进行唯一可译编码,算出平均码长后进行对比,以便弄清频率和编码方式对编码效率的影响。
第一种方式为等长编码。因为有6个待编码的元素,所以每个元素至少需要3个字母来编码,平均码长为3,编码效率为:1.435/3*100=47.83%
,不到理论值的一半。
第二种方式为降序变长编码,即将待编码的元素按其频率降序排列,然后再按从越常见越码短的原则进行编码,其平均码长的计算式为:0.6*1+0.3*2+0.06*3+0.03*4+0.006*5+0.004*6=1.554
,编码效率为:1.435/1.554=92.34%
,已经接近理论值。
第三种方式为升序变长编码,即将待编码的元素按其频率升序排列,上表中以反向来体现,然后再按从越不常见越码短的原则进行编码,其平均码长的计算式为:0.6*6+0.3*5+0.06*4+0.03*3+0.006*2+0.004*1=5.446
,编码效率为:1.435/5.446=26.35%
,只有理论值的约四分之一。