当前位置:文档之家› 实验六_赫夫曼编码

实验六_赫夫曼编码

实验名称:实验六费诺编码
一、实验目的:
加深对赫夫曼编码的理解及其具体的实现过程
二、实验内容与原理:
1.完成赫夫曼的编码
2.计算平均码长及编码效率
三、实验步骤
根据赫夫曼编码的步骤完成该编码
四、实验数据及结果分析(可附程序运行截图)
编码的结果:
五、代码附录
%哈夫曼编码的MATLAB实现(基于0、1编码):clc;
clear;
A=[0.25 0.25 0.2 0.15 0.1 0.05];%信源消息的概率序列A=fliplr(sort(A));%按降序排列
T=A;
[m,n]=size(A);
B=zeros(n,n-1);%空的编码表4*5(矩阵)
for i=1:n
B(i,1)=T(i);%生成编码表的第一列
end
r=B(i,1)+B(i-1,1);%最后两个元素相加
T(n-1)=r;
T(n)=0;
T=fliplr(sort(T));
t=n-1;%t=4
for j=2:n-1%生成编码表的其他各列
for i=1:t
B(i,j)=T(i);
end
K=find(T==r);%函数用于返回所需要元素的所在位置
B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在%该列的位置
r=(B(t-1,j)+B(t,j));%最后两个元素相加
T(t-1)=r;
T(t)=0;
T=fliplr(sort(T));
t=t-1;
end
B;%输出编码表
END1=sym('[0,1]');%给最后一列的元素编码
END=END1;
t=3;
d=1;
for j=n-2:-1:1%从倒数第二列开始依次对各列元素编码
for i=1:t-2
if i>1 & B(i,j)==B(i-1,j)
d=d+1;
else
d=1;
end
B(B(n,j+1),j+1)=-1;
temp=B(:,j+1);
x=find(temp==B(i,j));
END(i)=END1(x(d));
end
y=B(n,j+1);
END(t-1)=[char(END1(y)),'0'];
END(t)=[char(END1(y)),'1'];
t=t+1;
END1=END;
end
A%排序后的原概率序列
END%编码结果
for i=1:n
[a,b]=size(char(END(i)));
L(i)=b;
end
disp('平均码长:;');
avlen=sum(L.*A)%平均码长
H1=log2(A);
H=-A*(H1')%熵
disp('编码效率:');
P=H/avlen%编码效率
六、其他:实验总结、心得体会及对本实验方法、手段及过程的改进建议等。

哈夫曼(Huffman)编码是一种常用的压缩编码方法,是Huffman于1952年为压缩文本文件建立的。

它的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同。

这些代码都是二进制码,且码的长度是可变的。

相关主题