哈夫曼编码译码课程设计报告

  • 格式:doc
  • 大小:875.37 KB
  • 文档页数:21

下载文档原格式

  / 21
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》课程设计

——赫夫曼编码/译码器设计

指导教师:李文书、周维达

班级:10电信实验班

学号:Q********

姓名:***

一、实验目的

1、提高分析问题、解决问题的能力,进一步巩固数据结构各种原理与方法。

2、熟悉掌握一门计算机语言,可以进行数据算法设计。

二、实验原理

哈夫曼编\译码器的主要功能是先建立哈夫曼树,然后利用建好的哈夫曼树生成哈夫曼编码后进行译码。

在数据通信中,经常需要将传送的文字转换成由二进制字符0、1组成的二进制串,称之为编码。构造一棵哈夫曼树,规定哈夫曼树中的左分之代表0,右分支代表1,则从根节点到每个叶子节点所经过的路径分支组成的0和1的序列便为该节点对应字符的编码,称之为哈夫曼编码。

最简单的二进制编码方式是等长编码。若采用不等长编码,让出现频率高的字符具有较短的编码,让出现频率低的字符具有较长的编码,这样可能缩短传送电文的总长度。哈夫曼树课用于构造使电文的编码总长最短的编码方案。主要流程图如下:

三、实验步骤

1:写好流程图,设计实验方案。

2:初始化,从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件HuofumanTree中。

3:编码。利用已建好的哈夫曼树,对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。

4:译码。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件Textfile中。

5:印代码文件(Print).将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrint中。

6:印哈夫曼树(Treeprinting).将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint 中。

具体函数如下:

1:Initialization() 初始化

2:Encoding() 编码

3:Decoding() 译码

4:Print_file() 打印代码文件

5:search(k,j,p) 搜索二叉树

6:Print_tree() 打印二叉树

7:menu() 主菜单

9:main() 主函数

四、实验结果与分析

(1)大致个人测试案例:

主界面:

初始化:

Huofuman.txt初始化存入文件结果如下:编码结果如下:

codefile.txt编码存入文件如下:

译码结果如下:

textfile.txt译码存入文件如下:打印结果如下:

打印树结果如下:

treeprint.txt存入文件结果如下:

(2)本例测试案例_1

已知某系统在通信联络中只可能出现八种字符,其频率分别为

0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。

解:

假设八种字符为ABCDEFGH,将各个概率乘以100可得权值为5 29 7 8 14 23 3 11 启动程序,测试得:

初始化:

编码:

译码打印结束:

(3)本例测试案例_2

用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:

字符 A B C D E F G H I J K L M

频度188 64 13 22 32 103 21 15 47 57 1 5 32 20

字符N O P Q R S T U V W X Y Z

频度57 63 15 1 48 51 80 23 8 18 1 16 1

解:

先假设空格为#,所以输入字符时,将空格变为#。

输入如下:

先将从空格到Z输入权值

然后对字符进行编码:

空格到Z译码

然后输入字符串并编码:

保存到Codefile.txt中

然后将开始译码并结束

将译码结果保存到Textfile.txt中

五、实验总结

从这个课程设计中,我发现了很多问题,包括文件存储,字符串输入等等,最主要的是经历了一次找BUG的过程,当把自己写的代码里的错误一个一个找出来时,是非常非常兴奋的。还是希望能有多这个经历。不喜欢copy,如果copy 了,就缺少了一次挑战自己的经历。

六、主要代码

// Huffman_2.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include

#include

#include

#include

#define maxsize 1000

#define len 20

#define rowsize 20

//--------初始化-------------//

struct

{

int parent;

int lchild,rchild;

int weight;

}HFM_tree[maxsize];

struct

{

int weight;

char hfstr;

}HFM_num[maxsize];

struct

{