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

时间:2013-03-31 10:24:45

标签: algorithm compression burrows-wheeler-transform

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

我的第一个问题是:为什么字典编码器(例如LZW或LZSS)更适合与BWT一起使用?

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

1 个答案:

答案 0 :(得分:2)

  1. BWT使用所有大小的上下文,而实际的LZ实现很难使用大小小于3的上下文。
  2. BWT受益于块内的每个匹配,而普通的LZ实现只能在前瞻窗口中找到匹配项。
  3. 但在许多情况下,LZ并不是一个更糟糕的选择。 LZ是一种在线算法,可以在流上工作,而BWT必须在大块上运行并且需要大量内存。 LZ的减压非常有效,而BWT仍需要至少5n的额外空间。

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

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