我对自适应算术编码的点感到困惑。

我理解静态算术编码涉及使用在整个过程中保持静态的符号的预设概率。我还了解自适应算术编码涉及在遇到的每个符号之后更改所有概率。

但是,在每个符号之后改变概率的点是什么?为什么你不是先通过整个文件先进,并确定概率,然后做算术编码作为第二次通过?

另外,我不明白如何改变符号的概率会影响压缩?如果我们知道我们正在压缩的文件中符号的真正概率,那么它将使文件变小?

有帮助吗?

解决方案

首先,考虑“通过整个文件”。这里有一些值得思考的假设。

文件可能非常大,并且遍历它们两次可能昂贵。这是大多数真实世界压缩标准都基于块或窗口的一个原因。

有些情况,您没有“整个文件”以开始,例如通信通道。 tls (在1.3之前,至少)支持压缩。

文件并不总是均匀的。档案(例如 tar )是一个案例。适用于文件的一部分的统计模型可能不适合另一部分。自适应编码也适应此。

对于您的最终问题,如果编码器和解码器都知道我们正在压缩的文件中符号的真正概率,那么不需要传输。事实上,我们有时会在现实世界中这样做。例如,JPEG标准指定当它们是合适的时间的默认编码表,并允许编码器在不是时提供自身。

有效地发送静态编码表(即,压缩它)是一个非活动问题,尤其是对于大代码字母表。对于精心设计的方案,发送表的成本应该等于使用自适应代码的“学习成本”。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top