求助大神们啊。。绘制霍夫曼编码效率图
我从网上找了霍夫曼编码的代码然后自己修改了一下
可是运行之后就只有以下结果{:{19}:}
信源信息熵:
0.7219
??? Error using ==> times
Matrix dimensions must agree.
附代码:
clear all;
i=0;
n=0;
H=0;
p1=0.8;
p2=0.2;
p=;
B=length(p);%p为概率矩阵
for i=1:B
H=H+(- p(i)*log2(p(i)));%计算信源信息熵
end
fprintf('信源信息熵:\n');
disp(H);
for n=2:8
W=[];
for i=0:n
W=;
L=length(W);%W为概率矩阵
end
end
for i=1:L-1 %按概率分布大小对信源排序
for j=i+1:L
if W(i)<W(j)
m=W(j);
W(j)=W(i);
W(i)=m;
end
end
end
Q=W;
m=zeros(L-1,L);
for i=1:L-1 %循环缩减对概率值排序,画出由每个信源符号概率到1.0 处的路径,
=sort(Q);
m(i,:)=;
Q=;
end
for i=1:L-1
c(i,:)=blanks(L*L);
end
c(L-1,L)='0';
c(L-1,2*L)='1';
for i=2:L-1 %对字符数组c码字赋值过程,记下沿路径的“1”和“0”;
c(L-i,1:L-1)=c(L-i+1,L*(find(m(L-i+1,:)==1))-(L-2):L*(find(m(L-i+1,:)==1)));
c(L-i,L)='0';
c(L-i,L+1:2*L-1)=c(L-i,1:L-1);
c(L-i,2*L)='1';
for j=1:i-1
c(L-i,(j+1)*L+1:(j+2)*L)=c(L-i+1,L*(find(m(L-i+1,:)==j+1)-1)+1:L*find(m(L-i+1,:)==j+1));
end
end
for i=1:L
h(i,1:L)=c(1,L*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*L);%码字赋值
ll(i)=length(find(abs(h(i,:))~=32)); %各码字码长
end
A=sum(p.*ll); %计算平均码长
E=H/A; %计算编码效率
n =2:0.1:8;
plot(n,E);%绘制曲线
望大神们赐教~~小女子将感激不尽~~在线等。。。。 LZ报错也没给齐!
??? Error using ==> mtimes
Inner matrix dimensions must agree.
Error in ==> zzz at 56
A=sum(p*ll);
p是1*2, ll是1*9, 两者怎乘?
Ref: 5F, 常见的程序出错问题整理 http://forum.vibunion.com/thread-46001-1-1.html
From http://forum.vibunion.com/home-space-uid-63979-do-blog-id-18250.html
页:
[1]