多媒体大作业.docxVIP

  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文档。上传文档
查看更多
多媒体大作业文件压缩与解压缩的实现学号:姓名:班级: 日期:2015/12/17目录一 文件二 压缩解压缩实现细节三 代码四 测试结果五 存在问题一文件文件格式 :.txt .jpg 文件都可以本次测试 为一篇文章的txt文件,以及一张图片。二压缩解压缩实现细节算法:哈夫曼算法原理及步骤:1.读取文件,统计每一种字节出现的次数,将出现的字节种类与对应的次数保存起来(可采用数组或者是HashMap,或者是其他的数据结构)保存完了之后干什么呢??当然是构建哈弗曼树呀。第二步:2. 利用得到的字节与对应的频次构建哈弗曼树,需要注意的是,构建树的时候是以字节出现的频次作为我们的评判标准,出现次数越多的放在越上层。比如我们上面所说的这个文件,它所构成的树应该是这样的:??我们现在得到的树还处于未编码的状态,那么第三步毫无疑问就是我们所说的编码了:3. 将得到的哈弗曼树进行编码编码之后的树就变成这个样子了(采取向左编1的方式): 编码之后,A所对应的的编码就是111,B就是110,C是10,D是0,那么我们的文件就变成01010100,000,下面要把这些10串每8个作为一组编码成一个新的字节(2进制转10进制),所以这里每8位我也特别用逗号表示出来了。(1)如果最后几位不满8个怎么办??定义这样一个规则,在最后的位置补0,在文件的末尾再加一位表示最后一个数补0的个数,这样的话这个问题就变得很简单了。(2)压缩之后怎么知道压缩前每种字节对应的编码是什么样子的? 那么要完成压缩,最关键的一步,还要将压缩时所得到的每个字节对应的码表写入文件,这样才能保证,所做的工作是可逆的。?4.根据每种字节对应的哈弗曼编码,将文件转换成01字符串5.将得到的01串重新编码成新的byte数组写入文件6.对象化的实现方法中,提供了按位输入与输出的类,这些类都是自定义的,因为在编程中所能操作的计算机的最小单元是byte,那么在这个类中是怎么做的呢?将一个字节进行8次移位按位与运算,就得到了这个字节的8个bit的表示方式。三代码哈夫曼树类package 哈弗曼压缩;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.util.PriorityQueue;public class HuffmanTree {private CharCounter theCounts;//字符统计类对象private HuffNode root;//根结点private HuffNode[] theNodes=new HuffNode[BitUtils.DIFF_BYTES+1];//存储HuffNode的数组public static final int ERROR=-3;//错误public static final int INCOMPLETE_CODE=-2;//不完全的结点编码public static final int END=BitUtils.DIFF_BYTES;//字节的溢出位/** * 实例化一个字符统计类对象 */public HuffmanTree(){theCounts=new CharCounter();root=null;}/** * 可以通过CharCounter对象来创建一个huffmanTree对象 * @param cc CharCounter对象 */public HuffmanTree(CharCounter cc){theCounts=cc;root=null;createTree();//创建HuffmanTree}/** * 得到要寻找的字符编码所在的树结点,如果该字符不在树上,则返回null表示出错,否则,通过父亲链逆向查找,直到到达根结点 * @param ch 当前结点的下标 * @return 结点相对的字符编码数组 */public int[] getCode(int ch){HuffNode current=theNodes[ch];if(current==null)return null;String v=;//结点的编码HuffNode parent=current.parent;while(parent!=null){if(parent.left==current)v=0+v;//左结点编码else v=1+v;//右结点编码//向下遍历current=current.parent;parent=current.parent;}int len=v.length();int [] result=new int[len];//创建一个与编码相同大小数

文档评论(0)

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

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

1亿VIP精品文档

相关文档