『求助』Shannon-Fano 的递归
浏览:165899 回答:1
哪位大侠帮帮忙看一下:一个已经把概率从大到小排序的数组,怎么样得出Shannon-Fano的编码呀?下面是我写的程序,只能得出第一位,我想后面应该用递归来算,可是不知道该怎么用。
m=[0.2000 0.2000 0.1600 0.1600 0.1200 0.0800 0.0400 0.0400];
% m=[0.4 0.2 0.1 0.1 0.08 0.08 0.04];
% m=[0.2 0.18];
j=length(m);
codcell=cell(j,1);
j1=j;
if j1>1
m2=m(1:j);
j2=length(m2);
i=1;
z=m2(1);
j1=length(z);
t=m(2:j2);
while sum(z) < sum(t)
i=i+1;
z=[z,m2(i)];
j1=length(z);
j3=length(t);
t=t(i+1:j3);
end
a=i
for k=1:i
codcell{k}=[codcell{k},0];
k=k+1;
end
for k=i+1:j2
codcell{k}=[codcell{k},1];
k=k+1;
end
end
codcell
m=[0.2000 0.2000 0.1600 0.1600 0.1200 0.0800 0.0400 0.0400];
% m=[0.4 0.2 0.1 0.1 0.08 0.08 0.04];
% m=[0.2 0.18];
j=length(m);
codcell=cell(j,1);
j1=j;
if j1>1
m2=m(1:j);
j2=length(m2);
i=1;
z=m2(1);
j1=length(z);
t=m(2:j2);
while sum(z) < sum(t)
i=i+1;
z=[z,m2(i)];
j1=length(z);
j3=length(t);
t=t(i+1:j3);
end
a=i
for k=1:i
codcell{k}=[codcell{k},0];
k=k+1;
end
for k=i+1:j2
codcell{k}=[codcell{k},1];
k=k+1;
end
end
codcell