数据结构实验报告--Huffman算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1 页/ 共2页
江 西 理 工 大 学
数据结构
实验报告
实验名称
Huffman 算法
日期 2014-11-24 专业班级 计算机(中加)131班 地点 信息学院621 实验人 王鹏伟
学号
1520133713
同组人
单独完成
一、 实验目的
1、 按照老师要求实现Huffman 算法;
2、 学会Huffman 算法的算法规则。 二、 实验要求
1、 任意给定一组字母以及它们的频率;
2、 运用Huffman 算法输出相应字母的编码结果。 三、实验内容
1、利用书本12.1.2 Huffman ’s algorithm 以及上课老师PPT 所讲的知识解决问题,并输出结果。
四、实验过程和结果
部分实验代码:
* 建立最小生成树 将两个节点组合而成的节点添置列表末尾, * 新一轮的排序起始位置向 后移两位,自由节点数目减少1 * @param Tree
* @param start 排序列表中剩余自由节点的起始位置
* @param freeNodeNum 列表中的自由节点数量
public void buildTree(List Tree, int start, int freeNodeNum) { if (Tree != null && freeNodeNum >= 2) { QuickSort(Tree, start, Tree.size() - 1);
// 取权值最小的两个节点组合成为新节点,根据排序规则,最小的两个数位于列表的前两位 TreeNode newNode = new TreeNode( ((TreeNode) Tree.get(start)).getNodeValue()
+ ((TreeNode) Tree.get(start + 1)).getNodeValue(),
null );
newNode.setLeftNode((TreeNode) Tree.get(start)); newNode.setRightNode((TreeNode) Tree.get(start + 1)); Tree.add(newNode); // 将两个节点组合而成的节点添置列表末尾 freeNodeNum--; // 自由节点数减一
buildTree(Tree, start + 2, freeNodeNum);
}}
// 快速排序方法实现
public void QuickSort(List Tree, int p, int r) { int q = 0; if (p < r) { q = partion(Tree, p, r); QuickSort(Tree, p, q - 1);
QuickSort(Tree, q + 1, r);}
}
public int partion(List Tree, int p, int r) { int x = ((TreeNode) Tree.get(r)).getNodeValue(); int i = p - 1;
//System.out.println(""+i);
for (int j = p; j <= r - 1; j++) { // 换个方向就是从大到小
if (((TreeNode) Tree.get(j)).getNodeValue() <= x) { i++;
Object temp = Tree.get(i); Tree.set(i, Tree.get(j));
Tree.set(j, temp);}
}
Object temp = Tree.get(i + 1); Tree.set(i + 1, Tree.get(r)); Tree.set(r, temp);
return i + 1;
}
过程细节请调试源代码!
实验结果:
数据库系统实验报告第2页/ 共2页
五、实验总结
通过对Huffman算法的实现,我初步认识了什么是Huffman算法,知道了如何用java 实
现该算法。哈夫曼算法的关键在于构建哈夫曼树,构建哈夫曼树就是利用待编码字符出现的频
率,先从小到大排列,再每次把最小的两个相结合。
虽然这个程序不是我自己写的,它是我从百度是搜索的,但是,通过我一点一点的看代码,
分析代码,运行代码,我也算是搞懂了其中的思想。正如老师所说,当你不会的时候,就将在
网上down下来的代码好好的多看几遍,不懂得地方据多问问,这也是一种学习方法。