【问题标题】:Compression algorithm operating on pre-built dictionary as data structure以预建字典为数据结构的压缩算法
【发布时间】:2018-05-30 15:01:14
【问题描述】:

我很确定这是一个常见的用例,但在谷歌搜索半天后,我必须填写一个问题。

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

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

有类似的东西吗? IBM DB2 does exactly that 但我怀疑他们开源了这种方法。 zlib allows one to pass dictionary,但它是原始字节数组,需要对每条消息进行处理,并且没有生成所述字节数组的方法。

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

Java 实现的奖励积分。

【问题讨论】:

    标签: java dictionary data-structures compression


    【解决方案1】:

    最终我被指向Zstd compression,它允许提供您自己的(共享)字典。有Java bindings具有基于样本的字典训练能力。

    它能够胜过我自己的算法,共享字典小到 512 字节:

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

    【讨论】:

      【解决方案2】:

      我最终使用 LZW-Huffman 混合实现了我自己的压缩。

      我使用 LZW 构建了一个字典(使用参考数据集),其中代码点映射到字节序列,然后根据这些代码点的频率制作 Huffman 树。然后我使用 TreeMap 在输入数组中查找字节序列,将它们传递给 Huffman coder。

      它工作得相当好。 0.4 压缩通常用于约 120 字节条目,其中 GZip 给出 0.75。

      我仍然对针对此问题的优化库存解决方案感兴趣。

      【讨论】:

        猜你喜欢
        • 2013-07-10
        • 2013-12-10
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多