压缩文件算法
① zip 的压缩原理与实现
文件压缩原理
我们使用计算机所做的事情大多都是对文件进行处理。每个文件都会占用一定的磁盘空间,我们希望一些文件,尤其是暂时不用但又比较重要不能删除的文件(如备份文件,有点像鸡肋呀),尽可能少的占用磁盘空间。但是,许多文件的存储格式是比较松散的,这样就浪费了一些宝贵的计算机存储资源。这时,我们可以借助压缩工具解决这个问题,通过对原来的文件进行压缩处理,使之用更少的磁盘空间保存起来,当需要使用时再进行解压缩操作,这样就大大节省了磁盘空间。当你要拷贝许多小文件时,通过压缩处理可以提高执行效率。如果小文件很多,操作系统要执行频繁的文件定位操作,需要花费很多的时间。如果先把这些小文件压缩,变成一个压缩文件后,再拷贝时就很方便了。由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。为了有助于理解文件压缩,请您在脑海里想象一幅蓝天白云的图片。对于成千上万单调重复的蓝色像点而言,与其一个一个定义“蓝、蓝、蓝……”长长的一串颜色,还不如告诉电脑:“从这个位置开始存储1117个蓝色像点”来得简洁,而且还能大大节约存储空间。这是一个非常简单的图像压缩的例子。其实,所有的计算机文件归根结底都是以“1”和“0”的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到“数据无损稠密”的效果。总的来说,压缩可以分为有损和无损压缩两种。如果丢失个别的数据不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。有损压缩广泛应用于动画、声音和图像文件中,典型的代表就是影碟文件格式mpeg、音乐文件格式mp3和图像文件格式jpg。但是更多情况下压缩数据必须准确无误,人们便设计出了无损压缩格式,比如常见的zip、rar等。压缩软件(compression software)自然就是利用压缩原理压缩数据的工具,压缩后所生成的文件称为压缩包(archive),体积只有原来的几分之一甚至更小。当然,压缩包已经是另一种文件格式了,如果你想使用其中的数据,首先得用压缩软件把数据还原,这个过程称作解压缩。常见的压缩软件有winzip、winrar等
② 文件压缩的原理是什么
电脑里文件都是以二进制储存的。压缩原理就是通过特定的算法,将文件转化,而转化以后的文件占用的空间较小。
举个简单得例子(当然这个例子应该有点问题,但是能说明问题):
原始文件:111110000001
算法:当连续同样的1或者0的个数超过5个,则将其转化成XX1或者XX0得形式;如果不超过5个,保持不变。XX是连续的1或者0的个数,如果连续数量较多,XX得位数可以增加。
于是11111可以表示成5个1,写成二进制就是1011;000000可以表示成6个0,写成二进制就是1100;而1保持不变。
这样,转化以后的文件就变成了101111001
可见,原始文件需要12个存储位置,而转化后的文件只需要9个存储位置。
当然,实际上压缩得算法多种多样,要比这个例子复杂的多。根据文件种类的不同压缩算法也经常不同。
③ 压缩文件跟原文件之间大小比例是多少比如说1.5G的文件压缩后有多大
这个跟压缩算法有关,一般字符文件的压缩比较高,可以达到50%左右,视频、音频、图像文件,压缩比一般80%左右。
如果是影音文件1.5g,压缩后小不了多少,可能是1.3~1.4G。
有的图像文件如JPG格式的,本来就是带压缩的,再用rar等工具压缩的效果不明显,如果是BMP文件,压缩效果更好。
每个文件都由各种不同代码组成,比如01代码。
这类文件只有数字0与1组合。压缩原理就是【通过寻找其中的规律,简化数字的排列】。
比如:00000110001111111111可以简化成5个0,2个1,3个0,10个1的排列;100000000000可以简化成数学的:10^10。
根据香农的信息理论,任何一个文件被无损压缩后的结果不可能小于其熵(信息论)。
换句话说,如果一个文件有20多个G的大小,但是其信息熵只有20多M,则实现一个1000倍的压缩是完全可能的(比如楼主放出的几小时全黑视频);反过来看,一个文件如果虽然只有100M,但是其信息熵却高达90M,则这样的文件是无论如何也不可能被无损压缩至20M大小的。
多说一句,一个文件的信息熵有多少,靠一个公式是完全可以算出来的。所以只要提供任何一个文件,我们都能知道它最小可以被压缩到多少。
以上说法仅限于无损压缩,对于有损压缩来说,压缩了多少倍皆有可能。
(3)压缩文件算法扩展阅读:
经过压缩软件压缩的文件是压缩文件,压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,可以把它变成6个0的写法60,来减少该文件的空间。
压缩文件的基本原理是查找文件内的重复字节,并建立一个相同字节的"词典"文件,并用一个代码表示,比如在文件里有几处有一个相同的词"中华人民共和国"用一个代码表示并写入"词典"文件,这样就可以达到缩小文件的目的。
其实,所有的计算机文件归根结底都是以“1”和“0”的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到“数据无损稠密”的效果。总的来说,压缩可以分为有损和无损压缩两种。