用于构建用于压缩的预共享字典的算法

Algorithm for building a pre-shared dictionary for compression

提问人:Timmmm 提问时间:11/8/2023 更新时间:11/10/2023 访问量:22

问:

一些压缩算法支持预先共享的字典,但我找不到任何关于如何实际构造字典的信息。

这可以更正式地表述为:

给定 N 个不同长度的输入字节序列,找到一个长度为 D 的字节序列,该字节序列可以最小化 N 个输入的总压缩大小,前提是输入中与字典部分匹配的任何序列都可以替换为对字典的引用。每个引用占用 R 字节(例如,LZ4 大约为 3 个字节)。

找到最佳词典可能太慢了,但是如何在合理的时间内找到一本好的词典呢?

字典 压缩

评论


答:

1赞 Mark Adler 11/9/2023 #1

你可以使用 zstd --train 从一大堆小文件构建一个好的字典。(查找手册页的 “DICTIONARY BUILDER” 部分。同样的字典也适用于其他 LZ 压缩机。

对于该算法,源代码引用了

Constructs a dictionary using a heuristic based on the following paper:
 *
 * Liao, Petri, Moffat, Wirth
 * Effective Construction of Relative Lempel-Ziv Dictionaries
 * Published in WWW 2016.

评论

0赞 Timmmm 11/9/2023
不过,我正在寻找算法。某处是否有描述,所以我不需要阅读源代码?
0赞 Mark Adler 11/10/2023
@Timmmm 请参阅更新的答案。