《哈夫曼编码及Matlab实现.docx》由会员分享,可在线阅读,更多相关《哈夫曼编码及Matlab实现.docx(3页珍藏版)》请在三一文库上搜索。
1、最新 料推荐哈夫曼编码及 Matlab 实现哈夫曼编码是一种所得码字是异前置的变长码, 其平均码长最短, 被称为最佳变长码,也称为哈夫曼编码。其具体编码方法如下:(1)将信源信息(符号)按概率大小排队;(2)从最小概率的两个消息开始编码,并给予一定的编码规则,如小概率的下支路编为 1(或 0),大概率的上支路变为0(或 1),若两者概率相等,仍是下支路为 1 上支路为 0;(3)将已经编码的两个消息对应概率合并,并重新按概率大小排队,重复步骤( 2);(4)重复步骤( 3),直至合并概率归一为止;(5)变成的变长码是按后出先编方式,即从概率归一的树根沿编码路线逆行至对应的消息。实验内容:给定离
2、散信源:Uu1u2u3u4u5u6u7p0.200.190.180.170.150.100.01对其进行哈夫曼编码,其理论结果如下:消息概率编码( U)(p)(C)u10.200.200.260.350.390.611.010u20.190.190.200.260.350.3911u30.180.180.190.200.26000u40.170.170.180.19001u50.150.150.17010u60.100.110110u70.010111最新 料推荐哈夫曼编码 Matlab 代码:p=0.2,0.19,0.18,0.17,0.15,0.1,0.01;p=sort(p,descen
3、d);%降序排列H=sum(-p.*log2(p);% 求得信息熵n=length(p);%离散信源长度q=p;m=zeros(n-1,n);for i=1:n-1% 对第一行进行编码q,l=sort(q);m(i,:)=l(1:n-i+1),zeros(1,i-1);q=q(1)+q(2),q(3:n),1;endfor i=1:n-1c(i,:)=blanks(n*n);endc(n-1,n)=1;c(n-1,2*n)=0;for i=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)=1).-(n-2):n*(find(m(n-i+1,:)=1);c
4、(n-i,n)=1;%在支路的第一个元素最后补1c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)=0;% 在支路的第一个元素最后补0for j=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,.n*(find(m(n-i+1,:)=j+1)-1)+1:n*find(m(n-i+1,:)=j+1);%分配码字endendfor i=1:nh(i,1:n)=c(1,n*(find(m(1,:)=i)-1)+1:find(m(1,:)=i)*n);ll(i)=length(find(abs(h(i,:)=32);% 计算每一个哈夫曼编码的长度endL=sum(p.*ll);% 求得平均码长t=H/L;% 求得编码效率最新 料推荐运行结果:该结果与理论结果相符,满足实验要求。