全球旧事资料 分类
14
0
0
1
13
0
0
2
14
2
3
2
15
4
5
2
15
6
7
3
16
9
1
4
16
8
10
4
17
11
12
7
17
13
14
11
0
15
16

译码后的字符串
IAMASTUDENT

Pressa
ykeytoco
ti
ue
3
f3系统(项目)设计
1设计思路及方案本课题是用最优二叉树即哈夫曼树来实现哈夫曼编码译码器的功能。假设每
种字符在电文中出现的次数为Wi,编码长度为Li,电文中有
种字符,则电文编码总长度为W1L1W2L2…WiLi。若将此对应到二叉树上,Wi为叶结点,Li为根结点到叶结点的路径长度。那么,W1L1W2L2…WiLi恰好为二叉树上带权路径长度。
因此,设计电文总长最短的二进制前缀编码,就是以
种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码。
该系统将实现以下几大功能:从硬盘读取字符串,建立哈夫曼树,输出哈夫曼树的存储结构的初态和终态,输出各种字符出现的次数以及哈夫曼编码的译码等。2模块的设计及介绍
①从硬盘读取字符串fileope
参数
实现命令;打印输出;②建立Huffma
Tree通过三个函数来实现:voidselect参数初始化;for
接受命令;处理命令;
4
f说明:在ht1k中选择pare
t为0且权值最小的两个根结点的算法i
tjsq参数
初始化;for接受命令;处理命令;
说明:统计字符串中各种字母的个数以及字符的种类voidChuffma
Tree
初始化;for
接受命令;处理命令;输出字符统计情况;说明:构造哈夫曼树③输出哈夫曼树的存储结构的初态和终态分别调用pri
t1和pri
t2来实现voidpri
t1参数初始化;输出初态;
5
f说明:输出哈夫曼树的初态voidpri
t2参数
for输出终态;
说明:输出哈夫曼树的终态④哈夫曼编码和译码voidHuffma
E
codi
g参数
定义变量;
处理命令;说明:哈夫曼编码chardecode参数定义变量;while
接受命令;处理命令;说明:哈夫曼译码
6
f3主要模块程序流程图下面介绍三个主要的程序模块流程图:
①主函数流程图:
开始否
打开文件?是
字符总数
um统计字符种类及频率
建立哈夫曼树
哈夫曼编码哈夫曼译码
结束
图31流程图注释:该图比较简单,主要是调用各个函数模块,首先代开已经存在的文件,然后统计总的字符数以及出现的各个字符和频率。然后才开始建立哈夫曼树,接着在哈夫曼树的基础上对其进行编码,编码之后才是译码。最后输出结束。
7
f②构造哈夫曼树:
开始
第i个结点权值
否i
um是
第i个根结点
否i2
um1是
创建哈夫曼树
输出字符r
好听全球资料 返回顶部