木兰姐网站建设网站优化排名推广
实验名称:英文文本的Huffman编码压缩
一、实验目的和要求
了解Huffman编码的特点,掌握Huffman编码基本原理及编码算法的设计与程序实现。
二、实验内容和原理
以任意选择一个纯英文文本为数据,设计出Huffman编码的压缩和解压缩算法,并写出程序予以实现。
霍夫曼(Huffman)编码是一种统计编码,属于无损压缩编码。
霍夫曼编码的码长是变化的,对于出现频率高的信息,编码的长度较短;而对于出现频率低的信息,编码长度较长。这样,处理全部信息的总码长一定小于实际信息的符号长度。
三、实验环境
硬件:计算机
软件:Windows 2000和MATLAB编程环境。
四、算法描述及实验步骤
(1)输入一串字符串x=s,即s=hmmyyjhjjgjjpqw,k为其长度,分别用a、b两个数组来表示字符串中出现的不同字母及其出现的个数,调用findstr函数进行统计。
(2)调用Huffmandict函数,即[dict,avglen]=huffmandict(c,d),使用数组C及其概率数组d进行Huffman编码,编码后产生一个编码词典dict,以及平均码长avglen。
(3)调用huffmanenco函数,即sig_encoded =
huffmanenco(x,dict),利用上面Huffmandict函数中产生的编码词典dict对sig_encoded来解码,其结果存放在dsig中以及dsig=huffmandeco(sig_encoded,dict)。
(4)代码如下所示:
clear;
x=input('输入一串字符串','s');
k=length(x);
t1=1;
a(t1:k)=0;
b(t1:k)=0;
for i=1 :k
kk=findstr(a,x(i));
if
isempty(kk)
a(t1)=x(i);
b(t1)=b(t1)+1;
t1=t1+1;
else
t2=kk(1);
b(t2)=b(t2)+1;
end
end
for i=1:t1-1
c(i)=a(i);
d(i)=b(i)/k;
end
[dict,avglen] = huffmandict(c,d)
sig_encoded = huffmanenco(x,dict)
dsig=huffmandeco(sig_encoded,dict)
s=char(dsig)
五、调试过程
六、实验结果
(1)输入的字符串以及所得编码词典dict和平均长度avglen:
(2)运行后所得sig_encoded数据:
(3)解码结果dsig数据(最后得到的字符串与输入的字符串一致):
七、总结
通过这次英文文本的Huffman编码压缩的实验,使我对霍夫曼(Huffman)编码、解码有了更进一步的了解,也知道了Huffman编码的一些函数的调用及其功能,如:huffmanenco函数、Huffmandict函数、Huffmandeco函数等;也对Matlab有了更进一步的了解。