huffman编码与解码实现文件压缩与解压缩(编辑修改稿)内容摘要:
等长编 码所对应的编码二叉树也可以直接看出,任何一个叶子结点都不可能是其它叶子结点的双亲,也就是说,只有当一个结点是另一个结点的双亲时,该结点的字符编码才会是另一个结点的字符编码的前缀。 为了使不等长编码为前缀编码,可用该字符集中的每个字符作为叶子结点生成一棵编码二叉树,为了获得文件的最短长度,特将每个字符的出现频率作为字符结点的权值赋予该结点上,求出此树的最小带权路径长度就等于文件的最短长度。 因此,对文件进行压缩,就可以转化字符集中的所有字符作为叶子结点,字符出现的频率作为权值所产生的 huffman 树的问题。 基 本思路大致有了后,接下来是对程序的编写工作,程序初步形成后,对其测试,发现了一些变量还没有声明的错误,对遗漏的变量进行了声明后,再次调试,发现一个比较大的问题,就是字符都能读入,但是不能进行编码,也即不能构造 huffman 树,最后经过检查发现原来是结点方面存在问题,最后加入sum=2*count1。 语句,问题得到解决。 (该语句的作用是:例如提供了 3 个权值不同的结点,现在要构造 huffman 树,那就需要 5 个结点。 ) 五、用户使用说明 用户运行本程序前,首先要在起工程文件下建立一个名字为 文本文档,再运行本程序后,第一步,按任意键来读取建立的 文本文档 ,再据程序中提示完成第二步操作,也即是讲压缩的文件以 Huffman 编码放入一个由用户自己建立的文本文档中,接着再根据提示完成第三步操作,即对要压缩的文件解压后放入由用户建立的任意名的文本文档中,由此完成操作。 六、测试结果 数据结构与算法课程设计 被编码(部分字符): 被解码(部分文件): 数据结构与算法课程设计 七、参考书目 [1]徐孝凯 .数据结构实用教程 (c/c++描述 )[M].北京:清华大学出版社,2020 年 6 月 [2]郑莉等 .c++语言程序设计 (第三版 )[M].北京:清华大学出版社, 2020 年12月 八、附录 includeiostream includefstream includestring includeiomanip using namespace std。 string remfile[600000]。 //存放原文件字符的数组 int remcount=0。 //记录元素个数 float bitecount=0。 //记录二进制码的个数 struct huffchar{ //存放读 入字符的类 int count。 //字符出现的个数 char data。 //字符 }。 int count=1。 //记录 huff 数组中字符实际出现的个数 huffchar huff[1000]。 //类的对象 //文件读入部分和统计字符出现的频率 bool char_judge(char c)//判断字符出现的函数 { 数据结构与算法课程设计 for(int i=1。 i=count。 i++) if(huff[i].data==c){huff[i].count++。 return true。 }//如果出现过,出 现的频数加1 return false。 } void char_add(char c)//添加新出现的字符; {huff[count].data=c。 huff[count++].count++。 //个数增加 } //文件的读取 void read_file_count() {char c。 ifstream infile。 ()。 //打开 文件 if(!infile)//检查文件是否打开。 {cout不能打开 文件。 //输出文件未打开的标志 exit(0)。 } cout读入的文件中的内容为: endl。 while((c=())!=EOF)//EOF 是文件结束的标志 {remfile[++remcount]=c。 //recount 记录元素个数 if(!char_judge(c)) char_add(c)。 } coute。huffman编码与解码实现文件压缩与解压缩(编辑修改稿)
相关推荐
,否则会在电源和地之间形成短路。 比如 A和 C或者 B和 D 同时为 1. 半导体 H 桥: 现在我们来讨论使用场效应管连接的 H桥。 这是我们实际使用的 H桥电路的真正形式。 我们现在不需要在继电器两端接二极管了,不过还是要在控制管两端接。 下图是电路图。 在图上我们看到晶体管代替了继电器。 在高位的晶体管必须是 PNP型三极管或者 P沟道场效应管;低位的晶体管必须是 NPN型三极管或者
受数据的其它字 节并释放时钟 SCL后,数据传输继续进行。 I2C数据总线传送时序如图 2。 图 2 总线数据传送顺序 数据传送具有应答是必须的。 与应答对应的时钟脉冲由主控器产生,发送器在应答期间必须下拉 SDA线。 当寻址的被控器件不能应答时,数据保持为高,接着主控器产生停止条件终止传输。 在传输的过程中,当用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器
1 月 17 日 1. 讲美国学校在评成绩的时候考虑多种因素, 增加学习效率。 Speaker 反对 a. attendance: 文章说将 attendance 加入平分可以提高学习积极性 Speaker 说不尽然, 很多学生上课不听课的, sleeping, daydreaming 什么的,还有一种情况更糟糕, 有些人因为生病考勤不好, 这些人就失去学习信心了,因为不管怎么努力都得不了高分
/* private data for the adapter */ struct semaphore lock。 unsigned int flags。 /* flags specifying div. data */ struct i2c_client *clients[I2C_CLIENT_MAX]。 int client_count。 int timeout。 int retries。
Enter port 1012 tag typQ) [none]: Enter VLAN Name {?} []: 5A Menu options (Corebuilder 90005225FF): summary Display summary information detail Display detail information define Define a VLAN modify
init(PageContext pc) 初始化 public Enumeration getFiles() 获取 UploadFile 对象集合 public int getFileCount() 获取 UploadFile 对象数量,即上传文件数 public Enumeration getParameterNames() 获取非文件类型变量名集合 public String[]