以预先构建的字典作为数据结构运行的压缩算法

ala*_*mar 5 java compression dictionary data-structures

我相当确定这是一个常见的用例,但经过半天的谷歌搜索后,我必须回答一个问题。

我真的很想要一种算法,我可以在数据语料库上运行来确定字典(作为数据结构),然后使用该字典快速有效地压缩新到达的数据,这要归功于该字典。

例如,我会在总计 10MB 的 10,000 条消息上运行它,以确定字典数据结构,在各方之间共享此字典,然后在享受非常快速和强大的压缩的同时交换消息。

有这样的事吗?IBM DB2正是这样做的,但我怀疑他们是否开源了该方法。zlib允许传递dictionary,但它是原始字节数组,需要对每条消息进行处理,并且没有生成所述字节数组的方法。

将数据结构保存在内存中的想法是避免每条消息处理的任何开销。

Java 实现的奖励积分。

ala*_*mar 6

最终我被指出允许提供您自己的(共享)字典的Zstd 压缩。Java 绑定具有基于样本的字典训练能力。

它能够超越我自己的算法,共享字典小至 512 字节:

压缩效率s是样本数,d是字典长度,l是压缩级别)