Huffman源程序.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对文本文档的Huffman编码解码,附详细程序 Shannon.txt是要求编码的文档 首先,是要在command window里面键入“fid=fopen(Shannon.txt,r);回车data=fread(fid);回车data”这是将文档读入,并且以ASCII码的形式显示出来。 第一步,运行“统计1”文件,用来统计文档中各个字符出现的个数 第二步,运行“数量2”文件,用来计算字符的总个数,总共是70个。 第三步,运行“求和3”文件,用来统计文本里面所有字符出现的次数,并且计算每个字符出现的概率。 第四步,运行“顺序排列4”文件,将每个字符出现的概率进行从大到小的顺序排序,然后将其放到M矩阵的第一行。 第五步,运行“计算5”文件,用来进行huffman编码的计算,具体算法如下: 该矩阵定义为M矩阵,M矩阵的第一行,存放的是需要编码的各个字符出现的概率,并且按照从大到小排列顺序,然后再将第一行最后两个数相加(即概率最小的两个数相加), 把相加得到的结果放到第二行,然后再将第二行重新进行排序,依此类推,一直到第69行,这时第69行只有两个概率,并且相加肯定为1 . 第六步,运行“编码6”文件,用来对M矩阵的数值进行huffman编码,具体编码过程如下: 首先建立N矩阵,用来存放编码的码字,N=69*(70*70),总共69行,4990列,因为每一个码字的编码长度不会超过70,把4990列看成70个小段,每个小段可以存放70个字符。 然后将字符0,赋给最后一行的第一小段,再将字符1,赋给最有一行的第二小段,在M矩阵中,由于每一行的最后两个数,都是这一行中概率最小的两个数,所以将倒数第二行的最后两个数 进行相加,然后用相加的结果到倒数第一行中去寻找,肯定会在倒数第一行中找到一样的值,然后记录下来在倒数第一行中这个值的位置,再将这个在M矩阵中的位置对应到N矩阵中, 将N矩阵中的该位置的字符赋给倒数第二行的第二小段和第三小段,最后在给第二小段的后面赋字符0,给第三小段后面赋字符1,然后将在最后一行找到的那个数的左边的数,一一对应到 上一行去,右边的数,向左串一位,再对应到上一行去,这样依此类推,那么在N矩阵的第一行,可以得到最后的编码。 第七部,运行“首行编码7”,输出第一行的所有编码,即为对应字符的huffman编码。 clc; clear all; %将文档读入,并且以ASCII码的形式显示出来 fid=fopen(Shannon.txt,r); data=fread(fid); data %统计文档中各个字符出现的个数 i=1;a=0;M=0:1:113; for ii=10:122 a=0; i=1; while i4991 if data(i,1)==ii a=a+1; end i=i+1; end j=ii-9; M(1,j)=a; fprintf(M=%d, ,M(1,j)); end %计算字符的总个数,总共是70个 i=1;j=1;N=0:1:100; while i114 if M(1,i)~=0 N(1,j)=M(1,i); fprintf(N=%d ,N(1,j)); j=j+1; end i=i+1; end fprintf(\n); fprintf(num=%d,j-1); %统计文本里面所有字符出现的次数,并且计算每个字符出现的概率 i=1;j=1;n=1;sum1=0;p=1:1:70; while i71 sum1=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; end fprintf(\n); fprintf(sum1=%d\n,sum1); %将每个字符出现的概率进行从大到小的顺序排序,然后将其放到M矩阵的第一行 i=1;j=2; while i71 j=i+1; while j71 if p(1,i)p(1,j) temp=p(1,i); p(1,i)=p(1,j); p(1,j)=temp; end j=j+1; end fprintf(p=%f ,p(1,i)); i=i+1; end M=

文档评论(0)

xinshengwencai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档