压缩具有已知概率分布的符号的最佳熵编码方案是什么?

| 我正在寻找在很长的通话记录列表中对user_ids进行编码的方法。这些记录中占用最多空间的部分是呼叫者和接收者的符号。我将创建一个映射,为最活跃的调用者分配较短的符号-这将有助于减小文件的整体大小(以及I / O时间)。 我预先知道每个符号将使用多少次-换句话说,我知道相对概率分布。此外,所产生的代码是“无前缀的”(例如霍夫曼代码)并不重要。那么最佳的编码方案是什么,即能提供最大压缩率并且可以快速实现的编码方案? 答案不仅应指向压缩方案,还应指向该编码方案的实现。     
已邀请:
对于具有已知概率分布的通用无损编码,除了霍夫曼编码之外,另一个“教科书”答案是算术编码。 实际上,有多种实现方式。请参阅这些通用编码器。每个都有不同的属性。没有更多信息,我们无法为您提供更准确的答案。     
@conradlee:re“在什么情况下算术编码比霍夫曼编码更好?”就压缩而言,几乎总是如此。如果您有一个符号S(概率为Ps),则用bs对其进行编码的理想位数为-log(Ps)/ log(2)。例如,如果Ps为1/3,则bs为〜1.585位。使用Huffman,您必须向上或向下舍入到最接近的位数(因此压缩率会降低)。算术编码将使用小数位数存储它。     

要回复问题请先登录注册