文件压缩与解压实验报告

合集下载

压缩实验实验报告

压缩实验实验报告

压缩实验实验报告压缩实验实验报告引言:压缩实验是一种常见的实验方法,用于研究材料在不同压力下的性质和行为。

通过对材料进行压缩,可以观察到其体积、密度、弹性等性质的变化,对于了解材料的力学性质和应用领域具有重要意义。

本实验旨在通过对不同材料的压缩实验,探究其压缩性能和变化规律。

实验材料和方法:本实验选取了三种常见的材料:橡胶、铝和钢。

实验所需的仪器设备包括压力计、压力传感器、压力控制器和压缩装置。

首先,将待测材料放置在压缩装置中,确保其表面光滑平整。

然后,通过调节压力控制器,逐渐增加压力,同时记录下相应的压力和变形数据。

最后,根据实验数据进行分析和总结。

实验结果和讨论:1. 橡胶的压缩性能:实验结果显示,橡胶在受到压力时具有较大的变形能力。

随着压力的增加,橡胶的体积逐渐减小,密度逐渐增大。

这是因为橡胶具有较好的弹性,能够在受力后迅速恢复原状。

此外,橡胶的压缩性能还与其材料结构和成分有关。

例如,硅橡胶由于其高弹性和低压缩变形率,广泛应用于密封件、减震器等领域。

2. 铝的压缩性能:与橡胶相比,铝的压缩性能表现出截然不同的特点。

实验结果显示,铝在受到压力时体积变化较小,密度变化也相对较小。

这是因为铝具有较高的强度和刚性,能够承受较大的外力而不发生明显的变形。

铝的压缩性能使其成为一种重要的结构材料,广泛应用于航空、汽车、建筑等领域。

3. 钢的压缩性能:钢是一种具有高强度和高韧性的材料,其压缩性能也与铝类似。

实验结果显示,钢在受到压力时体积变化较小,密度变化也相对较小。

这是由于钢具有较高的屈服强度和延展性,能够在受力后保持相对稳定的形状。

钢的压缩性能使其成为一种重要的结构材料,广泛应用于桥梁、机械设备、船舶等领域。

结论:通过对橡胶、铝和钢的压缩实验,我们可以得出以下结论:1. 不同材料在受到压力时具有不同的变形能力和性质表现。

2. 橡胶具有较好的弹性和压缩变形能力,适用于需要密封和减震的领域。

3. 铝具有较高的强度和刚性,适用于需要轻量化和结构稳定的领域。

【报告】多媒体数据压缩实验报告

【报告】多媒体数据压缩实验报告

【关键字】报告多媒体数据压缩实验报告篇一:多媒体实验报告_文件压缩课程设计报告实验题目:文件压缩程序姓名:指导教师:学院:计算机学院专业:计算机科学与技术学号:提交报告时间:20年月日四川大学一,需求分析:有两种形式的重复存在于计算机数据中,文件压缩程序就是对这两种重复进行了压缩。

一种是短语形式的重复,即三个字节以上的重复,对于这种重复,压缩程序用两个数字:1.重复位置距当前压缩位置的距离;2.重复的长度,来表示这个重复,假设这两个数字各占一个字节,于是数据便得到了压缩。

第二种重复为单字节的重复,一个字节只有256种可能的取值,所以这种重复是必然的。

给256 种字节取值重新编码,使出现较多的字节使用较短的编码,出现较少的字节使用较长的编码,这样一来,变短的字节相对于变长的字节更多,文件的总长度就会减少,并且,字节使用比例越不均匀,压缩比例就越大。

编码式压缩必须在短语式压缩之后进行,因为编码式压缩后,原先八位二进制值的字节就被破坏了,这样文件中短语式重复的倾向也会被破坏(除非先进行解码)。

另外,短语式压缩后的结果:那些剩下的未被匹配的单、双字节和得到匹配的距离、长度值仍然具有取值分布不均匀性,因此,两种压缩方式的顺序不能变。

本程序设计只做了编码式压缩,采用Huffman编码进行压缩和解压缩。

Huffman编码是一种可变长编码方式,是二叉树的一种特殊转化形式。

编码的原理是:将使用次数多的代码转换成长度较短的代码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。

根据ascii 码文件中各ascii 字符出现的频率情况创建Huffman 树,再将各字符对应的哈夫曼编码写入文件中。

同时,亦可根据对应的哈夫曼树,将哈夫曼编码文件解压成字符文件.一、概要设计:压缩过程的实现:压缩过程的流程是清晰而简单的: 1. 创建Huffman 树 2. 打开需压缩文件3. 将需压缩文件中的每个ascii 码对应的huffman 编码按bit 单位输出生成压缩文件压缩结束。

压缩实验报告数据分析

压缩实验报告数据分析

压缩实验报告数据分析1. 引言本文对压缩实验的数据进行了分析和总结。

压缩是一种常见的数据处理技术,通过减少文件的大小,可以提高存储和传输效率。

本实验旨在探究不同压缩算法对不同类型的数据的效果以及压缩率的变化情况。

2. 数据收集和实验设计在本实验中,我们收集了不同类型的数据文件,包括文本文件、图像文件和音频文件。

我们选择了三种常用的压缩算法,分别是gzip、zip和tar。

每个数据文件都分别用这三种算法进行了压缩,并记录了压缩前后的文件大小。

实验设计如下: - 数据收集:从不同来源收集文本、图像和音频文件。

- 压缩算法选择:选择gzip、zip和tar作为压缩算法。

- 压缩实验:分别使用这三种压缩算法对每个数据文件进行压缩。

- 数据记录:记录每个文件的原始大小和压缩后的大小。

3. 数据分析3.1 压缩率分析首先,我们对每个数据文件进行了压缩率的计算。

压缩率表示压缩后文件大小与原始文件大小的比值,可以反映出压缩算法的效果。

表格1:不同数据文件的压缩率文件名gzip压缩率zip压缩率tar压缩率文本文件0.4 0.3 0.35图像文件0.6 0.5 0.55音频文件0.2 0.15 0.18从表格1中可以看出,不同类型的数据文件在不同的压缩算法下的压缩率有所不同。

图像文件的压缩率相对较高,而音频文件的压缩率相对较低。

3.2 压缩算法效果比较接下来,我们对不同压缩算法在同一类型的数据文件上的效果进行了比较。

我们选择了文本文件进行分析。

图表1:文本文件的压缩率比较压缩算法效果比较压缩算法效果比较从图表1中可以看出,gzip算法在文本文件的压缩上表现最好,其次是tar算法,zip算法的效果相对较差。

4. 结论通过本次实验的数据分析,我们得出了以下结论: - 不同类型的数据文件在不同的压缩算法下的压缩率有所不同。

- 对于文本文件,gzip算法表现最好,zip算法效果相对较差。

压缩算法的选择应该根据具体的应用场景和需求来进行,综合考虑压缩率和解压缩速度等因素。

大学计算机实验二实验报告

大学计算机实验二实验报告

3) 添加应用程序桌面图标。点击开始,在菜单中点击“所有应用”,找到需要添加的应用, 直接按住该应用并拖到桌面空白处即可
4) 删除桌面图标。在需要删除的桌面图标上单击鼠标右键,在弹出的菜单中选择删除即可
二. 文件管理 1.隐藏文件或文件夹及显示隐藏的文件或文件夹。 1)对着需要隐藏的文件单击右键,在弹出的快捷窗口中单击“属性”。 2)在“常规”选项下找到“属性”单击“隐藏”点击“确定”,选择“将更改应用于此文件夹 、子文件夹和文件”后,点击“确定”即可。
1) 打开“开始”菜单,输入“控制面板”命令打开控制面板,在控制面板内选择“日期和时
间”弹出的对话框内选择“日期和时间选项卡”,更改日期、时间、时区后点击确定即可达 到更改日期、时间、时区的目的。
2) 也可在控制面板内选择“Internet 时间选项卡”,在弹出的对话框内勾选与“Internet 时间服 务器”同步,并且在服务器的下拉列表框中选择第一个选项,点击确定即可
实验过程及内容: 一. 基础操作 1. 设置桌面背景 1) 在桌面的没有桌面图标的区域单击鼠标右键,并在出现的快捷菜单中单点击“个性化”。
2) 单击“背景”。打开“背景”后,可以看见个性化设置背景。
3) 在下方的“最近使用的图像”中任意单击一张图片即可将桌面背景设置为此图片。
注:也可在第三步中点击“浏览照片”并选择自己喜欢的图片做为桌面背景。 2. 调整计算机系统的日期和时间
3. 设置桌面图标 1) 添加文件或文件夹图标。鼠标右键点击需要添加快捷方式的文件,选择“显示更多选项”, 在弹出的菜单中选择“发送到”,在弹出的新菜单中点击“桌面快捷方式”即可。 2) 添加系统图标。在设置中找到“个性化”选修卡,点击“主题”选项,点击“桌面图标设 置”在弹出的对话框内勾选需要的桌面图标点击确定即可完成设置。

数据压缩实验报告

数据压缩实验报告

实验一常见压缩软件的使用一、实验目的使用一些常见的压缩软件,对数据压缩的概念、分类、技术和标准形成初步的认识和理解。

二、实验要求1.认真阅读实验指导书,按实验步骤完成实验内容。

2.实验过程中注意思考实验提出的问题,并通过实验解释这些问题。

3.通过实验达到实验目的。

三、实验环境计算机硬件:CPU处理速度1GHz以上,内存258M以上,硬盘10G以上软件:Windows操作系统2000或XP。

四、实验内容1.使用WinZip或WinRAR两种压缩软件分别对文本文件(.txt,.doc)、程序源代码文件(.c)、数据文件(.dat)、二进制目标代码文件(.obj)、图像文件(.bmp)、音频文件(.wav)和视频文件(.avi,.wmv)进行压缩,分别计算出压缩率,判断这两种压缩软件采用的是可逆压缩还是不可以压缩,猜测其可能用到了那些压缩(编码)技术?2.使用jpegimager、TAK和BADAK分别进行图像、音频和视频的压缩,体验其压缩效果。

3.使用bcl程序对文本文件、程序源代码文件、数据文件、二进制目标代码文件、图像文件等进行多种统计编码技术的压缩,包括香农-费诺(shannon-fano)编码、霍夫曼(huffman)编码、游程编码rle、字典编码lz等,记录每种压缩方法对不同类型文件的压缩效果并进行比较,结合所学知识,解释其中的原因。

五、实验步骤1、下载并打开WinZip和WinRAR两种压缩软件2、分别新建两个文档:qqjj.winzip 和winrar。

添加所要压缩的文件:文本文件(.txt,.doc)、程序源代码文件(.c)、数据文件(.dat)、二进制目标代码文件(.obj)、图像文件(.bmp)、音频文件(.wav)和视频文件(.avi,.wmv)进行压缩,如图所示:3、WinZip压缩软件可以直接看出各文件的压缩率,而winrar压缩软件不能直接看出各文件的压缩率,要在winrar压缩软件的屏幕上只显示一个压缩文件时,右健该压缩文件,点击显示信息方可看到该压缩文件的压缩率。

文件管理实验报告结果(3篇)

文件管理实验报告结果(3篇)

第1篇一、实验目的本次实验旨在通过实际操作,验证文件管理的有效性和可行性,并对文件管理系统的性能进行评估。

通过实验,了解文件管理的相关原理和方法,提高文件管理的实践能力。

二、实验环境1. 操作系统:Windows 102. 文件管理系统:Windows文件管理器3. 实验数据:实验过程中产生的文件和数据三、实验内容1. 文件创建与删除2. 文件夹创建与删除3. 文件与文件夹的复制、移动、重命名4. 文件属性的设置与修改5. 文件搜索与查找6. 文件权限管理7. 文件压缩与解压四、实验步骤1. 文件创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件.txt”的文本文件。

(2)在“实验文件.txt”上右击,选择“删除”,确认删除。

2. 文件夹创建与删除(1)在Windows文件管理器中,新建一个名为“实验文件夹”的文件夹。

(2)在“实验文件夹”上右击,选择“删除”,确认删除。

3. 文件与文件夹的复制、移动、重命名(1)将“实验文件.txt”复制到“实验文件夹”中。

(2)将“实验文件.txt”移动到桌面。

(3)将“实验文件.txt”重命名为“实验文件修改.txt”。

4. 文件属性的设置与修改(1)在“实验文件修改.txt”上右击,选择“属性”,设置文件属性为“只读”。

(2)修改“实验文件修改.txt”的属性为“隐藏”。

5. 文件搜索与查找(1)在Windows文件管理器中,输入“实验文件”进行搜索。

(2)使用“查找”功能,查找“实验文件修改.txt”。

6. 文件权限管理(1)在“实验文件夹”上右击,选择“属性”,点击“安全”标签。

(2)添加用户权限,设置权限为“完全控制”。

7. 文件压缩与解压(1)将“实验文件夹”压缩为“实验文件夹.zip”。

(2)解压“实验文件夹.zip”到指定位置。

五、实验结果与分析1. 文件创建与删除:实验成功创建和删除了文件,验证了文件管理的可行性。

2. 文件夹创建与删除:实验成功创建和删除了文件夹,验证了文件管理的可行性。

文件压缩与解压缩实践

文件压缩与解压缩实践

文件压缩与解压缩实践摘要随着人们对数据的大量需求以及计算机使用时间的增加,计算机磁盘上的文件越来越大,越来越多。

如何让有限的磁盘空间容纳更多的数据成为需要解决的问题。

一方面,高速发展的存储技术以提高磁盘容量来解决这样的需求,但随着网络环境下数据传递的产生以及带宽的限制,大容量数据问题日益突出。

在这两种需求的推动下,对数据压缩的需求产生了。

人们可以将文件在不改变其本身的条件下,将其以更小的占用空间存储,并且在需要的时候将文件恢复成原有的样子,这就是压缩目的。

本论文主要研究文件的无损压缩技术,并简要介绍了文件压缩的分类、几种常用的无损压缩格式和常用的压缩算法。

运用LZ77字典算法、懒惰匹配算法和Huffman编码算法,使用Java语言在Jbuilder2006环境下设计了使用GZIP算法对文件压缩与解压缩的实现程序。

用户可以根据自己的需求,使用此程序方便地对文件进行压缩或者解压缩操作。

关键词:压缩;解压缩;GZIP;JavaPractice of File Compression and DecompressionAbstractAs the great demand for data and the using time of computer are increasing, computer files on the disk grow more and more. How to make the limited disk space to store more data has became a problem crying out for solutions. On one hand, the rapid development of storage technology that can increase the disk capacity, can meet such demand. However, with the emergence of data transmission in a network environment and the bandwidth limitations, the problem of large-capacity data is increasingly prominent. With the promotion of both demands, the need for data compression and decompression is generated. People can store a file with a smaller storage space without changing the file’s own condition, and can restore the file; that is the purpose of data compression and decompression. This treatise principally research file lossless compression, otherwise, briefly introduced classification of file compression, some general lossless compression format and general compression algorithm. A procedure within algorithm called GZIP were designed for file compression and decompression in Java language under the circumstances of Jbuilder2006,which used LZ77 dictionary algorithm, lazy match algorithm and Huffman coding algorithm. Users could use this procedure compress or decompress files expediently according to their demand.Key words: Compression; Decompression; GZIP; Java目录论文总页数:21页1 引言 (1)1.1课题背景 (1)1.2国内外现有的研究成果 (1)2 压缩与解压缩程序分析 (2)2.1需求分析 (2)2.2使用的算法理论 (2)2.2.1 LZ77算法简介 (2)2.2.2 Huffman算法简介 (3)2.2.3 GZIP算法原理分析 (4)2.3开发环境 (4)3 总体设计 (4)3.1程序功能模块 (5)3.2模块分析与流程图 (5)3.2.1 压缩模块 (5)3.2.2 解压缩模块 (6)3.3程序中各个类的初步定义 (7)4 详细设计和实现 (8)4.1 压缩的程序流程 (8)4.2 解压缩的程序流程 (9)4.3 主函数代码 (10)4.3.1 gzip压缩模块代码 (10)4.3.2 ungzip解压缩模块代码 (11)4.4 程序界面设计 (12)5 软件系统测试 (17)5.1 运行环境 (17)5.2 测试方法 (17)5.3 测试结果 (17)5.3.1 使用程序对txt文件压缩 (17)5.3.2 使用程序对bmp图象文件压缩 (18)5.3.3 使用程序对doc文件压缩 (18)结论 (19)参考文献 (19)致谢 (20)声明 (21)1引言1.1课题背景随着科学技术的进步,信息技术越来越广泛地应用到社会的各个行业和领域,互联网深刻地改变着人们的生活方式,推动着人类文明的进步。

用哈夫曼编码实现文件压缩实验报告【管理资料】

用哈夫曼编码实现文件压缩实验报告【管理资料】

《用哈夫曼编码实现文件压缩》实验报告课程名称数据结构B 实验学期 2013 至 2014 学年第一学期学生所在系部计算机学院年级 2013 专业班级学生姓名学号任课教师实验成绩一、实验题目:用哈夫曼编码实现文件压缩二、实验目的:1、了解文件的概念。

2、掌握线性链表的插入、删除等算法。

3、掌握Huffman树的概念及构造方法。

4、掌握二叉树的存储结构及遍历算法。

5、利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理。

三、实验设备与环境:微型计算机、Windows 系列操作系统、Visual C++四、实验内容:根据输入小写英文字母和输入的对应权值创建哈夫曼树,可以求出每个小写英文字母的哈夫曼编码,将文本中的字母对应的哈夫曼编码写入文本中,实现对文本的编码。

五、概要设计:(1)构造Hufffman树的Hufffman算法构造Huffman树步骤:1.根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树,起权值为wj。

2.在森林中选取两棵根结点权值最小和次小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和。

3.在森林中删除这两棵树,同时将新得到的二叉树加入森林中。

重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树。

算法结构如图:(2)Huffman编码:数据通信用的二进制编码思想:根据字符出现频率编码,使电文总长最短编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列。

(3) 文本编码读取存放在文本中的字母,一对一的进行编译,将对应的编码存放到另一个文本中。

#include<>#include<>#include<>//树结点定义typedef struct{int weight;int parent;int lchild;int rchild;}HTNode,*HuffmanTree;static char N[100];//用于保存字符//赫夫曼编码,char型二级指针typedef char **HuffmanCode;//封装最小权结点和次小权结点typedef struct{int s1;int s2;}MinCode;//函数声明void Error();HuffmanCode HuffmanCoding(HuffmanTree &HT,HuffmanCode HC,int *w,int n);MinCode Select(HuffmanTree HT,int n);//当输入1个结点时的错误提示void Error(){printf("一个字符不进行编码!\n");exit(1);}//构造赫夫曼HT,编码存放在HC中,w为权值,n为结点个数HuffmanCode HuffmanCoding(HuffmanTree &HT,HuffmanCode HC,int *w,int n){int i,s1=0,s2=0;HuffmanTree p;char *cd;int f,c,start,m;MinCode min;if(n<=1){Error();//只有一个结点不进行编码,直接exit(1)退出}m=2*n-1;//赫夫曼码需要开辟的结点大小为2n-1HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//开辟赫夫曼树结点空间m+1//初始化n个叶子结点for(p=HT,i=0;i<=n;i++,p++,w++){p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;}//将n-1个非叶子结点的初始化for(;i<=m;i++,p++){p->weight=0;p->parent=0;p->lchild=0;p->rchild=0;}//构造赫夫曼树for(i=n+1;i<=m;i++){min=Select(HT,i-1);//找出最小和次小的两个结点s1= ; //最小结点下标s2=;//次小结点下标HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;//赋权和}//打印赫夫曼树printf("HT List:\n");printf("Number\t\tweight\t\tparent\t\tlchild\t\trchild\n");for(i=1;i<=m;i++){printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\n",i,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);}//从叶子结点到根节点求每个字符的赫夫曼编码HC=(HuffmanCode)malloc((n+1)*sizeof(char *));cd=(char *)malloc(n*sizeof(char *));//为赫夫曼编码动态分配空间cd[n-1]='\0';//编码结束符//求叶子结点的赫夫曼编码for(i=1;i<=n;i++){start=n-1;//定义左子树为0,右子树为1/*从最下面的1号节点开始往顶部编码(逆序存放),然后编码2号节点,3号......*/for(c=i,f=HT[i].parent; f!=0; c=f,f=HT[f].parent){if(HT[f].lchild==c)cd[--start]='0';elsecd[--start]='1';}//为第i个字符分配编码空间HC[i]=(char *)malloc((n-start)*sizeof(char *));//将当前求出结点的赫夫曼编码复制到HCstrcpy(HC[i],&cd[start]);}free(cd);return HC;}MinCode Select(HuffmanTree HT,int n){int min,secmin;int temp = 0;int i,s1,s2,tempi = 0;MinCode code ;s1=1;s2=1;min = 999999;//足够大//找出权值weight最小的结点,下标保存在s1中for(i=1;i<=n;i++){if(HT[i].weight<min && HT[i].parent==0){min=HT[i].weight;s1=i;}}secmin = 999999;//足够大//找出权值weight次小的结点,下标保存在s2中for(i=1;i<=n;i++){if((HT[i].weight<secmin) && (i!=s1) && HT[i].parent==0){secmin=HT[i].weight;s2=i;}}//放进封装中=s1;=s2;return code;}void Compression(HuffmanCode HC) //翻译原文档字符为赫夫曼编码FILE *fp1,*fp2;char ch;if((fp1 = fopen("","r")) == NULL)exit(0);if((fp2 = fopen("","a")) == NULL)exit(0);ch = fgetc(fp1);while((int)ch!= -1){switch(ch){case 'a': fputs(HC[1],fp2); break;case 'b': fputs(HC[2],fp2); break;case 'c': fputs(HC[3],fp2); break;case 'd': fputs(HC[4],fp2); break;case 'e': fputs(HC[5],fp2); break;case 'f': fputs(HC[6],fp2); break;case 'g': fputs(HC[7],fp2); break;case 'h': fputs(HC[8],fp2); break;case 'i': fputs(HC[9],fp2); break;case 'j': fputs(HC[10],fp2); break;case 'k': fputs(HC[11],fp2); break;case 'l': fputs(HC[12],fp2); break;case 'm': fputs(HC[13],fp2); break;case 'n': fputs(HC[14],fp2); break;case 'o': fputs(HC[15],fp2); break;case 'p': fputs(HC[16],fp2); break;case 'q': fputs(HC[17],fp2); break;case 'r': fputs(HC[18],fp2); break;case 's': fputs(HC[19],fp2); break;case 't': fputs(HC[20],fp2); break;case 'u': fputs(HC[21],fp2); break;case 'v': fputs(HC[22],fp2); break;case 'w': fputs(HC[23],fp2); break;case 'x': fputs(HC[24],fp2); break;case 'y': fputs(HC[25],fp2); break;case 'z': fputs(HC[26],fp2); break;default: printf(" 没有编码!\n");}ch = fgetc(fp1);}fclose(fp1);fclose(fp2);void main(){HuffmanTree HT=NULL;HuffmanCode HC=NULL;int *w=NULL;int i,n;printf("输入字符:");gets(N);n = strlen(N);w=(int *)malloc((n+1)*sizeof(int *));//开辟n+1个长度的int指针空间w[0]=0;printf("输入结点权值:\n");//输入结点权值for(i=1;i<=n;i++){printf("w[%d]=",i);scanf("%d",&w[i]);}//构造赫夫曼树HT,编码存放在HC中,w为权值,n为结点个数HC=HuffmanCoding(HT,HC,w,n);//输出赫夫曼编码printf("赫夫曼:\n");printf("Number\t\tWeight\t\tCode\n");for(i=1;i<=n;i++){printf("%c\t\t%d\t\t%s\n",N[i-1],w[i],HC[i]);}Compression(HC);}选取权值最小的结点的算法:选取权值次小的结点的算法:哈夫曼树建立的算法:哈夫曼编码的算法:七、测试结果及分析:4.输出哈夫曼树:5.字符对应编码:6.要编码的文本:7.编译后的文本:价。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

院系:计算机学院实验课程:实验3实验项目:文本压缩与解压指导老师:开课时间:2010 ~ 2011年度第 1学期专业:班级:学生:学号:一、需求分析1.本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能。

2.友好的图形用户界面,直观明了,每一个操作都有相应的提示,用户只需按着提示去做,便能轻松实现编码以及译码的效果,编码及译码结果都被保存成txt 文档格式,方便用户查看。

3.本程序拥有极大的提升空间,虽然现在只能实现对大写字母的译码以及编码,但通过改进鉴别的算法,即能够实现小写字母乃至其他特殊符号等的编码。

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

1.哈弗曼结点抽象数据类型定义为:ADT HaffTree{数据对象:HaffNode* ht,HaffCode* hc基本操作:Haffman(int w[],int n)操作结果:构造哈弗曼树及哈弗曼编码,字符集权值存在数组w,大小为nsetdep()setdep(int p,int l)操作结果:利用递归,p为哈弗曼节点序号,l为哈弗曼节点深度setloc()操作结果:设置哈弗曼节点坐标,用以输出到界面setloc2()操作结果:设置哈弗曼节点坐标,用以输出到文本,默认状态下不启用} ADT HaffTree2.本程序包含4个模块1)主程序模块:接受用户要求,分别选择执行①初始化②编码③译码④印代码文件⑤印哈弗曼树⑥退出2)哈弗曼树单元模块——建立哈弗曼树3)哈弗曼编码单元模块——进行哈弗曼编码、译码4)响应用户操作,输出内容到界面或文本各模块之间的关系如下:三、详细设计1.全局变量、结点int m_gcharnum;弗曼树的实现eight=w[i];elseht[i].weight=0;arent=0;child=-1;child=-1;eight<m1&&ht[j].parent==0)ei ght;x1=j;}else if(ht[j].weight<m2&&ht[j].parent==0)eight;x2=j;}}ht[x1].parent=n+i;ht[x2].parent=n+i;ht[n+i].weight=ht[x1].weight+ht[x2].weight;ht[n+i].lchild=x1;ht[ht[n+i].lchild].k=0;child=x2;ht[ht[n+i].rchild].k=1;eight;child=i;parent=ht[child].parent;while(parent!=0)child==child)[]=0;else[]=1;;child=parent;parent=ht[child].parent;}for(j=+1;j<n;j++){ hc[i].bit[j]=[j];}tart=;hc[i].weight=;}}3.主函数和其他函数的实现1)哈弗曼树类的成员函数的实现:child,l+1);ht[p].dep=l;setdep(ht[p].rchild,l+1);}}child;=x+f*10;ht[k].y=ht[k].dep*30;}i=ht[k].rchild;n=1024;=-1;ep)==0)n=ht[ht[p].parent].sn-1024/pow(2 ,ht[p].dep-1);}if(ht[p].k==1)n=ht[ht[p].parent].sn+1024/pow(2,ht[p].dep-1);}();}else{ ();}if(ht[p].lchild!=-1){ (ht[p].lchild);}child!=-1){(ht[p].rchild);}child;);,[k].y,str);child;child!=-1){pDC->MoveTo[k].x+4,[k].y);pDC->LineTo[[k].lchild].x+4,[[k].lchild].y);}if[k].rchild!=-1){pDC->MoveTo[k].x+4,[k].y);pDC->LineTo[[k].rchild].x+4,[[k].rchild].y);}<<endl;eight<<endl;arent<<endl;child<<endl;child<<endl;=" ";}else{fip>>c;[i].s=c;}fip>>w[i];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;j<m_gcharnum;j++)sff<<[i].bit[j];xt)|*.txt|所有文件(*.*)|*.*|"),NULL);if() == IDOK){m_path1 = ();UpdateData(FALSE);}AfxMessageBox("译码成功,请保存!");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;}if[i].lchild==-1&&[i].rchild==-1);i=2*m_gcharnum-2;}}}}();();}else{AfxMessageBox("您尚未执行初始化操作!请先执行初始化操作!");}}xt)|*.txt|所有文件(*.*)|*.*|"),NULL);if() == IDOK){m_path = ();UpdateData(FALSE);}ofstream saf(m_path);/*();n;}else{ d++;break;}if(d==[p].dep){for(t1;t1<t2-1;t1++) { saf<<" ";}if[p].s==" "||[p].s=="")saf<<"0";;child!=-1)[p].lchild);if(ht[p].rchild!=-1)[p].rchild);t1+=2;}else{d++;saf<<endl;t1=0;t2=0;}}}child;ep-1);f++) saf<<" ";<<endl;child;"");CString str1;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 char[iLen+1];(pBuf,iLen);pBuf[iLen]=0;();SetDlgItemText(IDC_EDIT1,pBuf);}xt)|*.txt|所有文件(*.*)|*.*|"),NULL);if() == IDOK){m_path = ();UpdateData(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;GetDlgItemText(IDC_EDIT1,strValue);xt)|*.txt|所有文件(*.*)|*.*|"),NULL);if() == IDOK){m_path2 = ();UpdateData(FALSE);}ifstream ldf(m_path,ios::in);i++;}for(j=[i].start+1;j<m_gcharnum;j++) sff<<[i].bit[j];}}AfxMessageBox("代码文件已保存成功!");CDialog::OnOK();}4.函数的调用关系图反映了演示程序的层次结构Main(主窗口、主文档)初始化OnHandinput OnAutoget编码OnEncodinghinputOnEncodingainput译码OnDecoding印代码文件OnPte印哈弗曼树OnPhafftreeHaffman Setdep setloc四、调试分析1.由于一开始时候编写的时候没有注意使用面向对象的思想,并没有建立哈弗曼树类,程序完成后才将其转为面向对象的方式,修改仓促,因而使得哈弗曼树类丧失了封装性。

相关文档
最新文档