我試圖在插入所有實際的壓縮文件數據後,將哈夫曼樹寫入壓縮文件。但是,我只是意識到了一點問題,假設我決定一旦所有的實際數據都寫入文件,我就會輸入2個換行字符,然後寫入樹。 這意味着,當我讀回東西時,這兩個換行符(或任何字符)是我的分隔符。問題是,完全可能的是,實際數據也有2個換行符,在這種情況下,我的分隔符檢查將失敗。 我在這裏舉了兩個換行符的示例,但對於任何字符串都是如此,我可以通過可能採用較長的字符串作爲分隔符來顛覆問題,但這會產生兩個不理想的效果: 1.有仍然是一個遙遠的機會,長字符串在壓縮數據中存在一些巧合。 2.不一定需要膨脹一個需要壓縮的文件。在壓縮後將huffman樹寫入文件
有沒有人有關於如何從樹數據中分離壓縮數據的建議?
這就是我最初想到的,但問題是樹可能很大!所以我必須寫一個Integer,就是那4個字節! 而如果我把它寫成一個字符串,那麼我使用一個字節爲每個整數,我把它放在那裏。對於試圖通過一次保存2或3位來壓縮內容的程序來說效率不高。 – angryInsomniac 2011-12-27 13:15:24
你認爲樹有多大?幾千字節? – Giorgio 2011-12-27 13:28:11
@angryInsomniac在合適的條件下,它甚至比'size(tree)+ size(compressed_data)'可能會比'size(original_data)'更大。如果你的字母很小並且數據很大(不是均勻分佈的),顯然這只是有意義的。 如果您對通信位數最少(當考慮字典時),有一個很大的理論計算機科學(開放)研究領域稱爲通信複雜性:) – user1071136 2011-12-27 14:06:38