當前位置:首頁 » 電腦資訊 » 為什麼要哈夫曼樹實現文件壓縮

為什麼要哈夫曼樹實現文件壓縮

發布時間: 2025-09-07 05:07:24

『壹』 壓縮演算法原理

哈夫曼
哈夫曼編碼是無損壓縮當中最好的方法。它使用預先二進制描述來替換每個符號,長度由特殊符號出現的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。

哈夫曼演算法在改變任何符號二進制編碼引起少量密集表現方面是最佳的。然而,它並不處理符號的順序和重復或序號的序列。

2.1 原理
我不打算探究哈夫曼編碼的所有實際的細節,但基本的原理是為每個符號找到新的二進製表示,從而通常符號使用很少的位,不常見的符號使用較多的位。

簡短的說,這個問題的解決方案是為了查找每個符號的通用程度,我們建立一個未壓縮數據的柱狀圖;通過遞歸拆分這個柱狀圖為兩部分來創建一個二叉樹,每個遞歸的一半應該和另一半具有同樣的權(權是 ∑ N K =1 符號數 k , N 是分之中符號的數量,符號數 k 是符號 k出現的次數 )

這棵樹有兩個目的:

1. 編碼器使用這棵樹來找到每個符號最優的表示方法

2. 解碼器使用這棵樹唯一的標識在壓縮流中每個編碼的開始和結束,其通過在讀壓縮數據位的時候自頂向底的遍歷樹,選擇基於數據流中的每個獨立位的分支,一旦一個到達葉子節點,解碼器知道一個完整的編碼已經讀出來了。

壓縮後的數據流是 24 位(三個位元組),原來是 80 位( 10 個位元組)。當然,我應該存儲哈夫曼樹,這樣解碼器就能夠解碼出對應的壓縮流了,這就使得該例子中的真正數據流比輸入的流數據量大。這是相對較短的數據上的副作用。對於大數據量來說,上面的哈夫曼樹就不佔太多比例了。

解碼的時候,從上到下遍歷樹,為壓縮的流選擇從左 / 右分支,每次碰到一個葉子節點的時候,就可以將對應的位元組寫到解壓輸出流中,然後再從根開始遍歷。

2.2 實現
哈夫曼編碼器可以在基本壓縮庫中找到,其是非常直接的實現。

這個實現的基本缺陷是:

1. 慢位流實現

2. 相當慢的解碼(比編碼慢)

3. 最大的樹深度是 32 (編碼器在任何超過 32 位大小的時候退出)。如果我不是搞錯的話,這是不可能的,除非輸出的數據大於 2 32位元組。

另一方面,這個實現有幾個優點:

1. 哈夫曼樹以一個緊密的形式每個符號要求 12 位(對於 8 位的符號)的方式存儲,這意味著最大的頭為 384 。

2. 編碼相當容易理解

哈夫曼編碼在數據有噪音的情況(不是有規律的,例如 RLE )下非常好,這中情況下大多數基於字典方式的編碼器都有問題。

熱點內容
男人結完婚後為什麼不理睬老婆 發布:2025-09-07 09:09:39 瀏覽:626
為什麼電腦老是終止程序 發布:2025-09-07 08:56:48 瀏覽:481
嗯東西為什麼會變酸 發布:2025-09-07 08:40:30 瀏覽:107
蜻蜓為什麼有黃顏色和綠顏色的 發布:2025-09-07 08:39:49 瀏覽:269
為什麼cad打開圖紙找不到圖形文件 發布:2025-09-07 08:39:06 瀏覽:276
十歲的女孩子還會尿床是為什麼 發布:2025-09-07 08:39:06 瀏覽:214
78歲老媽為什麼吃點東西就吐 發布:2025-09-07 08:39:06 瀏覽:224
添加你的微信為什麼要驗證碼 發布:2025-09-07 08:31:21 瀏覽:46
人眼睛為什麼會出現息肉 發布:2025-09-07 08:27:03 瀏覽:679
唐舞桐為什麼要粉藍色眼睛 發布:2025-09-07 08:23:31 瀏覽:754