Skip to content

现有六个汉字「甲乙丙丁戊己」,假设它们之间是独立的,且出现频率(概率)如下表第一行所示:

平均码长编码效率
频率和理论值0.60.30.060.030.0060.0041.435100%
等长编码aaaaabababaabbabbb3.00047.83%
降序变长编码ababbabbbabbbbabbbbba1.55492.34%
升序变长编码bbbbbabbbbabbbabbabaa5.44626.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% ,只有理论值的约四分之一。