数据结构实验报告--Huffman算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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下来的代码好好的多看几遍,不懂得地方据多问问,这也是一种学习方法。

相关文档
最新文档