似乎很多实现BWT的压缩器将它与算术编码或霍夫曼编码结合使用。 (随意提名更多,特别是如果他们更好的话。)
我的第一个问题是:为什么字典编码器(例如LZW或LZSS)更适合与BWT一起使用?
我的第二个问题是:哪个是最好的全能算法?
答案 0 :(得分:2)
但在许多情况下,LZ并不是一个更糟糕的选择。 LZ是一种在线算法,可以在流上工作,而BWT必须在大块上运行并且需要大量内存。 LZ的减压非常有效,而BWT仍需要至少5n的额外空间。
BWT的表现与后缀排序有关。有许多实用的后缀排序算法:MSufSort / DivSufSort / Archon / QSufSort / DeepSwallow,理论上最优算法有O(n)时间:SA-IS / SA-DS。
PS /如果您正在编写基于BWT的压缩器,请更多关注编码BWT的输出而不是BWT本身,因为BWT转换有许多实用的库,并且大多数共享相同的接口。只需在项目中使用其中一个。