2013-03-18 120 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存檔器基本上所做的。