2012-07-11 90 views
1

我需要壓縮格式文本壓縮 - 什麼算法使用

[70,165,531,0|70,166,562|"hi",167,578|70,171,593|71,179,593|73,188,609|"a",1,3| 

的數據包含幾千個字符(10000 - 50000約)的一些文本數據。

我讀了各種壓縮算法,但不能決定在這裏使用哪一個。

重要位置的事情是:壓縮串應該只包含alphanumberic字符(或幾個特殊字符,如+ -/&%@ $ ......)我的意思是最算法提供了亂碼的ASCII字符作爲壓縮數據嗎?這必須避免。

有人可以指導我如何在這裏繼續?

P.S本文主要包含numbers,'|字符。其他角色發生的非常非常罕見。

+1

「大多數算法提供亂碼ascii字符」 - 不,它們提供_bytes_。字節和字符是不同的東西。 – 2012-07-23 07:04:44

回答

7

其實您的要求來限制輸出字符自動設置爲可打印字符的成本,你的壓縮增益的25%,如按出來的,你會最終使用大約6

8位,但如果這就是你真的想要的是,你總是可以使用base64或更高效的空間base85輸出將原始字節流重新轉換爲可打印字符。

關於壓縮算法本身,堅持一個比較熟悉的例如gzip或bzip2,因爲經過良好測試的開源代碼都存在。

選擇「最好」的算法其實並不容易,這裏有一個問題清單的摘錄,你要問自己:

  1. 我需要最佳的速度上的編碼或解碼端(例如bZIP結構是相當不對稱的)
  2. 編碼器和解碼器的存儲效率有多重要?可用於嵌入式應用
  3. 重要的是代碼重要的尺寸,也爲嵌入式
  4. 做我想做的預編碼器或decorder或兩者僅在C或以另一種語言的現有井測試代碼
  5. 等on

這裏的底線可能是,取一個有代表性的數據樣本,並用一些現有的算法運行一些測試,並根據對您的用例很重要的標準進行基準測試。

+0

非常感謝!我用霍夫曼和base64編碼的結果。能夠壓縮到約50%。那會做現在。 也許我會嘗試其他方法來達到更好的壓縮效果! – SatheeshJM 2012-07-12 12:00:08

+1

@SatheeshJM儘管它很簡單,但對於某些使用情況來說,Huffman實際上是一個合理的選擇,在給定的約束條件下50%的壓縮比較好。 – fvu 2012-07-12 13:43:39

+0

好的。我使用了一些特定於問題的替換和轉換,並且在使用ascii85編碼時,能夠獲得大約35%的壓縮比。這是綽綽有餘!爲了好玩,我還在壓縮之前應用了Borrows Wheeler轉換。略有改善;得到了34%的壓縮。 無論如何非常感謝您的幫助!美好的一天! – SatheeshJM 2012-07-12 16:57:24

4

只有一個想法:你可以獨立解決你的兩個問題。使用任何算法給你最好的壓縮效果(只需在你的數據類型上試一下就可以了)bz2,zip,rar - 無論你喜歡什麼,並檢查大小),然後去掉「亂碼ascii」(這是實際上只有字節......),你可以用Base64編碼你的壓縮數據。

如果你真的考慮過它,你可能會發現一個更好的算法來解決你的具體問題,因爲你只使用了幾個不同的字符,但是如果你偶然發現一個,我認爲這是值得一試的。

+0

我其實想到提出一個針對特定問題的算法,但最終還是採用了Huffman。 無論如何,謝謝! – SatheeshJM 2012-07-12 11:57:34