我正在尝试研究是否有可以预先训练的压缩算法,您可以使用经过训练的数据来压缩和解压缩数据。
我不确切知道压缩算法是如何工作的,但我知道这是可行的。
例如,如果我单独压缩这些行,它就不能很好地压缩。
banana: 1, tree: 2, frog: 3
banana: 7, tree: 9, elephant: 10
如果我预先使用100个样本行训练压缩算法,它会很好地压缩,因为它已经有了将“banana”映射到代码/查找值的方法。
伪代码帮助解释我的问题:
# 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)
是否有一个共同的(即有流行语言的库)压缩算法让我这样做?
答案 0 :(得分:3)
在大多数压缩算法的说法中,您所描述的将是压缩器的预设词典。
我无法代表所有压缩库,但zlib肯定支持这一点 - 以您想象的确切方式 - 通过deflateSetDictionary()
和inflateSetDictionary()
函数。有关详细信息,请参阅zlib manual。
答案 1 :(得分:1)
它存在,它被称为Lempel-Ziv编码,你可以在这里阅读更多:
http://en.wikipedia.org/wiki/LZ77_and_LZ78
它是几种“字典”类型的无损压缩方法之一。
LZ就是Zip归档器的基本功能。