我希望在一长串的通话记录中对user_ids进行编码。占用最多空间的这些记录的部分是呼叫者和接收者的符号。我将创建一个地图,为最活跃的呼叫者分配较短的符号---这将有助于保持文件的整体大小(以及因此I / O时间)。
我事先知道每个符号的使用次数 - 换句话说,我知道相对概率分布。此外,产生的代码是“无前缀”的,例如霍夫曼代码并不重要。那么什么是最好的编码方案,即能够提供最大压缩并且快速实现的编码方案呢?
答案不仅应指向压缩方案,还应指向该编码方案的实现。
答案 0 :(得分:0)
对于具有已知概率分布的通用无损编码,除了霍夫曼编码,其他“教科书”答案为arithmetic coding。
在实践中,有各种各样的实现。见these general-purpose coders。每个都有不同的属性。如果没有进一步的信息,我们无法给您更准确的答案。
答案 1 :(得分:0)
@conradlee:re “在什么情况下算术编码比Huffman编码更好?”就压缩而言,几乎总是如此。如果你有一个符号S,概率为Ps,那么用它编码的理想比特数bs就是-log(Ps)/ log(2)。例如,如果Ps是1/3,那么bs是~1.585位。使用Huffman,您有向上或向下舍入到最接近的整数位(因此压缩率会降低)。算术编码将使用小数位来存储它。