欢迎来到天天文库
浏览记录
ID:12139835
大小:117.50 KB
页数:10页
时间:2018-07-15
《算法设计与分析课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、算法设计与分析课程设计2021-6-24压缩软件课程设计书一、问题描述:建立一个文本文件,统计该文件中各字符频率,对各字符进行Huffman编码,将该文件至翻译成Huffman编码文件,再将Huffman编码文件翻译成原文件。二、算法分析及思路:对于该问题,我们做如下分析:(1)首先得构造出哈弗曼树,我们用函数HuffmanTree(intw[],ints[],intn)设计;(2)在构建哈弗曼树的基础上,进一步实现哈弗曼编码问题,我们用函数Huffmancode(charwen[])设计;(3)实现哈弗曼编码后
2、再进一步实现哈弗曼译码问题,我们用函数Huffmandecode()设计;(4)其中编码问题中,得进一步统计出各个字符在文件中的频率,并进行一些必要的标记,我们用函数runhuffman(charwen[])设计;(5)在译码过程中,还有必要的一步是比较原文件与译码后的文件是否相同,我们用函数compare(charwen[])设计;(6)其中的文件输入我们用到类”fstream.h”中的输入输出流,并在运行的文件夹中建立一个文件名为逍遥游的文本文件,且在逍遥游文件中输入需要编码的数据。三、主要解决的设计问题:1
3、.写一个对txt文件压缩和解压的程序,使用动态编码。2.使用Huffman编码压缩和解压时,Huffman树的存储可以直接存储树结构,也可以存储所有字符的频度或权值,然后读取时建立Huffman树;3.使用Huffman编码压缩和解压时,注意定义压缩码的结束标记,可以使用一个特殊的字符作为结束标记,也可以在压缩码之前存储其比特长度;如果使用一个特殊字符作为结束标记,则其频度为1,需要在建立Huffman树时把它看作一个独立的字符进行建树。4.使用Huffman编码压缩和解压时,在一个缓冲区里面收集压缩码比特流,每
4、当收集的比特数满8时,可以把这8比特通过位操作合并成一个字节写入文件(当然也可以收集满一定数目的字节后再写入文件)。写入文件的最小信息单位为字节。四、程序设计的流程图:创建时间:2013-08-25算法设计与分析课程设计2021-6-24统计字符,得出统计出的字符的权值n根据权值进行建立哈弗曼树输出哈弗曼树生成二进制文件主函数编码输出编码压缩编码解码解压生成新的文本文档退出建立哈弗曼树输出哈弗曼树根据哈弗曼树编码根据哈弗曼树解码对二进制文件进行解压生成文本文档输出编码对编码进行压缩生成二进制文件创建时间:2013
5、-08-25算法设计与分析课程设计2021-6-24五、输入和输出说明:1、数据输入:由文件input.txt提供输入需要压缩的内容;2、结果输出:将压缩好的文件内容输出到《编码后的文件.txt》中,再由《编码后的文件.txt》解压到《译码后的文件.txt》中。六、程序及其注解:1、数据结构设计(即类的设计,包括类的数据成员、函数成员)类的设计用HuffmanTree.h保存如下:#include#includeusingnamespacestd;constintMaxSiz
6、e=512;//--------------------------------------------------------------structelement//哈夫曼树的结点{intstr;//记录字符在数组中的位置intweight;//字符出现频率(权值)intlchild,rchild,parent;//哈夫曼树各个指针变量charbits[30];//存储哈夫曼编码的数组};//-----------------------------------------------------------
7、---classHuffmanTree{elementhufftree[MaxSize];//存放哈夫曼树结点的数组intnum;//结点数public:HuffmanTree(intw[],ints[],intn);voidSelect(intn,int&s1,int&s2);voidHuffmancode(charwen[]);//哈夫曼编码voidHuffmandecode();//哈夫曼译码};//------------------------------------------------------
8、--------classRun{创建时间:2013-08-25算法设计与分析课程设计2021-6-24public:voidhuffman(charwen[]);//将编码后的文件译成原文件voidrunhuffman(charwen[]);//统计各字符频率voidcompare(charwen[]);//比较逍遥游文件和译码后的文件};//-------------
此文档下载收益归作者所有