大資料量的影象資訊會給儲存器的儲存容量,通訊幹線通道的頻寬,以及計算機的處理速度增加極大的壓力。單純靠增加儲存器容量,提高通道頻寬以及計算機的處理速度等方法來解決這個問題是不現實的,這時就要考慮壓縮。
壓縮的關鍵在於編碼,如果在對資料進行編碼時,對於出現頻率高的資料,編碼器輸出較短的編碼;而對於少見的資料則用較長的編碼表示,就能夠實現壓縮。
利用哈夫曼演算法進行壓縮的一般流程為:
1.讀檔案,統計每個byte的出現次數
2.按規則生成哈夫曼樹(按出現次數生成最優二叉樹)
3.生成碼表(位元組,訪問路徑)
4.對檔案重新編碼,對應01串(01串為從哈夫曼樹的根節點訪問到此位元組對應的子節點的「路徑」,如:左子節點為0,右子節點為1)
5.將字串的01轉換成bit的01 寫入檔案
6.每8個01轉成乙個byte,向檔案中寫入這個byte。不足8位時全補0或1,並用乙個byte記錄補得0或1的個數。檔案中最後乙個位元組為-1
7.將碼表寫入正在壓縮的檔案中。
而解壓時,只需:
1.從檔案中讀取出碼表
2.按碼表讀出每個byte
3.將byte轉換成bit輸出
利用哈夫曼演算法實現的壓縮是一種常見的無失真壓縮,在網路通訊、檔案傳輸時有很大的用處……
哈夫曼樹的應用 哈夫曼編碼
include include include 樹結點定義 typedef struct htnode,huffmantree static char n 100 用於儲存正文 哈弗曼編碼,char型二級指標 typedef char huffmancode 封裝最小權結點和次小權結點 typede...
哈夫曼樹和哈夫曼演算法
1 最優二叉樹 具有最小加權路徑長度的二叉樹 2 哈夫曼演算法 由哈夫曼給出,用於構造最優二叉樹的演算法 3 哈夫曼樹 用哈夫曼演算法構造的最優二叉樹 4 哈夫曼演算法 很熟,所以就略了 5 函式createhfmtree的步驟 首先,構造n棵哈夫曼樹的物件,每棵樹只有乙個權值為w i 的根節點,且...
哈夫曼演算法
include include include include include 宣告兩種鍊錶結構 start struct node a typedef struct node a node,list list head null struct nodeb typedef struct nodeb ...