2011-05-24 72 views
11

這是夏天,所以我決定自己寫一個數據壓縮程序,最好用C代碼。我有一個體面的初學者對壓縮如何工作的理解。我只是有幾個問題:編程新手:如何編寫我自己的數據壓縮算法?

1)C會是一個合適的編程語言來完成這項任務?
2)我應該在輸入文件的字節工作?或者以某種方式在二進制級別?

如果有人能給我一個正確的方向,我真的很感激它。我想自己編寫這個代碼,而不是使用預先存在的壓縮庫或類似的東西。

+8

@Doug chamberlain這是有趣和教育。那有什麼問題? – mwcz 2011-05-24 17:15:14

+1

看看哈夫曼編碼算法http://en.wikipedia.org/wiki/Huffman_coding這應該是一個很好的示例算法,以幫助您開始。 – 2011-05-24 17:17:25

回答

3

1)C會是一種合適的編程語言來完成這項任務嗎?

是的。

2)我應該在輸入文件的字節工作?或者以某種方式在二進制級別?

它們是一樣的,所以這個問題沒有意義。

不使用預先存在的壓縮庫

你能使用現有的預壓縮算法?有幾十個和「壓縮算法」 - 當與Google一起使用時 - 將揭示大量有用的信息。

+0

我提到使用字節,而不是以某種方式管理較低級別的較小組位。我已經閱讀過有關霍夫曼壓縮的內容,它似乎可以與個別位一起工作,除非我瞭解它是錯誤的。 – araisbec 2011-05-26 20:28:29

+1

@araisbec:位總是收集到字節中。沒有比字節更細的東西了。你的算法可能會操縱比特;但它通過訪問,修改和存儲整個字節的位來實現這一點。 – 2011-05-26 20:29:55

3
  1. C是編寫壓縮程序的絕佳選擇。不過,您也可以使用其他許多語言。

  2. 您的計算機可能無法直接處理的內存比一個字節(定義相當多)更小的單位,所以用字節工作可能是一個不錯的選擇。您使用數據的一些方法會受到您選擇的壓縮算法的影響。

祝你好運!

4

您可以先看Huffman Encoding開始。很多計算機科學classes實施,作爲一個項目,所以它應該是可管理的。 C將是適當的霍夫曼編碼,但它可能會更容易,首先做一個更高層次的語言,讓你瞭解concepts.There滑梯,提示和實例項目available在Java中在一個大師級別的項目賓夕法尼亞大學(在該頁面上搜索「huff」)。

3
  1. 是的,C非常適合這種工作。

  2. 無論你用字節或位的工作​​將取決於你決定實施的算法。例如,霍夫曼編碼本質上是面向比特的,而許多其他壓縮算法則不是。

3

回答您的問題:

  1. C是合適的。
  2. 它取決於算法,或者你正在考慮'壓縮'的方式。

我的意見將是,首先決定是否要做lossless compressionlossy compression,然後選擇一個算法來實現。這裏有幾個要點:

對於無損一個,有些是非常直觀的,如run-length編碼, 例如,如果有11 a秒和5個b S,你只需對其編碼爲11a5b。 有些算法使用dictionary,請參考LZW encoding。 最後,我建議使用Huffman編碼,因爲它非常直接,簡單且有助於獲得學習算法的經驗(用於您的教育目的)。

對於有損分量,Discrete Fourier Transform (DFT)wavelet,用於JPEG壓縮。這對理解多媒體壓縮很有用。

維基百科page是一個很好的起點。