文件压缩与解压实验报告

合集下载

压缩实验实验报告

压缩实验实验报告

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

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

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

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

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

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

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

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

实验结果和讨论: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.编译后的文本:价。

基于哈夫曼编码实现文本文件的压缩和解压缩实验报告模板

基于哈夫曼编码实现文本文件的压缩和解压缩实验报告模板

本科学生设计性实验报告软件工程技能实践Ⅰ项目组长陈启学号_*******专业软件工程班级_15软件7 班成员陈启杨林昌邓志远万胜实验项目名称_指导教师及职称__讲师__开课学期2015 至2016 学年第二学期一、实验设计方案1、实验任务与目的(简单介绍实验内容,说明实验任务和目的)1.1实验内容根据ascii码文件中各ascii字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。

对于给定的一组字符,可以根据其权值进行哈夫曼编码,并能输出对应的哈夫曼树和哈夫曼编码;实现哈夫曼解码。

能够分析文件,统计文件中出现的字符,再对文件进行编码,实现文件的压缩和解压缩,能够对于文件的压缩,比例进行统计,能够打印文件。

分析与设计哈夫曼树的存储结构,实现哈夫曼算法以及编码与译码基本功能,并对任意文本文件利用哈夫曼编码进行压缩得到压缩文件,然后进行解压缩得到解压文件。

1.2实验任务和目的1.2.1了解文件的概念。

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

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

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

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

2、实验思路(详细描述解决问题的整体思路、涉及的算法思想及数据结构等)2.1整体思路2.2涉及的算法思想及数据结构:2.2.1输入要压缩的文件首先运行的时候,用户主界面上有菜单提示该如何使用软件,根据菜单提示选择所要执行的项,依次进行,因为各个环节之间有先后顺序。

第一步为输入压缩软件的名称,由键盘输入文件路径和文件名称,读入字符数组中,打开该文件,按照提示进行压缩。

若打不开,则继续输入。

2.2.2读文件并计算字符频率文件将信息存放在字符数组中;计算每个字符出现的次数,申请一个结构体数组空间,用读取的字符减去字符结束符作为下标记录字符的频率。

2.2.3根据字符的频率,利用Huffman编码思想创建Huffman树将所记录的字符的频率作为权值来创建Huffman树,依次选择权值最小的两个字符作为左右孩子,其和作为父结点的权值,依次进行下去,直到所有的字符结点都成为叶子结点。

压缩解压缩实验报告

压缩解压缩实验报告

实验报告班级0901101 学号PB09210173 姓名饶亚民日期2010-11-10 一、题目要求:利用Huffman树及其编码原理写一个压缩和解压缩程序二、概要设计根据对用户输入的内容判断用户是要求压缩还是解压缩,若是压缩,则读入需压缩的文件(以二进制形式打开),求文件中字符的权重,构建Huffman树,求每个字符的Huffman编码,然后依次读入需压缩文件的内容,把其每个字符用其Huffman编码代换存入一数组中,输出到输出文件中。

输出文件格式为--.zap(也是二进制形式输出)。

若是解压缩,则根据读入文件的内容(以二进制形式打开),先判断是否为本压缩程序所压缩,若非,则报错。

若是,则依次读入存入该文件中的原来压缩文件的后缀名,原来文件中每个字符的权重,然后依据已存的每个字符的权重构建Huffman树,接着求每个字符的Huffman编码。

然后依次读入文件中的已存的以Huffman编码结果储存的0和1字符,按照Huffman编码结果,左子树为0,右子树为1,直至叶子节点,然后就可得到该Huffman编码所存储的字符值,然后依次输出到输出文件中,其中有一个count,用来记录已输出的字符个数,当它等于被压缩的文件长度时就停止。

三、详细设计详细数据结构定义:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#include"head.cpp"#include"BitWriting-Reading.cpp"#include"Directions.cpp"#include"Compress.cpp"#include"FindName.cpp"#include"filecompress.cpp"#include"Huffman Code.cpp"#include"DeCompress.cpp"#include"Match.cpp"#define TRUE 1#define FALSE 0#define ERROR 0#define OK 1typedef int Status;typedef struct{unsigned int weight;unsigned int parent,lchild,rchild;}HTNode,*HuffmanTree;typedef char **HuffmanCode;具体实现过程:main(int argc,char *argv[])//若argc=1则按报错处理然后调用Match函数Match(argv[1],flag),其作用是用来判断用户输入的内容Status Match(char *argv,int &flag){char *parameters[]={"compress","decompress","help"};int i;for(i=0;i<3;++i){if(!strcmp(parameters[i],argv)){flag=i+1;return OK;}}flag=0;return OK;}若flag=0,则按报错处理,并提示用户可以参考’help’;若flag=1,则说明是要压缩,接着判断argv[2]是否为空,若不为空,则将其视为输出文件的文件名,若为空,则默认为输入文件名为输出文件名,仅后缀不同而已。

哈夫曼文件压缩实验报告

哈夫曼文件压缩实验报告

哈夫曼文件压缩实验报告摘要:哈夫曼编码是一种常用的文件压缩算法,在本实验中我们通过使用哈夫曼编码算法对文件进行压缩和解压缩,来评估该算法在文件压缩方面的效果。

通过实验结果分析,我们发现哈夫曼编码能够有效地减小文件的大小,同时保持压缩后文件的可还原性。

1. 引言文件压缩是计算机科学领域的一个重要研究方向,它能够有效地减小文件的大小,节省存储空间和传输带宽。

哈夫曼编码作为一种经典的文件压缩算法,已被广泛应用于实际的文件压缩和传输中。

本实验旨在通过对哈夫曼编码的实际应用进行实验,评估其在文件压缩方面的效果。

2. 实验设计本实验分为三个步骤:文件读取、哈夫曼编码和压缩、解压和文件写入。

首先,我们需要从硬盘上读取待压缩的文件,并将其转化为二进制数据流。

接下来,我们使用哈夫曼编码算法对二进制数据流进行编码,生成编码后的数据流。

最后,我们根据编码表对编码后的数据流进行解码,恢复原始的二进制数据流,并将其写入硬盘上。

3. 实验过程首先,我们通过在计算机上选择一个待压缩的文件作为实验对象,然后设计一个程序来读取该文件的内容,并将其转化为二进制数据流。

为了保证实验结果的准确性,我们选择了不同类型和不同大小的文件进行实验,包括文本文件、图像文件和音频文件等。

接下来,我们使用哈夫曼编码算法对二进制数据流进行编码。

哈夫曼编码算法的核心思想是:将出现频率较高的字符用较短的编码表示,而将出现频率较低的字符用较长的编码表示,以达到最小化编码长度的效果。

在编码过程中,我们需要构建哈夫曼树和哈夫曼编码表。

哈夫曼树通过合并出现频率最低的两个节点来构建,最终生成一棵以根节点为基础的哈夫曼树。

哈夫曼编码表则是根据哈夫曼树的结构和编码规则生成的,将每个字符与对应的编码一一对应。

文件压缩与解压实验报告

文件压缩与解压实验报告

7
学生姓名
学号
专业
年级、班级
课程名称
实验 3
实验时间

实验指导老师
实验项目


实验评分
文本解压与压缩
CP3Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; GetClientRect(rect);///取得客户区域 pDC-> FillRect(rect,&m_brushBackground); ///用背景画刷填充区域 OnEraseBkgnd(pDC); CPen penblack;//定义画笔 CBrush brush1;//定义画刷 COLORREF oldbackcolor=RGB(255,255,255);//获取背景颜色 penblack.CreatePen(PS_SOLID,2,RGB(255,0,0));//为 画 笔 设 定 大 小 和 颜 色 pDC->SelectObject(&penblack); brush1.CreateSolidBrush(oldbackcolor);//为画刷设定颜色 pDC->SelectObject(&brush1); if(printtree==1)//如果显示树的按钮已被按下,则执行下面的内容 {
//功能:生成哈弗曼树,为每一个哈弗曼结点生成哈弗曼编码
//函数参数:int w[]引入各个字符的权值
//
int n 字符集大小
void HaffTree::Haffman(int w[],int n)
{
int i,j,m1,m2,x1,x2;//m1,m2 表示最小、次小 x1,x2 表示左右孩子

快速法压缩实验报告(3篇)

快速法压缩实验报告(3篇)

第1篇一、实验目的1. 掌握快速法压缩实验的基本原理和操作方法。

2. 了解不同材料的压缩特性,分析材料在压缩过程中的力学行为。

3. 培养实验操作技能和数据分析能力。

二、实验原理快速法压缩实验是一种研究材料力学性能的常用方法。

实验过程中,将试样置于压缩试验机上,通过施加轴向压力,使试样发生压缩变形,直至试样破坏。

通过测量试样在不同压力下的变形量,可以计算出材料的弹性模量、屈服强度、抗压强度等力学性能指标。

三、实验设备及仪器1. 快速压缩试验机:用于施加轴向压力,测量试样的变形和破坏。

2. 试样:实验选用不同材料的试样,如低碳钢、铸铁等。

3. 游标卡尺:用于测量试样尺寸。

4. 数据采集系统:用于记录实验数据。

四、实验步骤1. 准备实验试样:根据实验要求,选取合适的试样,并测量试样尺寸。

2. 安装试样:将试样放置在试验机上,调整试样位置,确保试样与试验机压板接触良好。

3. 设置实验参数:设置试验机加载速度、加载方式等参数。

4. 开始实验:启动试验机,施加轴向压力,记录试样在不同压力下的变形量。

5. 实验结束:当试样发生破坏时,停止加载,记录试样破坏时的压力值。

6. 数据处理:将实验数据进行分析,计算材料的力学性能指标。

五、实验结果与分析1. 低碳钢压缩实验结果(1)弹性模量:根据实验数据,计算低碳钢的弹性模量为E1。

(2)屈服强度:根据实验数据,确定低碳钢的屈服强度为S1。

(3)抗压强度:由于低碳钢在压缩过程中不会发生断裂,因此不测抗压强度。

2. 铸铁压缩实验结果(1)弹性模量:根据实验数据,计算铸铁的弹性模量为E2。

(2)屈服强度:根据实验数据,确定铸铁的屈服强度为S2。

(3)抗压强度:根据实验数据,计算铸铁的抗压强度为b2。

六、实验总结1. 通过快速法压缩实验,掌握了不同材料的压缩特性,分析了材料在压缩过程中的力学行为。

2. 培养了实验操作技能和数据分析能力,为今后从事相关研究奠定了基础。

七、实验注意事项1. 实验过程中,确保试样与试验机压板接触良好,避免因接触不良导致实验数据误差。

压缩实验报告

压缩实验报告

压缩实验报告压缩实验报告引言:压缩技术是现代信息技术中不可或缺的一部分。

它可以将大量的数据压缩成较小的体积,从而节省存储空间和传输带宽。

本实验旨在探究不同压缩算法的效果,并比较它们的优缺点。

一、实验设备和方法本实验使用了一台配置较高的计算机,并安装了常用的压缩软件。

实验过程中,我们选择了两种常见的压缩算法:Huffman编码和Lempel-Ziv-Welch(LZW)算法。

二、实验过程1. Huffman编码:Huffman编码是一种基于字符出现频率的压缩算法。

它通过构建哈夫曼树,将出现频率较高的字符用较短的编码表示,而出现频率较低的字符用较长的编码表示。

我们首先选择了一个文本文件进行压缩实验。

通过对文件进行统计分析,我们得到了每个字符的出现频率。

然后,根据频率构建了一棵哈夫曼树,并生成了对应的编码表。

最后,我们将原始文本文件使用Huffman编码进行压缩,并记录了压缩后的文件大小。

2. LZW算法:LZW算法是一种基于字典的压缩算法。

它通过建立字典并将输入文本与字典中的条目进行匹配,从而实现压缩。

当输入文本中的字符序列在字典中不存在时,将其添加到字典中,并输出前一个匹配的条目的编码。

我们选择了一段音频文件进行LZW算法的压缩实验。

首先,我们将音频文件转化为二进制数据,并建立一个初始字典,包含所有可能的字符。

然后,按照LZW算法的步骤,将输入文本与字典中的条目进行匹配,并输出对应的编码。

最后,我们记录了压缩后的文件大小。

三、实验结果与分析通过对压缩后的文件大小进行比较,我们得出了以下结论:1. Huffman编码相对于LZW算法,在处理文本文件时具有更好的压缩效果。

这是因为文本文件中存在大量重复的字符,而Huffman编码可以根据字符的出现频率进行编码,从而实现较高的压缩比。

2. LZW算法在处理音频文件时表现更好。

音频文件中的数据通常具有较高的连续性,而LZW算法可以通过建立字典并匹配连续的字符序列,实现较好的压缩效果。

实验二 压缩实验报告

实验二  压缩实验报告

3
实验二 压缩实验报告
1.实验目的:
a. 通过压缩试验测定低碳钢的屈服极限σs 与铸铁的强度极限σb
b. 观察这两种材料在压缩时的破坏现象,并分析其破坏原因。

2.实验设备:
实验机的名称及型号: ____________________________
最大测力范围:压缩: ____________________________
选用测力范围:压缩: ____________________________
量 具 名 称: ____________________________
3.实验记录及计算结果:
1)实验前尺寸:
2)实验数据处理: a. 计算公式:
低碳钢——屈服极限: ==
A P s
s σ (MPa) 铸 铁——强度极限: ==
A P b
b σ (MPa)
c. 作图:(定性图,图形不要失真、各图之间比例要协调):
4.问题讨论:
铸铁试件在压缩时沿与轴线大致成45°的斜截面破坏。

试分析其破坏原因。

指导教师:________________
________年_______月______日
4。

  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.由于一开始时候编写的时候没有注意使用面向对象的思想,并没有建立哈弗曼树类,程序完成后才将其转为面向对象的方式,修改仓促,因而使得哈弗曼树类丧失了封装性。

相关文档
最新文档