哪种算法最适合进行Burrows-Wheeler变换



似乎许多实现BWT的压缩器将其与算术编码或霍夫曼编码结合使用。(请随意提名更多,特别是如果他们更好的话。)

我的第一个问题是:为什么字典编码器,如LZW或LZSS,是与BWT一起使用的更糟糕的选择?

我的第二个问题是:哪个是最好的全能算法?

  1. BWT使用所有大小的上下文,而实际的LZ实现几乎不能使用小于3的上下文。
  2. BWT受益于块内的每个匹配,而正常的LZ实现只在forward -forward窗口中查找匹配。

但在许多情况下,LZ并不是一个更糟糕的选择。LZ是一种在线算法,可以在流上工作,而BWT必须在大块上工作,并且需要大量内存。LZ的解压缩非常有效,而BWT仍然需要至少5n的额外空间。

BWT的性能与后缀排序有关。有许多实用的后缀排序算法:MSufSort/DivSufSort/Archon/QSufSort/DeepSwallow,以及理论上最优的O(n)时间算法:SA-IS/SA-DS。

PS/如果你正在编写一个基于BWT的压缩器,请更多地关注编码BWT的输出,而不是BWT本身,因为有许多实用的BWT转换库,并且大多数库共享相同的接口。

最新更新