文件压缩与解压实验报告计算机Web服务_计算机-linux-Unix相关.pdf

上传人:c****2 文档编号:95520408 上传时间:2023-08-25 格式:PDF 页数:10 大小:374.35KB
返回 下载 相关 举报
文件压缩与解压实验报告计算机Web服务_计算机-linux-Unix相关.pdf_第1页
第1页 / 共10页
文件压缩与解压实验报告计算机Web服务_计算机-linux-Unix相关.pdf_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《文件压缩与解压实验报告计算机Web服务_计算机-linux-Unix相关.pdf》由会员分享,可在线阅读,更多相关《文件压缩与解压实验报告计算机Web服务_计算机-linux-Unix相关.pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 院 系:计 算 机 学 院 实验课程:实验 3 实验项目:文本压缩与解压 指导老师:开课时间:2010 2011 年度第 1 学期 专 业:班 级:学 生:学 号:一、需求分析 1.本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能。2.友好的图形用户界面,直观明了,每一个操作都有相应的提示,用户只需按着提示去做,便能轻松实现编码以及译码的效果,编码及译码结果都被保存成 txt文档格式,方便用户查看。3.本程序拥有极大的提升空间,虽然现在只能实现对大写字母的译码以及编码,但通过改进鉴别的算法,即能够实现小写字母乃至其他特殊符号等的编码。4.本

2、程序可用于加密、解密,压缩后文本的大小将被减小,更方便传输 5.程序的执行命令包括:1)初始化 2)编码 3)译码 4)印代码文件 5)印哈弗曼树 6)退出 6.测试数据(1)THIS PROGRAM IS MY FAVOURITE(2)THIS IS MY FAVOURITE PROGRAM BUT THE REPORT IS NOT 二、概要设计 为实现上述功能,应有哈弗曼结点,故需要一个抽象数据类型。1.哈弗曼结点抽象数据类型定义为:ADT HaffTree 数据对象:HaffNode*ht,HaffCode*hc 基本操作:Haffman(int w,int n)操作结果:构造哈弗曼树

3、及哈弗曼编码,字符集权值存在数组 w,大小为 n setdep()setdep(int p,int l)操作结果:利用递归,p 为哈弗曼节点序号,l 为哈弗曼节点深度 setloc()操作结果:设置哈弗曼节点坐标,用以输出到界面 setloc2()操作结果:设置哈弗曼节点坐标,用以输出到文本,默认状态下不启用 ADT HaffTree 2.本程序包含 4 个模块 1)主程序模块:接受用户要求,分别选择执行初始化编码译码印代码文件印哈弗曼树 退出 2)哈弗曼树单元模块建立哈弗曼树 3)哈弗曼编码单元模块进行哈弗曼编码、译码 4)响应用户操作,输出内容到界面或文本 各模块之间的关系如下:析本程序能

4、够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本默认状态下不启用本程序包 三

5、、详细设计 1.全局变量、结点 int m_gcharnum;弗曼树的实现 eight=wi;else hti.weight=0;arent=0;child=-1;child=-1;eightm1&htj.parent=0)eight;x1=j;else if(htj.weightm2&htj.parent=0)eight;x2=j;htx1.parent=n+i;htx2.parent=n+i;htn+i.weight=htx1.weight+htx2.weight;htn+i.lchild=x1;hthtn+i.lchild.k=0;child=x2;hthtn+i.rchild.k=1;

6、eight;child=i;parent=htchild.parent;while(parent!=0)child=child)=0;else =1;child=parent;parent=htchild.parent;for(j=+1;jMoveTok.x+4,k.y);pDC-LineTok.lchild.x+4,k.lchild.y);ifk.rchild!=-1)pDC-MoveTok.x+4,k.y);pDC-LineTok.rchild.x+4,k.rchild.y);endl;eightendl;arentendl;childendl;childc;i.s=c;析本程序能够实现将

7、一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本默认状态下不启用本程序包 fipwi

8、;arent;child;child;xt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path1=();xt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path2=();UpdateData(FALSE);ofstream sff(m_path2);i+;for(j=i.start+1;jm_gcharnum;j+)sffi.bitj;xt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path1=();UpdateData(FALSE);AfxMessageBox(译码成功,请

9、保存!);CFileDialog hFileDlg1(false,NULL,NULL,OFN_FILEMUSTEXIST|OFN_READONLY|OFN_PATHMUSTEXIST,TEXT(文档文本(*.txt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path2=();UpdateData(FALSE);ifstream ldf(m_path1);child;if(c=0)child;ifi.lchild=-1&i.rchild=-1);i=2*m_gcharnum-2;();();else AfxMessageBox(您尚未执行初始化操作!请先执

10、行初始化操作!);析本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本

11、默认状态下不启用本程序包 xt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path=();UpdateData(FALSE);ofstream saf(m_path);/*();n;else d+;break;if(d=p.dep)for(t1;t1t2-1;t1+)saf;ifp.s=|p.s=)saf0;child!=-1)p.lchild);if(htp.rchild!=-1)p.rchild);t1+=2;else d+;safendl;t1=0;t2=0;child;ep-1);f+)saf;endl;child;);CString str1;

12、GetDlgItemText(IDC_EDIT1,str1);xt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path=();UpdateData(FALSE);CFile file1(m_path,CFile:modeRead);char*pBuf;int iLen=();pBuf=new chariLen+1;(pBuf,iLen);pBufiLen=0;();析本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及

13、译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本默认状态下不启用本程序包 SetDlgItemText(IDC_EDIT1,pBuf);xt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path=();UpdateDat

14、a(FALSE);CFile file;(m_path,CFile:modeCreate|CFile:modeWrite);CString strValue;GetDlgItemText(IDC_EDIT1,strValue);xt)|*.txt|所有文件(*.*)|*.*|),NULL);AfxMessageBox(请选择刚才输入的内容所要保存到的位置!);if()=IDOK)m_path=();UpdateData(FALSE);CFile file;(m_path,CFile:modeCreate|CFile:modeWrite);CString strValue;GetDlgItemT

15、ext(IDC_EDIT1,strValue);xt)|*.txt|所有文件(*.*)|*.*|),NULL);if()=IDOK)m_path2=();UpdateData(FALSE);ifstream ldf(m_path,ios:in);i+;for(j=i.start+1;jm_gcharnum;j+)sffi.bitj;AfxMessageBox(代码文件已保存成功!);CDialog:OnOK();4.函数的调用关系图反映了演示程序的层次结构 Main(主窗口、主文档)初始化 OnHandinput OnAutoget 编码 OnEncodinghinput OnEncoding

16、ainput 译码 OnDecoding 印代码文件 OnPte 印哈弗曼树 OnPhafftree Haffman Setdep setloc 析本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为

17、操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本默认状态下不启用本程序包 四、调试分析 1.由于一开始时候编写的时候没有注意使用面向对象的思想,并没有建立哈弗曼树类,程序完成后才将其转为面向对象的方式,修改仓促,因而使得哈弗曼树类丧失了封装性。2.由于对 CString、string这两种类型不甚熟悉,在实现一些功能,例如输出到界面、输出到文本并且要求控制格式的时候,都屡屡碰壁,即使是现在的输出函数的实现亦未臻于完美。3.在编写本程序的过程中,虽然借鉴了很多功能,美化了界面,但用户界面的设计以及一些功能的实现仍缺乏

18、人性化,而且,在核心程序上并无过多改进,效率与效果都没有提升,反显得本末倒置。4.算法的时空分析 1)生成哈弗曼树以及编码的函数 在该函数里面,有六个循环体,其中有两次属于循环体嵌套的状况,每次这种情况出现时,都是两次的嵌套,所以该函数的时间复杂度为O(n2),由此看来耗费的时间是比较多的。2)实现哈弗曼树输出的函数 这一函数包括了三个部分,一个是设置结点深度的函数 setdep(),另一个为设置结点坐标函数 setloc(),还有就是本身的程序。先在逐一分析:对于 setdep(),利用的是递归思想,现进行估算,设树高为 n,且一个结点占据一层,即有 n 个结点,在这种情况下,求第一个结点时

19、,最后一个结点需要被调用 n-1 次,求第二个结点时,最后一个结点需要调用 n-2 次,故对最后一个结点而言,执行完递归操作,它共计被调用 1+2+3+n-1 即 n*(n-1)/2次,而它的前一个结点被调用次数将少它一次,故一共要用的时间 T=1+2+n*(n-1)/2即 n2*(n-1)2/8+n*(n-1)/4,故时间复杂度为 O(n4),耗费时间巨大。对于 setloc(),用了三个循环,其中包含一个二次循环嵌套,所以时间复杂度为 O(n2)。上述两个函数都用了一些变量来做存储,求深度函数需要记录各个结点的深度,而求坐标则需要记录每个结点的坐标,这些都使程序动用了更多的空间。五、用户手

20、册 1.本程序的运环境为Windows操作系统,执行文件为 2.进入演示程序后即显示用户界面 3.选择手动输入可手动输入字符集,当然也可以自动读取字符集 4.选择编码,则有两个选项手动输入、从文件中读取。析本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概

21、要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本默认状态下不启用本程序包 5.选择手动输入,则弹出对话框,可在编辑框里面编辑。6.选择从文件中读取,需要先打开需要读取的文件。7.编码完毕后,要保存代码文件。8.之后就可以选择译码操作了,同样是需要选择译码文件以及保存译码结果到另一个文件。9.执行印代码操作,则弹出对话框,按按钮读取文本,可将文本中的内容读入到编辑框中显示,选择保存文本,可将编辑框内容保存到自定义文本。10.印哈弗曼树操作同样有两个选项,一个是

22、在当前界面显示树,另一个将树保存到文件当中。六、测试结果 1.执行初始化操作,选择手动输入,根据提示依次输入字符集大小、空格权值以及各字符及其权值,生成。选择自动输入从现有的从读取字符集及其权值。2.执行编码操作,选择手动输入,弹出对话框,在编辑框里输入测试数据1 并保存文档,打开保存文档能看到测试数据 1。选择从文本中读取操作后,可从中读取数据,默认为测试数据 2 的数据。最后生成代码文件。将测试数据 1 编码后得到的编码为:000010 编码成功。3.执行译码操作,选择刚才保存的文本,翻译结果保存到自定义文本中,在该测试中被保存至中,译码测试数据 1 之后,中的内容为:THIS PROGR

23、AM IS MY FAVOURITE,可见译码成功。4.选择印代码文件操作,按下读取文件按钮,读取文档,则其内容显示到编辑框里面,按保存文件,将显示的内容保存到自定义文档中,默认为,输出格式为每行 50 个字符。以下是测试数据 2 在中的情况:001 00001000101 00 00001010010 0001101 由于测试数据 2 里面含有换行符,所以第三行还没有够 50 个字符便换行了。5.执行印哈弗曼树操作,选择显示哈弗曼树,则哈弗曼树显示到界面,选择保存哈弗曼树,则哈弗曼树以凹入表方式保存于自定义文档中。6.执行退出操作,退出程序。七、附录 析本程序能够实现将一段由大写字母组成的内

24、容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本默认状态下不启用本程序包原程序文件名清单:/输入空格权值对

25、话框实现单元 /输入各字符权值对话框实现单元 /输入字符集大小对话框实现单元 /打印代码文件对话框实现单元 /编码对话框实现单元 /哈弗曼树结点与代码结点定义单元 /主窗口实现单元 /资源类实现单元 /用户界面及画图实现单元 析本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能友好的图形用户界面直观明了每一个操作都有相应的提示用户只需按着提示去做便能轻松实现编码以及译码的效果码以及编码但通过改进鉴别的算法即能够实现小写字母乃至其他特殊符号等的编码本程序可用于加密解密压缩后文本的大小将被减小更方便传输程序的执行命令包括初始化编码译码印代码文件印哈弗曼树退出测试数据二概要设计为果构造哈弗曼树及哈弗曼编码字符集权值存在数组大小为操作结果利用递归为哈弗曼节点序号为哈弗曼节点深度操作结果设置哈弗曼节点坐标用以输出到界面操作结果设置哈弗曼节点坐标用以输出到文本默认状态下不启用本程序包

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁