huffman编码与译码 代码

huffman编码与译码 代码

ID:20277198

大小:49.50 KB

页数:6页

时间:2018-10-10

huffman编码与译码 代码_第1页
huffman编码与译码 代码_第2页
huffman编码与译码 代码_第3页
huffman编码与译码 代码_第4页
huffman编码与译码 代码_第5页
资源描述:

《huffman编码与译码 代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、%1完成对输入的序列进行各个码元的概率统计;%完成对字符串中的各字符的统计,并列出其概率分布矩阵,返回pro矩阵%s:待编码序列,S:所含的码元序列functionpro=getpro(s)pro=[];a=length(s);S=unique(s);b=length(S);c=zeros(1,b);%用以存放个序列中各个码元的个数;%/////////////////////////////////////////////%进行概率计算;fori=1:bforj=1:aifS(i)==s(j)c(i)=c(i)+1;elsecontinue;end;end

2、;end;pro=c./a;disp(S);disp(pro);%完成对已知编码序列的译码,以及在改变码表中的某一位值得情况下,再一次译码,计算其误码率;%Codenumber:已编码序列;huffmantable:码表;Code2:各码元的码长;pro2:各码元的概率分布矩阵;%s:原始序列;decodenumber:译码序列;functiondecodenumber=huffmandecode(Codenumber,huffmantable,Code2,pro2,bit)mm=unique(bit);%码元序列mm=mm(pro2(2,:));[lx,l

3、y]=size(huffmantable);LL=size(Codenumber,2);decodenumber=[];ZF=[Codenumber,-ones(1,max(Code2))];forj=1:length(bit)fori=1:lxk=Code2(i);while(ZF(1:k)==huffmantable(i,1:k))decodenumber=[decodenumber,mm(i)];ZF=ZF(k+1:end);endendenddisp('译码序列如下:');disp(decodenumber);disp('原始序列如下:');disp

4、(bit);end%对于译码部分所用到的部分主要是编码时生成的码表以及huffmantree,在进行编码的时候,%通过筛选后的源字符串的字符序列的下标,与码表中的每行相对应的原则,遍历编码序列;%在遍历的时候,通过码表中各行的码长,控制遍历的长度,与每行中的码表进行比较,输出相对应的字符,即完成了译码。%3编码,完成构成完整的基本树,形成huffmantree,并对其遍历,得到码表,通过码表对序列进行编码,并求其平均码长,信息熵,编码效率;%HuffmanTree哈夫曼树,pro码元概率分布矩阵,S,待编码序列;function[Codenumber,huf

5、fmantable,Code2]=huffmanencode(HuffmanTree,pro,bit)p=pro;a1=unique(bit);a2=bit;len1=length(a1);%码元序列的长度;len2=length(a2);%所要编码序列的长度;a3=zeros(1,len2);%生成与编码序列长度一样的零矩阵,用以存放编码对应的下标;Code=[];%存放其遍历一个码元所对应的编码;Code2=[];%记录各个码元的码长;Lastnumber=1;Sumnumber=0;%累积计算编码总长度;huffmantable=-ones(len1,

6、len1);%建立len1*len1的单位负矩阵,用以存放其码表;%遍历二叉树,生成码表huffmantable;fori=1:len1;%循环完成len1个符号的编码;k=pro(2,i);key=1;m=find(HuffmanTree(6,1:len1)==k);while(HuffmanTree(5,m)~=1)%判断是否遍历到根结点;Code(key)=HuffmanTree(4,m);key=key+1;m=HuffmanTree(3,m);%指向父节点;endlc=length(Code);huffmantable(i,1:lc)=fliplr

7、(Code);%将Code矩阵中的编码左右翻转,完成倒序排列;Code2=[Code2,lc];%将各个码元的编码长度赋予矩阵Code2;end%显示码表,即只输出矩阵huffmantable中非-1的部分;disp('码表如下:');Code4=[];fori=1:len1%显示其码表;disp(a1(pro(2,i)));flag=1;while(huffmantable(i,flag)~=-1)Code4(flag)=huffmantable(i,flag);flag=flag+1;end;Code4,disp('码长='),Code2(i)end;%

8、通过以上生成的码表,然后遍历源字符串与unique之

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。