huffman算法c语言实验报告,huffman二叉树实验报告--数据结构(c语言).doc
江海強 PAGE 7
數 據 結 構 作 業 報 告
——Huffman二叉樹實驗報告
姓名:江海強
班級:070921班
學號上機時間:2010-
報告時間:2010-10-26
摘要
1.實驗目的
本實驗是為了讓我們深入了解Huffman二叉樹,學會使用Huffman編碼對數據進行無損壓縮,最終能夠靈活運用Huffman二叉樹。
2.實驗方法
利用遞歸的方法創建Huffman二叉樹,且利用了二叉樹的性質對字符串進行編碼和譯碼。
3.實驗結果
此程序是在C++環境中運行的。由后面的運行出來的結果且由驗證解碼的結果可以得知,此程序是正確無誤的。由此我們還可以看出利用Huffman編碼可以大大節省空間復雜度。
內容
一.問題重述
設計一個程序,首先讀入一個ASCII文件,統計文檔中字符出現的頻度,并根據頻度對每個字符生成Huffman編碼。需要打印出原始數據、每個字符對應的Huffman編碼以及原文檔的Huffman編碼。還要按照Huffman樹對編碼后的數據進行解碼且驗證解碼的結果。最后輸出一些統計數據,如總編碼長度、編碼效率等。
二.算法描述
本程序除了運用一些條件語句,判斷語句之外,主要是運用了二叉樹的性質來設計程序的。
本程序利用二叉樹來設計二進制的前綴編碼。約定了左分支表示字符'0',右分支表示字符'1',則可以從根結點到葉子結點的路徑上分支字符組成的字符串作為該葉子結點字符的編碼。
假設每種字符在輸入的字符串中出現的次數為,其編碼長度為,字符串中只有n種字符,則字符串總長為(即二叉樹上帶權路徑的長度):
WPL =
當輸入字符串jiang_hai_qiang時,
即可建立Huffman樹,如下面兩表所示,
根據此3表可以建立如右圖①的Huffman
3
二叉樹的結構圖
32221例如n的頻率為2,q的頻率為1,
3
2
2
2
1
這兩個結點的共同parent結點的頻率為圖①1
圖①
1
1
2+1=3。
編碼表:
編碼表:
編碼頻率:
編碼長度:
編碼表:
編碼頻率:
編碼長度:
j:1110
1
4
g:100
2
3
i:110
3
3
_:101
2
3
a:00
3
2
h:1111
1
4
n:010
2
3
q:011
1
3
表1
num
num
weight
parent
lchild
rchild
1
1
9
0
0
2
3
12
0
0
3
3
13
0
0
4
2
10
0
0
5
2
11
0
0
6
2
11
0
0
7
1
9
0
0
8
1
10
0
0
9
2
12
1
7
10
3
13
4
8
11
4
14
5
6
12
5
14
2
9
13
6
15
3
10
14
9
15
11
12
15
15
0
13
14
表2
由此可以算出WPL=2×3+3×(3+2+2+2+1)+4×(1+1)=42。
開始
開始
輸入一串字符數組,用m來記錄字符串個數,n來記錄
輸入一串字符數組,用m來記錄字符串個數,n來記錄字符串中不同字符的個數。
用for語句把不同字符賦值給數組b[]
用for語句把不同字符賦值給數組b[]。
結束
結束
調用函數Calculate(),
調用函數Calculate(),
計算不同字符的個數,
并把結果賦值給A[]。
最后調用
最后調用HuffmanDecoding(),對輸入的二進制編碼進行解碼。
調用HuffmanCoding(),
調用HuffmanCoding(),構造Huffman二叉樹HT,并求出Huffman編碼HC。首先對前n個結點初始化,也對n+1到2n-1個結點初始化。調用Select()構建Huffman二叉樹;還讀出ASCII1文件,并且求出了每個字符的Huffman編碼。
調用SC_HuffmanCoding(),輸出Huffman編碼
調用
調用函數ASCII2(),讀出ASCII2文件
三.變量說明
全局變量A[]是用來存儲字符的權值的。
weight代表的是該結點的權值。
程序中有m=2*n-1,是為Huffman二叉樹開辟2n-1個結點。
在主函數中,m是用來記錄輸入字符串的個數的;n是用來記錄有多少種字符的;a[]則是完整地記錄輸入的字符串;而b[]是記錄輸入字符串中的不同字符。
HT表示Huffman樹;而HC表示Huffman編碼。
其中還要說明的一些C++語句:如cout<>a代表的輸入語句;outfile<
四.函數與思路說明
此程序有1個主函數和7個子函數。其中子函數分別為Calculate(),Select(),ASCII1(),ASC
總結
以上是生活随笔為你收集整理的huffman算法c语言实验报告,huffman二叉树实验报告--数据结构(c语言).doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3迭代器是什么,python
- 下一篇: pmw调光c语言程序,51单片机led灯