哈夫曼编码课程设计报告
数据结构 课程设计报告
  课 题: 专业班级: 学 号: 姓 名: 指导教师:
  1 课程设计的目的和意义
  在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。
  哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0〞码,指向右子树的分支表示“1〞码,取每条路径上的“0〞或“1〞的序列作为和各个对应的字符的编码,这就是哈夫曼编码。
  通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。
  1
  2.需求分析
  课 题:哈夫曼编码译码器系统
  问题描述:翻开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们
  作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。
  问题补充:1. 从硬盘的一个文件里读出一段英语文章;
  2. 统计这篇文章中的每个字符出现的次数; 3. 以字符出现字数作为权值,构建哈夫曼树
  4. 对每个字符进行编码并将所编码写入文件然后对所编码进行破
  译。
  具体介绍:在本课题中,我们在硬盘D盘中预先建立一个文档,在里面
  编辑一篇文章(大写)。然后运行程序,调用fileopen()函数读出该文章,显示在界面;再调用tongji()函数对该文章的字符种类进行统计,并对每个字符的出现次数进行统计,并且在界面上显示;然后以每个字符出现次数作为权值,调用Create_huffmanTree()函数构建哈夫曼树。然后调用Huffman_bianma()函数对哈夫曼树进行编码,调用coding()函数将编码写入文件。
  测试数据:例如从文本中读到文章为:IAMASTUDENT。
  那么效果如下:
  读出文本为:IAMASTUDENT
  字符A次数:2 字符D次数:1 字符E次数:1 字符I 次数:1 字符M次数:1 字符N 次数:1 字符S 次数:1 字符T次数:2 字符U次数:1
  输出编码:000 101 001 101 011 110 100 1110 1111 010 110
  Press any key to continue
  2
  3
  3 系统〔工程〕设计
  (1)设计思路及方案
  本课题是用最优二叉树即哈夫曼树来实现哈夫曼编码译码器的功能。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,那么电文编码总长度为(W1*L1)+(W2*L2)+?+(Wi*Li)。假设将此对应到二叉树上,Wi为叶结点,Li为根结点到叶结点的路径长度。那么,(W1*L1)+(W2*L2)+?+(Wi*Li)恰好为二叉树上带权路径长度。
  因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码。
  该系统将实现以下几大功能:从硬盘读取字符串,建立哈夫曼树,输出哈夫曼树的存储结构的初态和终态,输出各种字符出现的次数以及哈夫曼编码的译码等。
  (2)模块的设计及介绍
  1从硬盘读取字符串 fileopen(参数) {
  实现命令; 打印输出; }
  2建立HuffmanTree 通过三个函数来实现: void select_min(参数) {
  初始化; for
  {
  接受命令;
  4
>哈夫曼编码树的带权路径长度

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。