?/p>
题目:哈夫曼?/p>
/
译码?/p>
班级?/p>
姓名?/p>
学号?/p>
完成日期?/p>
15.11.14
一、题目要?/p>
描述?/p>
写一个哈夫曼码的?/p>
/
译码系统?/p>
要求能对要传输的报文进行编码和解码?/p>
构造哈
夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码?/p>
1
,左子树编码?/p>
0.
输入?/p>
输入表示字符集大小为
n
?/p>
n <= 100
)的正整数,以及
n
个字符和
n
个权值(正整
数,值越大表示该字符出现的概率越大)
?/p>
输入串长小于或等?/p>
100
的目标报文?/p>
输出?/p>
经过编码后的二进制码,占一行;
以及对应解码后的报文,占一行;
最后输出一个回车符?/p>
输入样例?/p>
5 a b c d e 12 40 15 8 25
bbbaddeccbbb
输出样例?/p>
00011111110111010110110000
bbbaddeccbbb
提示?/p>
利用编码前缀性质?/p>
二、概要设?/p>
1.
设计需要的数据结构:树型结?/p>
2.
需要的抽象数据类型?/p>
ADT Tree{
数据对象
D
?/p>
D
是具有相同特性的数据元素的集合?/p>
数据关系
R
:若
D
为空集,则称为空树;
?/p>
D
仅含有一个数据元素,?/p>
R
为空集,否则
R={H}
?/p>
H
是如下二元关系:
(1)
?/p>
D
中存在唯一的称为根的数据元?/p>
root
,它在关?/p>
H
下无前驱?/p>
(2)
?/p>
D
-
{root}
?/p>
NULL
?/p>
则存?/p>
D
-
{root}
的一个划?/p>
D1,D2,D3,
?/p>
,Dm(m>0)
?/p>
对于任意
j
?/p>
k(
?/p>
j,k
?/p>
m)
?/p>
Dj
?/p>
Dk=NULL,
且对任意?/p>
i(1
?/p>
i
?/p>
m)
,唯一存在数据元素
xi
?/p>
Di
?/p>
<root,xi>
?/p>
H;
(3)
对应?/p>
D
-
{root}
的划分,
H
-
{<root,xi>,
?/p>
,<root,xm>}
有唯一的一个划?/p>
H1
?/p>
H2,
?/p>
,Hm(m>0)
?/p>
对任?/p>
j
?/p>
k(1
?/p>
j,k
?/p>
m)
?/p>
Hj
?/p>
Hk=NULL
?/p>
且对任意
i(1
?/p>
i
?/p>
m),Hi
?/p>
Di
上的二元关系?/p>
(Di,{Hi})
是一棵符合本定义的树,称为根
root
的子树?/p>
基本操作?/p>
InitTree(&T);
操作结果:构造空?/p>
T
?/p>