Huffman编码的Matlab实现
实现代码
信息论与编码大作业
function [ Huff_chart, Ave_length, yita] = huff_code( c )
%统计字符串中字符出现频率
t=unique(c);
for i=1:length(t)
Num(i)=length(strfind(c,t(i)));
end
Num=Num/sum(Num);
%构建Huffman编码表
Huff_chart=cell(3,length(t));
for i=1:length(t)
Huff_chart(1,i)={t(i)};
Huff_chart(2,i)={Num(i)};
Huff_chart(3,i)={0};
end
%生成待编码矩阵,每列最后一个元素为新求和得到元素的位置
n=length(t);
A=sort(Num,'descend');%按降序排列
T=A;
A=A/sum(A);
B=zeros(n,n);
%生成第一列
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=sort(T,'descend');
t=n-1;
%生成编码表的其他各列
for j=2:n
for i=1:t
B(i,j)=T(i);
end
if t>1
K=find(T==r);
B(n,j)=K(end);
r=(B(t-1,j)