Infomation Theory - The Implementation of Huffman Coder.docxVIP

Infomation Theory - The Implementation of Huffman Coder.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Infomation TheoryThe Implementation of Huffman Coder2016-1-7莫帮杰2013301200227信息论与编码——Huffman编码器的实现一、 实验目的1、理解和掌握Huffman编码的基本原理和方法;2、给出信源符号的概率统计分布,并计算信源熵;3、给出两种以上单信源符号Huffman码表;4、计算每信源的平均字长,并与信源熵比较;5、计算编码效率,分析码长方差对实验系统的影响。二、 实验原理1、 二元霍夫曼编码的基本原理(1)将q个信源符号按照概率分布的大小顺序递增(或递减)排列:===…=;(2)用码符号0和1分别给概率最小的两个信源符号编码,并将这两个符号合并成一个新符号,新符号的概率即为这两个符号的概率之和,从而得到只包含q-1个符号的新信源;(3)重复步骤(1)~(2),直至信源不能再缩减;(4)从编码路径向前返回,所得到的路径序列即为对应符号的码字。由于码符号分配的任意性和符号合并后概率与其他符号相同时排序方法的不同,同一信源的霍夫曼编码往往并不唯一。但是,针对第二种情况,编码时如尽量把新生成的码符号概率排在最前面将有利于减小码长方差,编出来的码也就跟接近于等长码,这在后面的实验结果当中会有所体现。2、r元霍夫曼编码的基本原理(1)将q个信源符号按照概率分布的大小顺序递增(或递减)排列:===…=;(2)用r个码符号、、…分别给概率最小的r个信源符号编码,并将这r个符号合并成一个新符号,新符号的概率即为这r个符号的概率之和,从而得到只包含q-r+1个符号的新信源;(3)重复步骤(1)~(2),直至信源不能再缩减;(4)从编码路径向前返回,所得到的路径序列即为对应符号的码字。需要注意的是,由于r元霍夫曼编码每次缩减r-1个符号,为保证缩减n次后信源符号个数恰好等于r,在编码前需检查初始信源符号个数q(q=2)是否满足q=(r-1)*n+r,如果不满足,则填充最少的0使满足。特殊的,在r=2,即二元编码的条件下,q=(r-1)*n+r总是成立的。3. 平均码长: (单位为:码符号/信源符号)其中,为信源S在q个信源符号中出现的概率,为编码后信源S的第i个码字的码长。4. 信息熵: (单位为:比特/信源符号)其中,为信源S在q个信源符号中出现的概率。5. 编码效率:其中,H(S)为信息熵,L为平均码长。三、 算法设计 四、 JAVA关键代码/** * 迭代编码,由下至上构建码树 * @param probabilities 信源的概率分布 * @param codeTreeMap 码树图 * @return 码树 */private CodeTreeT code(double[] probabilities, CodeTreeMapT codeTreeMap) {//每一次迭代都生成新的码树CodeTreeT codeTree = new CodeTreeT();//符号挑选器SymbolPickerT symbolPicker = new SymbolPickerT(arbitrary ,symbolSet);//新信源符号的概率double probability = 0;for (int i = probabilities.length-1; i probabilities.length-base-1; i--) {//累加生成新信源符号的概率probability += probabilities[i];//下一个符号T symbol = symbolPicker.next();//从码树图中取得游离的历史码树,放入新的码树中构建,同时将其移除(忘记)codeTree.put(symbol,codeTreeMap.remove(i));}//迭代直到信源大小不能再缩减为止if (probabilities.length == base) {return codeTree;}//缩减信源probabilities = reduce(probabilities);//找到新信源符号待插入位置int index = indexToInsert(probability, probabilities);//插入新信源符号insert(probabilities, probability, index);//调整码树图adjustCodeTreeMap(codeTreeMap, index);//记住新生成的码树codeTreeMap.put(index, codeTree);//继续下一轮编码return code(probabilities, codeTreeMap);说明:以上只是代码中比较核心的部分,完整的可运行程序请查看附件中的JAVA代码包。五、

文档评论(0)

有一二三 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档