(1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立赫夫曼树,
并将它存于文件hfmTree中。
(2)E:编码(Encoding)。利用已建好的赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件
ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
(3)D:译码(Decoding)。利用已建好的赫夫曼树将文件CodeFile中的代码进行译码,结果存入文件
Textfile中。
以下为选做:
(4)P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字
符形式的编码文件写入文件CodePrin中。
(5)T:印赫夫曼树(Treeprinting)。将已在内存中的赫夫曼树以直观的方式(比如树)显示在终端上,
同时将此字符形式的赫夫曼树写入文件TreePrint中。
(1)已知某系统在通信联络中只可能出现八种字符,其频率分别为
0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计赫夫曼编码。
(2)用下表给出的字符集和频度的实际统计数据建立赫夫曼树,并实现以下报文的编码和译码;
THISPROGRAMEISMYFAVORITE.
字符
A
B
C
D
E
F
G
H
I
J
K
L
M
频度
186
64
13
22
32
103
21
15
47
57
1
5
20
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
63
48
51
80
8
18
16
(1)编码结果以文本方式存储在文件Codefile中。
(2)用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运行Quit。请用
户键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。
(3)在程序的一次执行过程中,第一次执行1,D或C命令之后,赫夫曼树已经在内存了,不必再读入。
每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。
4
2、需求分析
指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码,这就是赫夫曼编码。哈弗曼译码输入字符串可以把它编译成二进制代码,输入二进制代码时可以编译成字符串。
对输入的一串电文字符实现赫夫曼编码,再对赫夫曼编码生成的代码串进行译码,
输出电文字符串。通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报
通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度能尽可能短,即