2013-03-18 94 views
4

我想解决的是,如果有一种可以预先训练的压缩算法,可以使用训练的数据来压缩和解压缩数据。“启动”或“训练”将用于压缩/解压缩的压缩算法?

我不确切知道压缩算法是如何工作的,但我有一个暗示,这是可能的。

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

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) 

是否有一个共同的(即具有流行的语言库),它可以让我做这个压缩算法?

回答

3

根据大多数压缩算法的说法,您所描述的是压缩机的预设字典

我不能说所有压缩库,但zlib通过deflateSetDictionary()inflateSetDictionary()函数绝对支持这种方式 - 正如您想象的那样。有关详细信息,请参阅zlib manual

+0

哇,我在字典中看到的压缩率是2x-5倍。太棒了! – 2013-03-18 03:07:12

1

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

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

它的几个“词典”式的无损压缩方法之一。

LZ是您的Zip存档器基本上所做的。