說到文件壓縮大家很容易想到的就是 rar,zip 等我們常見的壓縮格式。然而,還有一種就是大家在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)最常見到的哈夫曼樹的數(shù)據(jù)結(jié)構(gòu),以前還不知道他又什么用,其實他最大的用途就是用來做壓縮,也是一些 rar,zip 壓縮的祖先,稱為哈弗曼壓縮(什么你不知道誰是哈弗曼,也不知道哈弗曼壓縮,不急等下介紹)。
隨著網(wǎng)絡(luò)與多媒體技術(shù)的興起,人們需要存儲和傳輸?shù)臄?shù)據(jù)越來越多,數(shù)據(jù)量越來越大,以前帶寬有限的傳輸網(wǎng)絡(luò)和容量有限的存儲介質(zhì)難以滿足用戶的需求。
特別是聲音、圖像和視頻等媒體在人們的日常生活和工作中的地位日益突出,這個問題越發(fā)顯得嚴(yán)重和迫切。如今,數(shù)據(jù)壓縮技術(shù)早已是多媒體領(lǐng)域中的關(guān)鍵技術(shù)之一。
一、什么是哈弗曼壓縮
Huffman( 哈夫曼 ) 算法在上世紀(jì)五十年代初提出來了,它是一種無損壓縮方法,在壓縮過程中不會丟失信息熵,而且可以證明Huffman 算法在無損壓縮算法中是最優(yōu)的。 Huffman 原理簡單,實現(xiàn)起來也不困難,在現(xiàn)在的主流壓縮軟件得到了廣泛的應(yīng)用。對應(yīng)用程序、重要資料等絕對不允許信息丟失的壓縮場合, Huffman 算法是非常好的選擇。
二、怎么實現(xiàn)哈弗曼壓縮
哈夫曼壓縮是個無損的壓縮算法,一般用來壓縮文本和程序文件。哈夫曼壓縮屬于可變代碼長度算法一族。意思是個體符號(例如,文本文件中的字符)用一個特定長度的位序列替代。因此,在文件中出現(xiàn)頻率高的符號,使用短的位序列,而那些很少出現(xiàn)的符號,則用較長的位序列。
故我們得了解幾個概念:
1 、二叉樹 : 在計算機(jī)科學(xué)中,二叉樹是每個結(jié)點最多有兩個子樹的有序樹。通常子樹的根被稱作 “ 左子樹 ” ( left subtree )和 “右子樹 ” ( right subtree )。

2 、哈夫曼編碼 (Huffman Coding) :是一種編碼方式,哈夫曼編碼是可變字長編碼 (VLC) 的一種。 uffman 于 1952 年提出一種編碼方法,該方法完全依據(jù)字符出現(xiàn)概率來構(gòu)造異字頭的平均長 度最短的碼字,有時稱之為最佳編碼,一般就叫作 Huffman 編碼。