Java哈夫曼编码译码器.doc
《Java哈夫曼编码译码器.doc》由会员分享,可在线阅读,更多相关《Java哈夫曼编码译码器.doc(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-作者xxxx-日期xxxxJava哈夫曼编码译码器【精品文档】 课程设计(论文)任务书 学院 专业 班课程名称 面向对象技术课程设计 题 目 哈夫曼编码/译码器 任务起止日期: 2010 年12 月 06日 2010 年12月 24 日 学 生 姓 名 学 号 指 导 教 师 教研室主任 年 月 日审查课程设计(论文)任务一、课题内容1问题描述利用哈夫曼编码进行数据通信可以大大提高信道利用率,缩短数据传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(还原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。
2、2基本要求一个完整的编/译码系统应具有以下功能:(1)建立哈夫曼树(Create)。从键盘输入字符集中的所有字符及其对应的频率值,建立哈夫曼树。(2)输出编码表(Table)。利用已建好的哈夫曼树,列出字符集中的所有字符及其对应的哈夫曼编码。(3)编码(Coding)。利用已建好的哈夫曼树,对从键盘输入的正文串进行编码,并在屏幕上显示结果。(4)译码(Decoding)。利用已建好的哈夫曼树,对从键盘输入的0、1代码串进行译码,并在屏幕上显示结果。3 测试数据(1)利用下表中给出的字母/频率数据调试程序。字母CDEFKLUZ频率324212024742372(2)用下表中给出的字符集和频度的实
3、际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“I love you Loo”字母频率字母频率A77O67B17P20C32Q5D42R59E120S67F24T85G17U37H50V12I76W22J4X4K7Y22L42Z2M24(空格)186N674通过对本课题的实践以期使学生程序编写能力得到较大提高。二、课题要求1. 使用Java完成本课题的程序设计,至少定义2个类;2. 程序中必须有界面设计和事件处理,必要时要做容错处理(异常处理);3. 程序必须得到合理结果,并对所得结果做必要的分析;4. 设计论文正文篇幅不少于3000字;5. 提交的所有材料必须符合长沙理工大学课程设计管
4、理规定(长理工大教20058号)的要求。三、课题完成后应提交的材料1. 课程设计(论文)按以下排列顺序装订成册(1) 封面(统一到学校教材中心领取,并详细填写) (2) 任务书(3) 中文摘要(4) 英文摘要 (5) 目录 (6) 正文 (7) 参考文献(8) 附件(源程序打印件) 资料袋统一到学校教材中心领取,并详细填写四、主要参考文献(由指导教师选定)注:1. 此任务书由指导教师填写。如不够填写,可另加页。2. 此任务书最迟必须在课程设计(论文)开始前下达给学生。学生送交全部材料日期 学生(签名) 指导教师验收(签名) 摘要Huffman编码是一种可变长编码方式,是二叉树的一种特殊转化形式
5、。它的原理是:将使用次数多的代码转换成长度较短的编码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。本文根据Huffman编码原理,在详细设计中,根据权值和最小的根本原则,我们输入要编码的字符集及其它的权值,再根据在概要设计中提到的节点Node类,算法SuanFa类以及主类JieMian类,建立哈夫曼树,并进行编码,最后输出哈夫曼编码。在完成Huffman编码后,我们利用其构建的哈夫曼编码树来进行译码。与编码过程不同,译码过程中,我们将用户输入的二进制代码串依次与字符集中的每个字符的编码进行比较,译出一个字符后,循环比较下一个字符的编码,直到所有二进制码全部译出为止。在编码和译码
6、的过程中,我们遇到很多问题,诸如算法、语法问题,但我们都通过不断的分析,和调试将这些问题一一解决,最终建立了一个完整的编/译码系统。关键词:Huffman编码树;最优二叉树;编码;译码AbstractHuffman coding is a encoding of variable length and a special transformation form of the binary tree. Its principle is: the code that be used more often will be changed into the code of shorter length
7、s, while the codes that be used less often can be transformed into the code of longer lengths and the unique solution of coding will be kept. According to the theory of Huffman coding, firstly we enter the character set which will be used to coding and their weights. Secondly, according to the funda
8、nmental principle that the sum of the weights needs to be the smallest , the program designs Huffman tree in accordance with these class which are initialized in the outline such as class Node,class SuanFa,and class JieMian. At last, the computer will output Huffman coding on user interface.And then
9、, we use the Huffman coding tree to decoding after the completion of Huffman coding tree.Here are difference with encoding process. We will compare the binary string that the user input with the character set one by one during the processs of decoding .And then, the cycle of the next character encod
10、ing will continue which is based on the completion of translation of a character. It will be finished until all the binary code is translated.During the process of coding and decoding, we encounter many problems, such as the problem on arithmetic and grammar. However, we try our best to solve these
11、problems through constant analysis and debugging.Eventually, we achieve the goal that establish a complete system on coding and decoding successfully.Key Words:Huffman coding tree;optimal binary tree;coding;decoding【精品文档】目录一、需求分析1二、概要设计2222三、详细设计66四、设计和调试分析15五、用户手册16六、测试结果20七、参考文献八、附录哈夫曼编码/译码器一需求分析1
12、.举例说明,先前快速远距离通信的主要手段是电报,即将需要传送的文字转换成由二进制的字符组成的字符串。在传送电文时,希望总长尽可能的短,如果对每个字符设计长度不等的编码,且让电文中出现此处较多的字符尽可能短的编码,以减少数据传输经费。哈夫曼树就是根据此原理设计出来的一种存储结构。2.本程序要做的哈夫曼编码译码器的主要功能是:运用二叉树来设计二进制的前缀编码。根据用户给出字符集中的所有字符及其出现的频率(即为此字符的权值),建立哈夫曼编码树,然后利用哈夫曼编码树将输入的字符串编码成相应的哈夫曼编码;反之,根据哈夫曼译码原理将用户所输入的0/1代码串编译成相应的字符串。由此,让用户方便地实现电文词句
13、的Huffman编码及译码。3.构成哈夫曼编码树的合法字符:字母(忽略大小写)和空格。4.演示程序以人机对话方式执行。5演示程序中,当用户输入错误时,系统会输出相应的提示。6程序执行的命令包括:(1)建树并输出编码表(2)编码(3) 译码(4) 清空二概要设计开发平台:Microsoft Windows7旗舰版JDK(1)建树并输出编码表:根据用户在“字符”文本域输入的字符集和在“权值”文本域输入的权值建立哈夫曼编码树,并在“结果”文本域中输出哈夫曼编码树中的每个字符及其对应的Huffman编码;(2)编码:利用建立好的哈夫曼编码树对用户在“词句”文本域中输入的电文字符进行编码,在“结果”中显
14、示编码结果;(3)译码:利用建立好的哈夫曼编码树对用户在“编码”文本域中输入的0/1代码串进行译码,在“结果”中显示译码结果;(4)清空:清空已建立的哈夫曼编码树,重新操作。本程序定义了三个类,分别实现树的节点操作,编码译码的算法实现,以及界面和事件处理,主要属性及算法如下:(1)类名:Node功能:作为节点类,实现节点的基本操作主要属性private int weight;/节点权值private char name;/节点字符名称private int left;/左孩子节点位置private int right;/右孩子节点位置private int parent;/父节点位置priva
15、te String code;/节点对应的编码主要方法public Node() /构造方法初始化public Node(int weight,char name) /带参数的构造方法,可初始化权值和字符名称public int getWeight() /获取节点权值public void setWeight(int weight) /设置节点权值public char getName()/获取节点字符名称public void setName(char name)/设置节点字符名称public int getLeft()/获得节点左孩子的位置值public void setLeft(int
16、left)/设置节点左孩子的位置值public int getRight()/获得节点右孩子的位置值public void setRight(int right)/设置右孩子的位置值public int getParent()/获得父节点的位置值public void setParent(int parent) /设置父节点的位置值public String getCode()/获得节点的编码public void setCode(String code)/设置节点的编码public boolean isLeaf() /判断节点是否为叶子节点(2)类名:SuanFa功能:算法类,实现哈夫曼编码
17、树的构造,编码和译码等操作主要属性private List nodes;/定义Node类型的动态数组nodes存放Huffman编码树主要方法public List getNodes()public void setNodes(List nodes)public SuanFa(List nodes) /构造方法public int getRoot() /获取已经构造好的huffman编码树的根节点public int selectMinNode() /选择权值最小节点,保存其下标,并统计剩余的没有进树的节点数public void JianShu() /建立哈夫曼树public String
18、getCode(int i) /获得节点的单个编码public void bianMa1() /从叶子到根对字符集中各个字符进行编码public String bianMa2(String names) /编码方法, 对输入的词句字符进行编码public String jieMa(String codes) /译码方法(3)类名:JieMian(主类)功能:设置界面及其相关操作和监听者设置主要属性private static final long serialVersionUID = 1L;private TextArea textName;/字符文本域private TextArea tex
19、tWeight; /权值文本域private TextArea textResult; /结果文本域private SuanFa suanFa;/算法类对象suanFaprivate TextArea textArea;标签及按钮:private Label label;/字符、词句标签private Label label_1;/权值、编码标签private Button button;/建树按钮private Button button_4;/清空按钮private Button button_2;/编码按钮private Button button_3;/译码按钮主要方法public v
20、oid init()/界面操作及监听者设置三 详细设计(1)节点类Node类的设计及功能描述:A属性设计:构造哈夫曼编码树需要考虑节点结构问题,编码和译码过程中,对二叉树的建立以及查找操作要求Node类中的节点结构包含六个属性,分别用于存放节点权值,节点字符,左孩子节点的位置下标,右孩子节点的位置下标,父节点的位置下标以及该节点对应的编码。B方法设计:节点类的方法主要用于对节点属性值的操作。在主类中通过调用节点对象的方法,完成对节点对象属性值的操作。主要操作分别有构造方法对属性值初始化,获取各个属性值操作,改变各属性值操作。由于查找二叉树的过程中需要判断是否到达叶子节点,所以必不可少的还有判断
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 哈夫曼 编码 译码器
限制150内