基本算术编码

时间:2014-02-12 04:55:33

标签: math coding-style compression

我必须向我的班级解释如何对小信息进行基本算术编码。我一直在调查很多文档并阅读很多文章,我可以说我理论上理解这种方法是如何工作的,但仍然有一些问题。

我正在逐步完成these examples(第一个例子,第二页) - 我们有'eaii!'消息,我们想用算术方法对它进行编码。

在示例中,它设置

Symbol      Probability      Range
a             .2            [0 , 0.2)
e             .3            [0.2 , 0.5)
i             .1            [0.5 , 0.6)
o             .2            [0.6 , 0.8)
u             .1            [0.8 , 0.9)
!             .1            [0.9 , 1.0)

我的第一个问题是,它是如何设置概率的?我的逻辑告诉我,如果我有两个'i'符号,那么该符号应该具有最高概率,不应该吗?

它是如何确定从哪个范围开始的,以及之后的其他范围?

另一个例子是编写消息'abc',其设置如下:

Symbol      Probability      Range
a             .7            [0 , 0.7)
b             .1            [0.7 , 0.8)
c             .2            [0.8 , 1.0)

我也不明白为什么第一个符号的概率比其他符号大得多,即使它是一个外观的顺序,我也不明白它是如何设置为0.7的,就像为什么不是0.8或0.5。

我希望自己清楚明白,我会感激任何帮助。

2 个答案:

答案 0 :(得分:1)

他们正在想象一个固定的模型,用于在特定消息被编码之前很久就建立的数据。该模型原则上是由大量此类消息构成的,因此没有理由相信eaii!本身应与模型中的概率相匹配。当然,该模型仅用于说明目的,并不比eaii!消息更真实。 (虽然我想我前几天正在把我的东西拉出烤箱。)

模型中符号的顺序是任意的。它只需要在两端都是相同的模型。当然,概率加起来是很重要的。

第二个模型只是另一个任意模型,用于说明当符号的概率大于1/2时,符号如何在不到一点的情况下编码。对于该模型,一系列a中的每个a都会花费一半多一点。

答案 1 :(得分:0)

我认为概率是样本。

要确定测试特定样本的概率,只需计算每个字符,然后将每个字符的出现次数除以字符总数。 (总和是1)。

请注意,当重复使用相同的字符时,算法算法会很有效。

例如:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa压缩得非常好 abfpababbahnajdapkalamkmdamlkapaaapokpokpdq压缩不会很好(试试Huffman)