如何设计一种高效的算法来支持 LZ77 压缩序列中的随机访问?

问题描述

我正在做一个文本压缩项目,我需要在 LZ77 压缩序列中设计一个有效的算法。特别地,给定一个 LZ77 压缩序列和一个索引 i,我们可以 恢复输入序列S的单个符号S[i]。算法消耗的空间和随机访问一个符号的时间是我们追求的。

预先感谢您的建议。

解决方法

参见 zran.c 示例。它构建一个索引,其中包含 gzip 或 zlib 流的入口点。就未压缩数据而言,您可以选择入口点彼此之间的大致接近程度。要获得未压缩数据的随机字节,您可以在该字节之前的最近入口点开始解压缩,然后解压缩直到到达该字节。

权衡是更少的入口点需要更少的存储空间,但需要更长的时间才能到达任何给定的字节,而更多的存储空间和更少的时间。