2011-08-25 54 views
0

也許我的google-fu只是跛腳,但我記得15年前閱讀一篇文章,描述瞭如何分配某種壓縮算法字典密鑰的位數減少到最常被重複或共同的較長冗餘項目被壓縮。當它以較窄的位值運行時,它將位添加到較少使用的字典項目中。使用格雷碼(或其他?)來存儲任何可變的位寬值,而不會存儲其寬度

然後它用這些字典鍵替換源中的項目,但是,作爲灰色代碼(如果內存服務正確),因爲據推測,當逐位轉換灰碼編碼的數字時,你應該知道什麼時候你有整個號碼,而不必存儲你需要閱讀的位數。

問題是,我不明白這是如何工作的,而且,我看到的所有文檔格雷碼(例如維基百科)在解碼數字位置傳感器時強調其優點。我顯然不需要那樣做我的應用程序。

這是我想到的不同類型的編碼,還是我錯過了一些非常明顯的東西?

我的應用程序是一個基於特里結構的索引,其索引被串行化爲一個文件表的三字節鍵。一個頁面可能有成千上萬的點擊量,但是經常,因爲這些點的數量從10K到100K不等,這會導致大量浪費的空間。

我想過其他黑客,但我的記憶不斷回到這,這將是理想的。有人可以發佈一個鏈接到一個例子,或爲我刪除一些關鍵字?或.net/java/c *中的示例?謝謝!

+5

您描述的這種方案聽起來像[霍夫曼編碼](http://en.wikipedia.org/wiki/Huffman_coding)。 –

+2

你確定你在考慮格雷碼嗎?我想你在考慮[前綴代碼](http://en.wikipedia.org/wiki/Prefix_code),例如[哈夫曼編碼](http://en.wikipedia.org/wiki/Huffman_code)。 –

+0

聽起來像LZW。 – borrible

回答

1

它可能是Arithmetic/Range編碼(大多數人在學術上是相同的)。

7zip在LZ *通過後使用範圍編碼;所以你可以使用公共領域的SDK(包括整個壓縮例程的C#代碼,而不僅僅是一個包裝器)。

+0

7zip是用C#嗎?哇,真酷!我從來沒有檢查。 – FastAl

相關問題