首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

程序员需要了解的硬核知识之压缩算法

2020-01-11

此篇文章是《程序员需求了解的硬核常识》第五篇文章,历史文章请戳

程序员需求了解的硬核常识之内存

程序员需求了解的硬核常识之CPU

程序员需求了解的硬核常识之二进制

程序员需求了解的硬核常识之磁盘

之前的文章更多的介绍了核算机的硬件常识,会有一些难度,本篇文章的门槛会低一些,一同来看一下核算机中都有哪些 紧缩算法

咱们想必都有过 紧缩 和 解紧缩 文件的阅历,当文件太大时,咱们会运用文件紧缩来下降文件的占用空间。比方微信上传文件的约束是100 MB,我这里有个文件夹无法上传,可是我解压完结后的文件一定会小于 100 MB,那么我的文件就能够上传了。

此外,咱们把相机拍完的相片保存到核算机上的时分,也会运用紧缩算法进行文件紧缩,文件紧缩的格局一般是 JPEG 。

那么什么是紧缩算法呢?紧缩算法又是怎样界说的呢?在知道算法之前咱们需求先了解一下文件是怎么存储的

文件是将数据存储在磁盘等存储前言的一种办法。程序文件中最根本的存储数据单位是 字节 。文件的巨细不管是 xxxKB、xxxMB等来表明,便是由于文件是以字节 B = Byte 为单位来存储的。

文件便是字节数据的调集。用 1 字节表明的字节数据有 256 种,用二进制表明的话便是 0000 0000 - 1111 1111 。假如文件中存储的数据是文字,那么该文件便是文本文件。假如是图形,那么该文件便是图画文件。在任何情况下,文件中的字节数都是 接连存储 的。

上面介绍了文件的调集体其实便是一堆字节数据的调集,那么咱们就能够来给紧缩算法下一个界说。

紧缩算法 指的便是数据紧缩的算法,首要包含紧缩和复原的两个过程。

其实便是在不改动原有文件特色的前提下,下降文件字节空间和占用空间的一种算法。

依据紧缩算法的界说,咱们可将其分红不同的类型:

无损紧缩:能够 无失真地 从紧缩后的数据重构,精确地复原原始数据。可用于对数据的精确性要求严厉的场合,如可执行文件和一般文件的紧缩、磁盘的紧缩,也可用于多媒体数据的紧缩。该办法的紧缩比较小。如差分编码、RLE、Huffman编码、LZW编码、算术编码。

有损紧缩:有失真, 不能彻底精确地 康复原始数据,重构的数据仅仅原始数据的一个近似。可用于对数据的精确性要求不高的场合,如多媒体数据的紧缩。该办法的紧缩比较大。例如猜测编码、音感编码、分形紧缩、小波紧缩、JPEG/MPEG。

假如编解码算法的杂乱性和所需时刻差不多,则为对称的编码办法,大都紧缩算法都是对称的。但也有不对称的,一般是编码难而解码简略,如 Huffman 编码和分形编码。但用于密码学的编码办法则相反,是编码简略,而解码则十分难。

在视频编码中会一起用到帧内与帧间的编码办法,帧内编码是指在一帧图画内独立完结的编码办法,同静态图画的编码,如 JPEG;而帧间编码则需求参照前后帧才干进行编解码,并在编码过程中考虑对帧之间的时刻冗余的紧缩,如 MPEG。

在有些多媒体的运用场合,需求实时处理或传输数据,编解码一般要求延时 ≤50 ms。这就需求简略/快速/高效的算法和高速/杂乱的CPU/DSP芯片。

有些紧缩算法能够一起处理不同分辨率、不同传输速率、不同质量水平的多媒体数据,如JPEG2000、MPEG-2/4。

这些概念有些笼统,首要是为了让咱们了解一下紧缩算法的分类,下面咱们就对详细的几种常用的紧缩算法来剖析一下它的特色和好坏

接下来就让咱们正式看一下文件的紧缩机制。首要让咱们来测验对 AAAAAABBCDDEEEEEF 这 17 个半角字符的文件进行紧缩。尽管这些文字没有什么实际意义,可是很合适用来描绘 RLE 的紧缩机制。

由于半角字符是作为 1 个字节保存在文件中的,所以上述的文件的巨细便是 17 字节。如图

那么,怎么才干紧缩该文件呢?咱们无妨也考虑一下,只要是能够使文件小于 17 字节,咱们能够运用任何紧缩算法。

最清楚明了的一种紧缩办法我觉得你现已想到了,便是把相同的字符 去重化 ,也便是 字符 * 重复次数 的办法进行紧缩。所以上面文件紧缩后就会变成下面这样

从图中咱们能够看出, AAAAAABBCDDEEEEEF 的17个字符成功被紧缩成了 A6B2C1D2E5F1 的12个字符,也便是 12 / 17 = 70%,紧缩比为 70%,紧缩成功了。

像这样,把文件内容用 数据 * 重复次数 的办法来表明的紧缩办法成为 RLE 算法。RLE 算法是一种很好的紧缩办法,常常用于紧缩传真的图画等。由于图画文件的实质也是字节数据的调集体,所以能够用 RLE 算法进行紧缩

RLE 的紧缩机制比较简略,所以 RLE 算法的程序也比较简略编写,所以运用 RLE 的这种办法更能让你体会到紧缩思维,可是 RLE 只针对特定序列的数据管用,下面是 RLE 算法紧缩汇总

热门文章

随机推荐

推荐文章