【老生谈算法】matlab实现Huffman编码源码——Huffman编码
发布时间
阅读量:
阅读量
MATLAB实现Huffman编码程序源码
1、文档下载:
本算法已经整理成文档如下,有需要的朋友可以点击进行下载
| 序号 | 文档(点击下载) |
|---|---|
| 本项目文档 | 【老生谈算法】MATLAB实现Huffman编码程序源码.docx |
2、算法详解:
%霍夫曼编码
clc;
clear;
u=[0.4,0.2,0.1,0.1,0.1,0.05,0.05];
[u,k]=sort(u);
k=fliplr(k);
a=fliplr(u);
[m,n]=size(u);
B=zeros(n,n-1);%空的编码表(矩阵)
for i=1:n
B(i,1)=a(i);
end
for j=1:n-2
tmp=B(n-j+1,j)+B(n-j,j);
a(n-j+1)=0;
a(n-j)=tmp;
a=fliplr(sort(a));
for i=1:n
B(i,j+1)=a(i);
end
%查找合并后概率位置
r=find(a==tmp);
B(n,j+1)=r(end);%必须要加上end,保证排序。
end
index=cell(n,n-1);
index{1,n-1}='0';
index{2,n-1}='1';
t=2;
for t=2:n-1
%给倒数第t列元素编码
index{ t,n-t }=[index{ B(n,n-t+1) ,n-t+1},'0'];
index{t+1,n-t}=[index{ B(n,n-t+1),n-t+1 },'1'];
if(B(n,n-t+1)==1)
for j=1:t-1
index{j,n-t}=index{j+1,n-t+1};
end
else
for j=1: B( n,n-t+1 ) - 1
index{ j, n-t}=index{ j, n-t+1};
end
for j=B(n,n-t+1):t-1
index{ j, n-t}=index{ j+1 , n-t+1 };
end
end
end
for i=1:n
len(i)=length(index{i,1});
end
u=fliplr(u);
avlen=sum(len.*u)%平均码长
H=sum(-u.*log2(u) )
P=H/avlen
全部评论 (0)
还没有任何评论哟~
