【问题标题】:"Priming" or "Training" a compression algorithm to be used for compression/decompression?“启动”或“训练”用于压缩/解压缩的压缩算法?
【发布时间】:2013-03-18 01:47:52
【问题描述】:

我正在尝试确定是否有可以预先训练的压缩算法,您可以使用训练后的数据来压缩和解压缩数据。

我不知道压缩算法是如何工作的,但我知道这是可能的。

例如,如果我单独压缩这些行,它不会很好地压缩。

banana: 1, tree: 2, frog: 3
banana: 7, tree: 9, elephant: 10

如果我预先用 100 条样本行训练压缩算法,它会很好地压缩,因为它已经有一种将“香蕉”映射到代码/查找值的方法。

帮助解释我的问题的伪代码:

# Compressing side

rip = Rip()
trained = rip.train(data)  # once off
send_trained_data_to_clients(trained)

compressed = rip.compress(data)

# And on the other end

rip = Rip()
rip.load_train_data(train)
data = rip.decompress(compressed)

是否有一个通用的(即有流行语言的库)压缩算法让我这样做?

【问题讨论】:

    标签: compression


    【解决方案1】:

    按照大多数压缩算法的说法,您所描述的是压缩器的预设字典

    我不能代表所有压缩库,但 zlib 绝对支持这一点 - 以您想象的确切方式 - 通过 deflateSetDictionary()inflateSetDictionary() 函数。详情请见zlib manual

    【讨论】:

    • 哇,我看到字典的压缩率提高了大约 2 到 5 倍。太棒了!
    【解决方案2】:

    它存在,它被称为 Lempel-Ziv 编码,你可以在这里阅读更多:

    http://en.wikipedia.org/wiki/LZ77_and_LZ78

    它是几种“字典”类型的无损压缩方法之一。

    LZ 是您的 Zip 归档器的基本功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      相关资源
      最近更新 更多