哈夫曼树编码课程设计实验报告(2)

2019-04-15 21:22

武汉工程大学计算机科学与工程学院 综合设计报告

第一章 课题背景

1.1 设计背景目的及意义

1.1.1设计背景

在当今信息时代,信息技术已经成为当代知识经济的核心技术。我们时刻都在和数据打交道。但是这些海量的数据是怎么保存在计算机里面的呢?在客户需要数据时它又是怎么发送给用户的呢?这就涉及到哈弗曼编码的技术了。哈弗曼编码在这种背景下,适应时代的要求诞生了。作为无损压缩算法,哈弗曼编码用途非常广泛,在各个领域都有应用。

1.1.2设计目的

这次可课程设计主要是回顾我们上学期所学习的数据结构这门课程,重新温习一下这些经典算法,加深对它们的影响,以至于今后更好的应用这些经典算法,还有就是培养我们的程序设计算法,平时都是在教室里上课,很少有像这样集体性的编程,通过这次课程设计,不仅能加强我们的编程能力,更能加强我们的程序设计能力。

1.1.3设计意义

这次课程设计很有意义。哈夫曼编码是个很有用、很有效的编码方式,是一个伟大的发明。通过这次课程设计,让我们亲身体会到了课本上知识的作用和重要性,从而达到了学以致用的目的,让我们对今后的学习有了更清楚的方向和更加强烈的兴趣。

- - 4

武汉工程大学计算机科学与工程学院 综合设计报告

1.2理论依据和工作原理

1.2.1 理论依据

哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。

1.2.2工作原理

哈夫曼编码依据字符出现的频率来构造一棵二叉树,然后根据这棵树对字符进行编码,这种编码机制使用最短编码来表示字符串,大大节省了字符传递时的长度,在网络通信中,特别是网络流量方面作用特别明显,它大大节省了网络资源,提高了网络运行速度,方便了人们的生活。

- - 5

武汉工程大学计算机科学与工程学院 综合设计报告

第二章 设计简介及设计方案论述

2.1设计简介

这次课程设计是哈夫曼编码,要求实现可视化编程。哈夫曼树是一种很有用的数据结构,在数据传输方面更显方便,它能用较少的编码代替复杂的字符。我们这次课程设计就是要实现对一段报文进行哈弗曼编码,然后随便输入一段编码,根据前面的编码进行解码。

2.2设计方案的论述

看到这个课程设计,第一感觉就是不怎么难。因为哈弗满编码主要代码课本上都有,我们只需要将代码添加到窗体类中就可以。首先,我设计了3个类,分别是HafumanNode类,HafumanT类和Form1主窗体类。HafumanNode类是哈弗曼节点类,这个类中有public char data; public int pinDu; public double weight; public int parent;public int lchild; public int rchild;这六个字段和构造函数public HafumanNode(char c,double w)。还有就是HafumanT类,这个类中主要实现哈夫曼树的构造和编码以及解码。Form1类是主窗体类,在这里就不详细介绍了,在后面详细设计里面会有详细分析。

- - 6

武汉工程大学计算机科学与工程学院 综合设计报告

第三章 详细设计

3.1 总体分析

这次课程设计,我设计了3个类,分别是哈夫曼节点类(HafumanNode)、哈夫曼树(HafumanT)、主窗体类(Form1)。这些类各有各的功能和作用,分别实现不同的功能,这样设计使代码更显调理性,而不至于把所有的功能都写在一个类里面,钠那样显得没有调理,很乱,可读性和可维护性不强。

3.2详细分析

3.2.1 HafumanNode类

这个类的主要代码如下:

class HafumanNode {

public char data; public int pinDu; public double weight; public int parent; public int lchild; public int rchild;

public HafumanNode(char c,double w) {

data = c; weight = w; pinDu = 0; parent = -1; lchild = -1; rchild = -1; }

- - 7

武汉工程大学计算机科学与工程学院 综合设计报告

}

这个类比较简单,代码非常少,这个类相当于课本上C语言中的结构体,只是在C#中我用类来实现。

3.3.2 HafumanT类

这个类有点复杂,因为它要实现很多功能。这里就不详细列出它的所有代码了,而是把主要代码展示如下:

public void CreateHafumanTree() {

int lchild, rchild; double min1, min2; int number = listNode.Count;

for (int i = number; i < number * 2 - 1; i++) {

lchild = -1; rchild = -1; min1 = 3000; min2 = 3000; for (int j = 0; j < i; j++) if(listNode[j].parent==-1) if (listNode[j].weight < min1) {

min2 = min1; rchild = lchild;

min1 = listNode[j].weight; lchild = j; }

else if (listNode[j].weight < min2) {

- - 8


哈夫曼树编码课程设计实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中化学《化学反应原理》全册教案 新人教版选修4

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: