㈠ 数据无损压缩算法
所谓无损压缩格式,顾名思义,就是毫无损失地将声音信号进行压缩的音频格式。常见的像MP3、WMA等格式都是有损压缩格式,相比于作为源的WAV文件,它们都有相当大程度的信号丢失,这也是它们能达到10%的压缩率的根本原因。而无损压缩格式,就好比用Zip或RAR这样的压缩软件去压缩音频信号,得到的压缩格式还原成WAV文件,和作为源的WAV文件是一模一样的!但是如果用Zip或RAR来压缩WAV文件的话,必须将压缩包解压后才能播放。而无损压缩格式则能直接通过播放软件实现实时播放,使用起来和MP3等有损格式一模一样。总而言之,无损压缩格式就是能在不牺牲任何音频信号的前提下,减少WAV文件体积的格式。经常使用的无损压缩算法有 Shannon-Fano 编码,Huffman 编码,行程(Run-length)编码,LZW(Lempel-Ziv-Welch)编码和算术编码等。Huffman 编码该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码。它是统计独立信源能达到最小平均码长的编码方法。编码效率高 。基本原理:依据信源字符出现的概率大小来构造代码,对出现概率较大的信源字符,给予较短码长,而对于出现概率较小的信源字符,给予较长的码长,最后使得编码的平均码字最短。编码步骤:(1)初始化,根据符号概率的大小按由大到小顺序对符号进行排序。(2)把概率最小的两个符号组成一个节点。(3)重复步骤2。(4)从根节点开始到相应于每个符号的“树叶”,从上到下标上“0”(上枝)或者“1”(下枝)至于哪个为“1”哪个为“0”则无关紧要,最后的结果仅仅是分配的代码不同,而代码的平均长度是相同的。(5)从根节点开始顺着树枝到每个叶子分别写出每个符号的代码。无损压缩算法有哪些Huffman编码的注意点:Huffman编码没有错误保护功能,如果码中有错误,则可能引起接下来的一连串译码错误。Huffman编码是可变长编码,因此很难随意查找或调用中的文件内容。Huffman依赖于信源的统计特性。 Huffman编码的每个码字都是整数:因此实际上平均码长很难达到信息熵的大小。Huffman编码解码必须要有码表,如果消息数目很多,那么
㈡ 文件的压缩原理是什么
电脑里文件都是以二进制储存的。压缩原理就是通过特定的算法,将文件转化,而转化以后的文件占用的空间较小。举个简单得例子(当然这个例子应该有点问题,但是能说明问题):原始文件:111110000001算法:当连续同样的1或者0的个数超过5个,则将其转化成XX1或者XX0得形式;如果不超过5个,保持不变。XX是连续的1或者0的个数,如果连续数量较多,XX得位数可以增加。于是11111可以表示成5个1,写成二进制就是1011;000000可以表示成6个0,写成二进制就是1100;而1保持不变。这样,转化以后的文件就变成了101111001可见,原始文件需要12个存储位置,而转化后的文件只需要9个存储位置。当然,实际上压缩得算法多种多样,要比这个例子复杂的多。根据文件种类的不同压缩算法也经常不同。
㈢ 压缩文件zip与rar有什么区别
RAR和ZIP区别:安装包大小不一样、压缩率不一样、支持格式不一样、两者功能不一样
1、安装包大小不一样。zip的安装比较大,并仅仅有英文版+汉化包;rar有官方的简体中文版,并且安装很小,不足一兆。
2、压缩率不一样。winrar的压缩率较高,而zip的压缩率更低。虽然RAR文件比ZIP文件压缩比要高,但是压缩速度较慢,因为RAR文件头也要占据一定空间,在数据压缩余地不大时,压缩过的文件可能比原文件要大。但是ZIP的压缩速度比RAR要快4倍以上,而压缩率仅差1% 。
3、支持格式不一样。zip仅仅能够压缩成zip格式,不能解压rar格式;rar不仅有自己的格式,还可以压缩成zip格式并解压zip格式。
4、两者功能不一样。rar支持分卷压缩,zip不支持。
㈣ 压缩文件RAR和ZIP的区别
区别:
1、压缩算法不同
rar格式能够提供更好的压缩率,zip是一种开放性的压缩文件,算法不局限于一种,zip的优势是压缩速度快。
2、功能不同
rar不支持恢复记录,zip支持物理受损数据的恢复,还可以锁定重要压缩文件。
3、大小不同
rar可以管理的文件大小几乎是无限制的,zip处理单个文件的最大值为4GB。
简单的说,就是经过压缩软件压缩的文件叫压缩文件,压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,可以把它变成6个0 的写法60,来减少该文件的空间。
压缩文件的基本原理是查找文件内的重复字节,并建立一个相同字节的"词典"文件,并用一个代码表示,比如在文件里有几处有一个相同的词"中华人民共和国"用一个代码表示并写入"词典"文件,这样就可以达到缩小文件的目的。
㈤ 软件压缩的原理是什么
压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,可以把它变成6个0 的写法60,来减少该文件的空间。
由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。
为了有助于理解文件压缩,请在脑海里想象一幅蓝天白云的图片。对于成千上万单调重复的蓝色像点而言,与其一个一个定义“蓝、蓝、蓝……”长长的一串颜色,还不如告诉电脑:“从这个位置开始存储1117个蓝色像点”来得简洁,而且还能大大节约存储空间。
这是一个非常简单的图像压缩的例子。其实,所有的计算机文件归根结底都是以“1”和“0”的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到“数据无损稠密”的效果。
(5)压缩文件算法扩展阅读
WinRAR能备份数据,减少 E-mail附件的大小,解压缩从Internet上下载的 RAR、ZIP 和其他格式的压缩文件,并能创建 RAR 和 ZIP 格式的压缩文件。在购买之前,你可以下载试用版本。
WINRAR在压缩率和速度方面都有很好的表现。其压缩率比高,3.x 采用了更先进的压缩算法,是现在压缩率较大、压缩速度较快的格式之一。 3.3 增加了扫描压缩文件内病毒、解压缩“增强压缩” ZIP 压缩文件的功能, 升级了分卷压缩的功能等。
参考资料来源:网络-压缩文件
㈥ RAR和ZIP两种格式的压缩算法分别是什么
压缩算法RAR是私有算法。zip一般是Deflate或Deflate64,开源的。RAR可以将文件名加密,ZIP就不可以。现在两者的解密基本都是跑字典。
㈦ 压缩算法原理
哈夫曼哈夫曼编码是无损压缩当中最好的方法。它使用预先二进制描述来替换每个符号,长度由特殊符号出现的频率决定。常见的符号需要很少的位来表示,而不常见的符号需要很多为来表示。哈夫曼算法在改变任何符号二进制编码引起少量密集表现方面是最佳的。然而,它并不处理符号的顺序和重复或序号的序列。2.1 原理我不打算探究哈夫曼编码的所有实际的细节,但基本的原理是为每个符号找到新的二进制表示,从而通常符号使用很少的位,不常见的符号使用较多的位。简短的说,这个问题的解决方案是为了查找每个符号的通用程度,我们建立一个未压缩数据的柱状图;通过递归拆分这个柱状图为两部分来创建一个二叉树,每个递归的一半应该和另一半具有同样的权(权是 ∑ N K =1 符号数 k , N 是分之中符号的数量,符号数 k 是符号 k出现的次数 )这棵树有两个目的:1. 编码器使用这棵树来找到每个符号最优的表示方法2. 解码器使用这棵树唯一的标识在压缩流中每个编码的开始和结束,其通过在读压缩数据位的时候自顶向底的遍历树,选择基于数据流中的每个独立位的分支,一旦一个到达叶子节点,解码器知道一个完整的编码已经读出来了。压缩后的数据流是 24 位(三个字节),原来是 80 位( 10 个字节)。当然,我应该存储哈夫曼树,这样解码器就能够解码出对应的压缩流了,这就使得该例子中的真正数据流比输入的流数据量大。这是相对较短的数据上的副作用。对于大数据量来说,上面的哈夫曼树就不占太多比例了。解码的时候,从上到下遍历树,为压缩的流选择从左 / 右分支,每次碰到一个叶子节点的时候,就可以将对应的字节写到解压输出流中,然后再从根开始遍历。2.2 实现哈夫曼编码器可以在基本压缩库中找到,其是非常直接的实现。这个实现的基本缺陷是:1. 慢位流实现2. 相当慢的解码(比编码慢)3. 最大的树深度是 32 (编码器在任何超过 32 位大小的时候退出)。如果我不是搞错的话,这是不可能的,除非输出的数据大于 2 32字节。另一方面,这个实现有几个优点:1. 哈夫曼树以一个紧密的形式每个符号要求 12 位(对于 8 位的符号)的方式存储,这意味着最大的头为 384 。2. 编码相当容易理解哈夫曼编码在数据有噪音的情况(不是有规律的,例如 RLE )下非常好,这中情况下大多数基于字典方式的编码器都有问题。
㈧ 压缩文件的算法
主要是看文件格式,像rmvb等格式都是已经压缩过的了,再压空间不大,还有就是独立格式文件,一般系统无法识别,并且文件名比较怪的都是别人独立开发的格式,这些也没什么压缩空间,算法你要看那格式种了,系统常见的文件压缩算法都是ZIP文件的总体格式 分文件头信息+文件压缩数据 中心目录+中心目录记录结束符 1.分文件头信息: 字节数 描述 4 分文件头信息标志(0x04034b50) 2 解压缩所需版本 2 通用比特标志位(置比特0位=加密;置比特1位=使用压 缩方式6,并使用8k变化目录,否则使用4k变化目录;置比特2位=使用压 缩方式6,并使用3个ShannonFano树对变化目录输出编码,否则使用2个 ShannonFano树对变化目录输出编码,其它比特位未用) 2 压缩方式(0=不压缩,1=缩小,2=以压缩因素1缩小,3=以 压缩因素2缩小,4=以压缩因素3缩小,5=以压缩因素4缩小,6=自展) 2 文件最后修改时间 2 文件最后修改日期 4 32位校验码 4 压缩文件大小 4 未压缩文件大小 2 文件名长 2 扩展段长 ? 文件名(不定长) ? 扩展段(不定长) 2.中心目录结构 文件头信息…中心目录记录结束符 文件头: 字节数 描述 4 中心文件头信息标志(0x02014b50) 2 主机操作系统(高位字节表示主机操作系统,低位字 节表示ZIP压缩软件版本号,其值除以10表示主版本号,其值模10表示 次版本号。0=MS-DOS,OS/2 FAT文件系统,1=Ami ga,2=VMS,3=Unix及 变种,4=VM/CMS,5=AtariST,6=OS/2 HPFS,7=Macintosh,8=Z-System,9 =C P/M,10-255未用) 2 解压缩所需版本 2 通用比特标志 2 压缩方式 2 文件最后修改时间(用标准的MS-DOS时间日 期格式 编码) 2 文件最后修改日期 4 32位校验码(使用David Schwaderer的CRC-32算法产 生) 4 压缩文件大小 4 未压缩文件大小 2 文件名长 2 扩展段长 2 文件注释长(分别为文件名长,扩展段,注释 段,小于 64K) 2 磁盘起始号(本文件在磁盘中的起始号) 2 内部文件属性(最低位若置1,表示为ASC文本,否则为 二进制数据,其它位未用) 4 外部文件属性(依赖于主机操作系统) 4 分文件头相对位移 ? 文件名(不定长) ? 扩展段(不定长,用于未来扩展,低版本为0长) ? 文件注释(不定长) 3.中心目录记录结束符 字节数 描述 4 中心目录标记结束符(0x06054b50) 2 磁盘号(其中包括中心目录结束记录) 2 磁盘中心目录起始号 2 磁盘中心目录入口总数 2 中心目录入口总数(ZIP文件中的文件总数) 2 整个中心目录大小 4 关于起始磁盘号的中心目录初始偏移 2 ZIP文件注释长度 ? ZIP文件注释(不定长) 加密方法 PKZIP中使用的加密方法由Roger Schlafly提供。ZIP文件在解压 缩前必须先解密。每个加密文件具有一个12字节的加密文件头扩展信 息,存储于数据区的起始位置,加密前先设置一个起始值,然后被三个3 2位的密钥加密。密钥被使用者提供的口令初始化。12个字节加密之 后,由PKZIP的伪随机数产生方法,结合PKZIP中使用CRC-32算法对密钥 进行更新。 具体实施分为三步: 1.用口令对三个32位密钥初始化。 K(0)=305419896,K(1)=591751049,K(2)=878082192 循环 for i=0 to length(password)-1 调用更新密钥函数 update_keys(password(i)) 结束循环(循环口令长度次) 其中更新密钥函数为: update_keys(char): Key(0)=crc32(key(0),char) Key(1)=Key(1)+(Key(0)& 000000ffH) Key(1)=Key(1)*134775813+1 Key(2)=crc32(Key(2),Key(1)〉〉24) end update_keys CRC32函数中,给定一个4字节的CRC值和一个字符,返回一个由CRC -32算法更新的CRC。具体为: crc32(c,b)=crc32tab[(c^b)&0xff]^(c>>8),crc32tab[256]的值 为固定的256个4字节数。 2.读取并加密12字节的加密头,再次对密钥进行初始化。 将12个字节的加密头读入缓冲区buffer(0)至buffer(11),循环fo r i=0 to 11 C=buffer(i)^decrypt_byte() update_keys(C) buffer(i)=C 结束循环(循环12次) 其中的decrypt_byte()函数为: unsigned char decrypt_byte() local unsigned short temp temp=Key(2)¦2 decrypt_byte=((temp*(temp^1))>>8)&0xff end decrypt_byte 该步结束后,缓冲区中最后的二个字节buffer(10)和buffer(11) 将成为加密文件校验码的二个最高位(按低至高顺序存放)。对ZIP加 密文件进行解压缩前,PKUNZIP软件将使用者提供的口令按上述二个步 骤进行处理,得到的结果与校验码的二个高位字节进行比较,只有当提 供了正确的口令时,结果一致,才能进行后续的解压缩过程,否则,PKZI P报告错误信息,程序自动结束。 3.读取压缩的数据流并以加密密钥对其进行加密。 压缩数据流按下述过程加密: 循环 直至数据流结束 C=数据流的一个字节 temp=C^decrypt_byte() update_keys(temp) 输出temp 结束循环
㈨ 什么是压缩算法
LZW压缩算法的基本概念:LZW压缩有三个重要的对象:数据流(CharStream)、编码流(CodeStream)和编译表(String Table)。在编码时,数据流是输入对象(文本文件的据序列),编码流就是输出对象(经过压缩运算的编码数据);在解码时,编码流则是输入对象,数据流是输出对象;而编译表是在编码和解码时都须要用借助的对象。字符(Character):最基础的数据元素,在文本文件中就是一个字节,在光栅数据中就是一个像素的颜色在指定的颜色列表中的索引值;字符串(String):由几个连续的字符组成; 前缀(Prefix):也是一个字符串,不过通常用在另一个字符的前面,而且它的长度可以为0;根(Root):一个长度的字符串;编码(Code):一个数字,按照固定长度(编码长度)从编码流中取出,编译表的映射值;图案:一个字符串,按不定长度从数据流中读出,映射到编译表条目. LZW压缩算法的基本原理:提取原始文本文件数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小。看起来和调色板图象的实现原理差不多,但是应该注意到的是,我们这里的编译表不是事先创建好的,而是根据原始文件数据动态创建的,解码时还要从已编码的数据中还原出原来的编译表.
㈩ 压缩的算法都有哪些
只有最常见的zip的,估计你都要研究上n久了。。。 文本文件一般有zip,rar, 网页文件有htz 视频文件有rm,avi 语音文件有mp3, 图片文件有png,gif,jpg 这些都是文件压缩的。。。。 ———————————— ZIP文件的总体格式 分文件头信息+文件压缩数据 中心目录+中心目录记录结束符 1.分文件头信息: 字节数 描述 4 分文件头信息标志(0x04034b50) 2 解压缩所需版本 2 通用比特标志位(置比特0位=加密;置比特1位=使用压 缩方式6,并使用8k变化目录,否则使用4k变化目录;置比特2位=使用压 缩方式6,并使用3个ShannonFano树对变化目录输出编码,否则使用2个 ShannonFano树对变化目录输出编码,其它比特位未用) 2 压缩方式(0=不压缩,1=缩小,2=以压缩因素1缩小,3=以 压缩因素2缩小,4=以压缩因素3缩小,5=以压缩因素4缩小,6=自展) 2 文件最后修改时间 2 文件最后修改日期 4 32位校验码 4 压缩文件大小 4 未压缩文件大小 2 文件名长 2 扩展段长 ? 文件名(不定长) ? 扩展段(不定长) 2.中心目录结构 文件头信息…中心目录记录结束符 文件头: 字节数 描述 4 中心文件头信息标志(0x02014b50) 2 主机操作系统(高位字节表示主机操作系统,低位字 节表示ZIP压缩软件版本号,其值除以10表示主版本号,其值模10表示 次版本号。0=MS-DOS,OS/2 FAT文件系统,1=Ami ga,2=VMS,3=Unix及 变种,4=VM/CMS,5=AtariST,6=OS/2 HPFS,7=Macintosh,8=Z-System,9 =C P/M,10-255未用) 2 解压缩所需版本 2 通用比特标志 2 压缩方式 2 文件最后修改时间(用标准的MS-DOS时间日 期格式 编码) 2 文件最后修改日期 4 32位校验码(使用David Schwaderer的CRC-32算法产 生) 4 压缩文件大小 4 未压缩文件大小 2 文件名长 2 扩展段长 2 文件注释长(分别为文件名长,扩展段,注释 段,小于 64K) 2 磁盘起始号(本文件在磁盘中的起始号) 2 内部文件属性(最低位若置1,表示为ASC文本,否则为 二进制数据,其它位未用) 4 外部文件属性(依赖于主机操作系统) 4 分文件头相对位移 ? 文件名(不定长) ? 扩展段(不定长,用于未来扩展,低版本为0长) ? 文件注释(不定长) 3.中心目录记录结束符 字节数 描述 4 中心目录标记结束符(0x06054b50) 2 磁盘号(其中包括中心目录结束记录) 2 磁盘中心目录起始号 2 磁盘中心目录入口总数 2 中心目录入口总数(ZIP文件中的文件总数) 2 整个中心目录大小 4 关于起始磁盘号的中心目录初始偏移 2 ZIP文件注释长度 ? ZIP文件注释(不定长) 加密方法 PKZIP中使用的加密方法由Roger Schlafly提供。ZIP文件在解压 缩前必须先解密。每个加密文件具有一个12字节的加密文件头扩展信 息,存储于数据区的起始位置,加密前先设置一个起始值,然后被三个3 2位的密钥加密。密钥被使用者提供的口令初始化。12个字节加密之 后,由PKZIP的伪随机数产生方法,结合PKZIP中使用CRC-32算法对密钥 进行更新。 具体实施分为三步: 1.用口令对三个32位密钥初始化。 K(0)=305419896,K(1)=591751049,K(2)=878082192 循环 for i=0 to length(password)-1 调用更新密钥函数 update_keys(password(i)) 结束循环(循环口令长度次) 其中更新密钥函数为: update_keys(char): Key(0)=crc32(key(0),char) Key(1)=Key(1)+(Key(0)& 000000ffH) Key(1)=Key(1)*134775813+1 Key(2)=crc32(Key(2),Key(1)〉〉24) end update_keys CRC32函数中,给定一个4字节的CRC值和一个字符,返回一个由CRC -32算法更新的CRC。具体为: crc32(c,b)=crc32tab[(c^b)&0xff]^(c>>8),crc32tab[256]的值 为固定的256个4字节数。 2.读取并加密12字节的加密头,再次对密钥进行初始化。 将12个字节的加密头读入缓冲区buffer(0)至buffer(11),循环fo r i=0 to 11 C=buffer(i)^decrypt_byte() update_keys(C) buffer(i)=C 结束循环(循环12次) 其中的decrypt_byte()函数为: unsigned char decrypt_byte() local unsigned short temp temp=Key(2)¦2 decrypt_byte=((temp*(temp^1))>>8)&0xff end decrypt_byte 该步结束后,缓冲区中最后的二个字节buffer(10)和buffer(11) 将成为加密文件校验码的二个最高位(按低至高顺序存放)。对ZIP加 密文件进行解压缩前,PKUNZIP软件将使用者提供的口令按上述二个步 骤进行处理,得到的结果与校验码的二个高位字节进行比较,只有当提 供了正确的口令时,结果一致,才能进行后续的解压缩过程,否则,PKZI P报告错误信息,程序自动结束。 3.读取压缩的数据流并以加密密钥对其进行加密。 压缩数据流按下述过程加密: 循环 直至数据流结束 C=数据流的一个字节 temp=C^decrypt_byte() update_keys(temp) 输出temp 结束循环
未经允许不得转载:山九号 » 压缩文件算法|压缩文件的算法