matlab环境下的r元霍夫曼编码

斌先森 2016-12-15 04:00:40
现在自己在完成一个r元霍夫曼编码的作业,前期的排序工作都做得差不多了,但是怎么编码的问题始终没有头绪,请教各位大神后面应该怎么做?
clear;
%r=input('请输入霍夫曼编码的码元数:');
%p(:,1)=input('请输入码符号的概率:');
r=2;
p(:,1)=[0.1,0.2,0.05,0.05,0.3,0.01,0.02,0.17,0.05,0.05];
q=length(p);
theta=(q-r)/(r-1);
k=double(theta-double(uint8(theta)));
%----------------theta如果不是整数,对q进行变换-----------------%
if k<0
theta=uint8(theta);
q=(r-1)*theta+r;
end
if k>0
theta=uint8(theta)+1;
q=(r-1)*theta+r;
end
if k==0
q=q;
end
%----------------------------进行排序求和操作----------------------%
%----------------------------------------------------------%
a=ones(q,2*theta+2);
if q==length(p) %如果theta是整数的情况
a=sort(p); %对输入的概率进行排序(升序)
for i=1:r
for j=2:2:2*theta+2 %编码过程
a(i,j)=i;
a(1,j+1)=sum(a(1:r,j-1));
a(2:q-r+1,j+1)=a(r+1:q,j-1);
x=find(a==0);
a(x)=1;
a(1:q-r+1,j+1)=sort(a(1:q-r+1,j+1));
end
end
end
%--------------------------------------------------------%
if q~=length(p) %theta不是整数的情况
m=q-length(p);
a(1:m,1)=0;
a(m+1:q,1)=sort(p);
for i=1:r
for j=2:2:2*theta+2 %编码过程
a(i,j)=i;
a(1,j+1)=sum(a(1:r,j-1));
a(2:q-r+1,j+1)=a(r+1:q,j-1);
[x1,y1]=find(a(:,2:end)==0);
a(x1,y1)=1;
a(1:q-r+1,j+1)=sort(a(1:q-r+1,j+1));
end
end
end
...全文
328 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧