动态编程,无前缀编码

时间:2019-03-11 20:46:20

标签: dynamic-programming huffman-code prefix-tree

有没有一种方法可以计算给定字母词典及其频率的无前缀编码。与霍夫曼编码类似,但是是动态计算的-优化函数的外观如何?

仅在字典的i位置构建树的问题是,最低的频繁字母可能会改变,因此整棵树的结构也会改变。

1 个答案:

答案 0 :(得分:1)

是的,有几种方法可以动态生成无前缀代码。

正如您所建议的那样,从一些默认频率开始,跟踪到目前为止使用的字母的频率,从概念上讲很简单,对于每个解码的字母,增加该字母的计数,然后从所有计数。 (可能会在每个字母之后完全更改树)。 每个字母都需要大量工作,而且非常缓慢-但是 adaptive Huffman coding algorithms中有几个可以有效地完成相同的工作-使用精巧的算法完成的工作量少得多,因此速度更快。

许多其他数据压缩算法还动态地生成了无前缀代码,比任何自适应霍夫曼算法要快得多,而压缩的代价却很小-例如Polar codesEngel codinguniversal codes例如Elias delta编码。

arithmetic coding data compression algorithm从技术上讲不是无前缀的代码,但与静态霍夫曼编码或自适应霍夫曼编码相比,压缩效果通常稍好(但运行速度较慢)。 算术编码通常是自适应实现的,跟踪到目前为止使用的所有字母的频率。 (许多算术编码实现都跟踪更多的上下文,如果前一个字母为“ t”,则它会记住该上下文中最常见的字母为“ h”,确切地说它的出现频率等等,从而提供了更好的压缩效果)。