算术编码,终止符号和空字符串

时间:2012-03-14 04:50:31

标签: lossless-compression

假设源字母表是a,b,c,其中a作为终止符号,因此单位间隔相应地划分为 [0,P(a),P(a)+ P(b),1]。

由一串b和c结尾的字符串以a(终止符号)结尾,对编码有效。具有中间a的字符串被认为对编码无效。

因此,使用位于区间[P(a),1)中的编码很容易构造字符串。但算术编码是否在区间[0,P(a))中为任何字符串分配编码?空字符串是否有资格编码为[0,P(a))中的位串?由于空字符串可以被认为是字符串“a”或只是终止符号。

由于将空间用于编码空字符串似乎毫无意义,为什么不对单位间隔进行第一次划分 [0,(P(b)-P(a))/(1-P(a)),1]对应于映射[P(a),P(a)+ P(b),1]来填充单位间隔。然后随后的精炼分区将照常使用[0,P(a),P(a)+ P(b),1]。

1 个答案:

答案 0 :(得分:2)

是的,空字符串将在该间隔内(即0)。这是多余的,因为您还可以从编码表示的长度推断字符串是零长度,因此您可以将其排除。更一般地说,如果您可以根据字符串的前一部分推断任何符号是不可能的,那么您可以将其排除(给予其他符号更多的间隔)并节省一点空间。但是,如果您执行此操作的唯一情况是使用第一个符号,那么节省空间可能太微不足以证明额外特殊情况的复杂性。