无前缀编码的动态规划

Dynamic Programming for prefix-free coding

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

仅在字典的位置 i 构建树的问题在于,频率最低的字母可能会发生变化,因此整个树的结构也会发生变化。

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

正如您所建议的,从一些默认频率开始,跟踪到目前为止使用的字母的频率,并且对于每个解码的字母,增加该字母的计数,然后从所有的罪名。 (可能会在每个字母后完全改变树)。 这将需要为每个字母做大量工作,而且速度非常慢——然而 有几个 adaptive Huffman coding algorithms 可以有效地做同样的事情——使用聪明的算法,做的工作少得多,所以速度更快。

许多其他数据压缩算法也比任何自适应 Huffman 算法更快地动态生成无前缀代码,而压缩的牺牲很小——例如 Polar codes or Engel coding or universal codes 例如 Elias delta 编码。

arithmetic coding data compression algorithm 在技术上不是无前缀代码,但通常比静态霍夫曼编码或自适应霍夫曼编码提供更好的压缩(但运行速度更慢)。 算术编码通常是自适应实现的,跟踪到目前为止使用的所有字母的频率。 (许多算术编码实现跟踪更多的上下文——如果前一个字母是 "t",它会记住在此上下文中出现频率最高的字母是 "h" 以及它出现的确切频率等,提供更好的压缩)。