matlab 哈夫曼编码
clc;clear;
n=10;
% c=[];
c=randsample(100,10); %随机生成10个数字
% c=rand(1,n);%********随机生成数据********************
c=c/sum(c);
% c=;
p=c;
disp(p);
w=[;];%***************位置矩阵,记录数据的变化过程*****
for i=1:n-1
=sort(p);
w(i,:)=; %存放每一次排序的顺序
p=;
end
a={;};%**********字符数组,生成霍夫曼码****************
for i=1:2*(n-1)
for j=1:n
a{i,j}=' ';
end
end%*****************初始化*********************
a{2*n-2,1}='0';
a{2*n-2,2}='1';
for i=1:n-1 % 1-9
for j=1:i+1%
a{2*(n-i)-1,j}=a{2*(n-i),find(w(n-i,:)==j)};%恢复未排序前奇数行
end
if((n-i-1)<=0)
break;
end
a{2*(n-i-1),1}=strcat(a{2*(n-i)-1,1},'0'); %每次都是最小两个概率合并,这是恢复到合并前
a{2*(n-i-1),2}=strcat(a{2*(n-i)-1,1},'1'); %前两个每次加一个码字,分别为0和1
for j=3:i+2
a{2*(n-i-1),j}=a{2*(n-i)-1,j-1}; %除取前两个的,后面和上一行结果相同
end
end
h=-c.*log2(c);
hx=sum(h);
for i=1:n
len(i)=length(a{1,i});
end
plen=len.*c';
averagelen=sum(plen);
fprintf('霍夫曼编码为:\n');
% disp(a);
for i=1:n
disp(a(1,i));
end
fprintf('平均码长为:\n');
disp(averagelen);
fprintf('信源熵为:\n');
disp(hx);
fprintf('编码效率为:\n');
disp(hx/averagelen);
错误使用 horzcat
串联的矩阵的维度不一致。
出错 huffman_1 (line 15)
p=; 请问解决了吗? 烟雨任平生 发表于 2022-5-13 16:47
请问解决了吗?
我换代码了,
页:
[1]