1樓:望山
你可以去Github看看cyan4973的FiniteStateEntropy的原始碼,它裡面除了FSE演算法,還有乙個HUFF0,是優秀的huffman編碼實現。這位作者是當今世界上最頂級的無失真壓縮大牛之一,LZ4的作者。
2樓:悽臨雨
壓縮時不在是文字,甚至不是以位元組為單位,而是以位為單位來儲存資料。
例如4個位元組=32個位,壓縮為13個位; 隨後 6個位元組壓縮成23個位。那麼一共要有13+23=36個位,儲存為 1 個位元組+2 個位元組≈5個位元組。
雖然說作業系統和語言提供的寫檔案函式都是以位元組為單位,你可以把不同資料的位混插起來存在同乙個位元組裡。
以十進位制簡單考慮,03(值域為兩位十進位制0~99) 和 004(值域為三位十進位制0~999),組合儲存就是03×1000+004 = 3004。
那麼二進位制的話,11011(值域為00000~11111),001001(值域為000000~111111)組合儲存就是
00000110 11;001001,用兩個位元組儲存.
實際上壓縮通常要先在壓縮包裡先儲存乙個哈夫曼樹,它本身比較佔體積,隨後再儲存轉換後的編碼(每個編碼並不是8位的倍數)。然而,應當是有辦法把ASC英文數字字元文字檔案壓縮為純文字檔案,需要盡量找到高頻詞彙。
3樓:GarfieldKwong
你看完了哈夫曼樹還不知道怎樣壓縮的話,建議你回去重新再看。看完了沒懂壓縮原理這只是看完,而沒有學到。
沒記錯的話,以文字為例,哈夫曼樹壓縮的原理是將高頻出現的字元用較短的編碼。最高頻的字元就壓縮編碼成 1bit. 例如最高頻的是字母e,壓縮後就用二進位制1表示,而次高頻的,例如g,就用而進製01表示。
說到底就是把原本恆長度的編碼變成變長編碼,所以就有了壓縮的效果。
另外,你的疑問很合理,壓縮後是不能存成文字檔案,只能存二進位制檔案,open 是要傳mode=b