我必须向我的班级解释如何对小信息进行基本算术编码。我一直在调查很多文档并阅读很多文章,我可以说我理论上理解这种方法是如何工作的,但仍然有一些问题。
我正在逐步完成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。
我希望自己清楚明白,我会感激任何帮助。
答案 0 :(得分:1)
他们正在想象一个固定的模型,用于在特定消息被编码之前很久就建立的数据。该模型原则上是由大量此类消息构成的,因此没有理由相信eaii!
本身应与模型中的概率相匹配。当然,该模型仅用于说明目的,并不比eaii!
消息更真实。 (虽然我想我前几天正在把我的东西拉出烤箱。)
模型中符号的顺序是任意的。它只需要在两端都是相同的模型。当然,概率加起来是很重要的。
第二个模型只是另一个任意模型,用于说明当符号的概率大于1/2时,符号如何在不到一点的情况下编码。对于该模型,一系列a
中的每个a
都会花费一半多一点。
答案 1 :(得分:0)
我认为概率是样本。
要确定测试特定样本的概率,只需计算每个字符,然后将每个字符的出现次数除以字符总数。 (总和是1)。
请注意,当重复使用相同的字符时,算法算法会很有效。
例如:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa压缩得非常好 abfpababbahnajdapkalamkmdamlkapaaapokpokpdq压缩不会很好(试试Huffman)