20192328牛梓萌 2019-2020-1 《資料結構與面向物件程式設計》哈夫曼編碼實踐
阿新 • • 發佈:2020-12-19
20192328牛梓萌 2019-2020-1 《資料結構與面向物件程式設計》哈夫曼編碼實踐
課程:《程式設計與資料結構》
班級: 1923
姓名: 牛梓萌
學號:20192328
實驗教師:王志強
實驗日期:2019年12月19日
必修/選修: 必修
1.實驗內容
設有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。
給定一個包含26個英文字母的檔案,統計每個字元出現的概率,根據計算的概率構造一顆哈夫曼樹。
並完成對英文檔案的編碼和解碼。
要求:
(1)準備一個包含26個英文字母的英文檔案(可以不包含標點符號等),統計各個字元的概率
(2)構造哈夫曼樹
(3)對英文檔案進行編碼,輸出一個編碼後的檔案
(4)對編碼檔案進行解碼,輸出一個解碼後的檔案
(5)撰寫部落格記錄實驗的設計和實現過程,並將原始碼傳到碼雲
(6)把實驗結果截圖上傳到雲班課
2. 實驗過程及結果
構造哈夫曼樹
將老師釋出到雲班課的哈夫曼樹程式碼稍作修改即可
對於測試方面
·讀取和寫檔案的操作
(準備三個檔案,一個用來讀入檔案中的內容,一個用來編碼,一個用來解碼)
File file = new File("/Users/haha/Desktop/Huffman.txt");
if(!file.exists()){
file.createNewFile();
}
File file2 = new File("/Users/haha/Desktop/enHuffman.txt"); Writer writer = new FileWriter(file2); writer.write(result1); writer.close();
File file3 = new File("/Users/haha/Desktop/deHuffman.txt");
Writer writer1 = new FileWriter(file3);
writer1.write(result2);
writer.close();
·對於文字讀寫
File file = new File("/Users/haha/Desktop/Huffman.txt"); if(!file.exists()){ file.createNewFile(); } Reader reader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(reader); String temp = bufferedReader.readLine();
·對於頻率的計算
for (int j = 97; j <= 122; j++) {
int number = 0;//給字母計數
for (int m = 0; m < characters.length; m++) {
if (characters[m] == (char) j) {
number++;
}
frequency[j - 97] = (float) number / characters.length;
}
}
·對於編碼
String result1 = "";
List<HuffNode> temp1 = breadthFirstTraversal(root);
for (int i = 0; i < characters.length; i++) {
for (int j = 0; j < temp1.size(); j++) {
if (characters[i] == temp1.get(j).getData()) {
result1 += temp1.get(j).getCodenumber();
}
}
}
·對於解碼
String result2 = "";
String current="";
while(secretText.size()>0) {
current = current + "" + secretText.get(0);
secretText.remove(0);
for (int p = 0; p < newlist1.size(); p++) {
if (current.equals(newlist1.get(p))) {
result2 = result2 + "" + newlist.get(p);
current="";
}
·實驗結果
其他(感悟、思考等)
對於哈夫曼樹的編寫首先要理解哈夫曼樹的形成過程,參考老師的程式碼給了很大的幫助,在此基礎上再增加對於檔案的讀取等操作。
參考資料
《Java程式設計與資料結構教程(第二版)》
《Java程式設計與資料結構教程(第二版)》學習指導