Huffman源程序

Huffman源程序

ID:40555531

大小:48.50 KB

页数:6页

时间:2019-08-04

Huffman源程序_第1页
Huffman源程序_第2页
Huffman源程序_第3页
Huffman源程序_第4页
Huffman源程序_第5页
资源描述:

《Huffman源程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、对文本文档的Huffman编码解码,附详细程序Shannon.txt是要求编码的文档首先,是要在commandwindow里面键入“fid=fopen('Shannon.txt','r');回车data=fread(fid);回车data”这是将文档读入,并且以ASCII码的形式显示出来。第一步,运行“统计1”文件,用来统计文档中各个字符出现的个数第二步,运行“数量2”文件,用来计算字符的总个数,总共是70个。第三步,运行“求和3”文件,用来统计文本里面所有字符出现的次数,并且计算每个字符出现的概率。第四步

2、,运行“顺序排列4”文件,将每个字符出现的概率进行从大到小的顺序排序,然后将其放到M矩阵的第一行。第五步,运行“计算5”文件,用来进行huffman编码的计算,具体算法如下:该矩阵定义为M矩阵,M矩阵的第一行,存放的是需要编码的各个字符出现的概率,并且按照从大到小排列顺序,然后再将第一行最后两个数相加(即概率最小的两个数相加),把相加得到的结果放到第二行,然后再将第二行重新进行排序,依此类推,一直到第69行,这时第69行只有两个概率,并且相加肯定为1.第六步,运行“编码6”文件,用来对M矩阵的数值进行huf

3、fman编码,具体编码过程如下:首先建立N矩阵,用来存放编码的码字,N=69*(70*70),总共69行,4990列,因为每一个码字的编码长度不会超过70,把4990列看成70个小段,每个小段可以存放70个字符。然后将字符0,赋给最后一行的第一小段,再将字符1,赋给最有一行的第二小段,在M矩阵中,由于每一行的最后两个数,都是这一行中概率最小的两个数,所以将倒数第二行的最后两个数进行相加,然后用相加的结果到倒数第一行中去寻找,肯定会在倒数第一行中找到一样的值,然后记录下来在倒数第一行中这个值的位置,再将这个在

4、M矩阵中的位置对应到N矩阵中,将N矩阵中的该位置的字符赋给倒数第二行的第二小段和第三小段,最后在给第二小段的后面赋字符0,给第三小段后面赋字符1,然后将在最后一行找到的那个数的左边的数,一一对应到上一行去,右边的数,向左串一位,再对应到上一行去,这样依此类推,那么在N矩阵的第一行,可以得到最后的编码。第七部,运行“首行编码7”,输出第一行的所有编码,即为对应字符的huffman编码。clc;clearall;%将文档读入,并且以ASCII码的形式显示出来fid=fopen('Shannon.txt','r'

5、);data=fread(fid);data%统计文档中各个字符出现的个数i=1;a=0;M=0:1:113;forii=10:122a=0;i=1;whilei<4991ifdata(i,1)==iia=a+1;endi=i+1;endj=ii-9;M(1,j)=a;fprintf('M=%d,',M(1,j));end%计算字符的总个数,总共是70个i=1;j=1;N=0:1:100;whilei<114ifM(1,i)~=0N(1,j)=M(1,i);fprintf('N=%d',N(1,j));j=

6、j+1;endi=i+1;endfprintf('');fprintf('num=%d',j-1);%统计文本里面所有字符出现的次数,并且计算每个字符出现的概率i=1;j=1;n=1;sum1=0;p=1:1:70;whilei<71sum1=sum1+N(1,j);p(1,i)=(N(1,j)/4990);n=n+1;fprintf('p=%f',p(1,i));i=i+1;j=j+1;endfprintf('');fprintf('sum1=%d',sum1);%将每个字符出现的概率进行从大

7、到小的顺序排序,然后将其放到M矩阵的第一行i=1;j=2;whilei<71j=i+1;whilej<71ifp(1,i)

8、+M(i,j);n=1;while(n<(j-1))M(i+1,n)=M(i,n);n=n+1;endfork=1:68s=k+1;while(s<=(j-1))ifM(i+1,k)

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

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

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