如果没什么好事发生的话,就把没有发生坏事的每一天当作好事吧。 收藏本站
登陆 / 注册 搜索

阅读: 515   回复: 1

[# 系统基础] 压缩文件是什么原理?

回复 发新帖
空谷幽兰仗剑天涯 2019-12-18 18:00 |显示全部楼层

从前车马很慢,书信很远,一生只够爱一个人,但是可以纳很多妾啊!

精华达人 主题破百 以坛为家
我们知道在大多数时候,信息是不能由少变多的,除了靠联想,这也是目前“还原”图片马赛克唯一的办法。: y3 w. t! X5 g  E$ @( M) M2 f
3 k" \1 \. ^  |# g0 _
) J5 i. I9 s# t" v! F- p, A
但在我们实际使用计算机的时候,有一种我们经常使用的技术——文件的压缩、解压。这个过程难道不是信息的由多到少,再由少到多的过程吗?
7 X: u7 b4 N1 K, Z1 ~& Q% F: G: d9 }4 p! X2 k
还真不是。
% h1 @9 @& H# |; t) |; I! E" J4 P" D  T+ ~7 \! ~
文件的信息量并没有在压缩的过程中减少,因此解压时也就不存在“增多”一说。7 ^7 n  I! w  p& L$ K" q- D
  _9 e' k& V8 [0 z) E! z
那压缩文件是如何做到在保留信息含量的情况下,让文件变小的呢?  ~+ z$ l/ A1 Z3 z. B0 B$ W2 R
5 o! J8 X. b" l6 v1 r- y
我们都知道,电脑上的数据都是以一连串的二进制信息,也就是“0”和“1”的形式存储的。
8 t" C) ]8 L. \4 Y
/ o' I8 \- m# i
压缩文件是什么原理? 8b5421353a9fc9f9905d17ea548b-1458897.jpg!d.jpg

0 S1 d1 ]# L6 [9 h( E. L比如电脑CPU,里面是成千上万的晶体管,这些晶体管只有两种状态,通电和断电。“0”代表断电,“1”代表通电。
- }  e0 t7 X6 x5 y# j; r+ I5 W6 @  N5 O
再比如硬盘中存储的并不是我们屏幕中看到的文字或图片,而是硬盘中的盘片,通过磁化,用磁极S和N极代表数字“0”和数字“1”来存储信息的。' V4 l4 |' j: M3 E& f$ n( U

5 j/ r2 K' q: Y  j+ f3 l而一个“0”或“1”的大小就是一比特(Bit),8比特等于一子节(Byte),1024字节就是我们更为常见的 1KB。以此类推,1024KB 等于1MB,1024MB 等于 1GB。' k% f4 R, Q8 F

5 ~3 A+ k1 I( D; U( k知道了数据的大小后,便可以来看电脑实际上在处理的二进制编码了。
/ I! t. }# q5 h1 D; B1 N& a9 f9 M# ^( B  C9 p: V; x
01000001 表示字母A) T+ b& G) e- u3 H( s- Z* I! Z

1 K* r( Y5 Y3 t01000010 表示字母B
& {) W7 w. J6 _( Y4 a/ k
  Q+ }+ r# N. _% L' m7 E01000011 表示字母C7 p5 \6 h6 ~! L2 C/ Q. s

/ O7 q! T9 R  |2 n. l$ [. a01000100 表示字母D
8 A/ v2 i$ [! h/ V- u  {) J
9 `; f) g3 r+ m  z1 n- p
这一段国际上常用的ASCII编码中字母A-D对应的二进制表示方法。不难看出这些编码中含有大量重复的部分,比如D前面五位数字都是01000,每行都有表示字母字样。6 d( ?; I+ H7 r6 h: F

" V8 X# M5 r$ l而压缩文件的原理,本质上就是通过找规律,简化这些0和1之间的排列组合。8 K3 _& A/ E* N' d

! _2 T3 F$ W: R& g0 [; h0 h! I比如这里就可以用上「字典算法」压缩这个文件。/ z. e2 L4 Y( A# [9 P
) M3 Q0 e5 P. w% j$ D$ }
字典算法,即把文本中出现频率较多的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇,类似我们小时候解方程时把一个等式列为未知数。- g9 m2 F& h( ~
$ W3 Z. d2 i1 K* S6 I: ]: K
如果这里我们将「01000」列为X,「表示字母」列为Y,就可以这样压缩上面那段编码:
7 ^+ }+ X, A! Q8 j! o
X001YA3 o2 b6 i! u4 r+ ^$ n+ P7 ]9 ^
* D$ N' A+ s  Q4 [$ R2 h5 S
X010YB
6 J% u- W" `( A$ U! @4 P8 c
: u: s( p) T5 [: c1 ~X011YC
* Q% k2 @4 W6 |3 }! Z
  U$ B& z9 o5 r& }$ v) W. mX100YD
! ^+ |/ d! l" V( b
- ]& B* Q) n6 h0 g
6 q  P* t) y( s
换种方法解释就是如果你说:/ z  L! n& i7 }& \; u, ~: r

( [" q8 n5 q7 z6 ]' t吃火锅拉肚子,我昨天吃火锅了,我今天拉肚子了3 b6 J& R( P& k; X: c0 a
2 L; y+ x9 J2 s- C8 ]8 z
用字典算法就可以将这句话压缩成:+ V: ]: U" S0 e

  z4 \/ x. v. l5 u" u. C2 @我吃AB,我昨天A了,我今天B了
5 g2 z9 }9 h* |! a& n9 l' ?  Z6 n' D& S0 X: Q! G; k2 |) A7 R
当然,同样的内容,其实还可以用「固定位长算法」,「RLE」等等算法来进行压缩,但原理都是通过找规律,再进行归纳整理,这就完成了一次压缩。
7 c5 L" S+ }7 l" W! v
* k: L. Q5 t+ W0 P: _6 I6 U而有的时候,有的文件可以压缩的很小,有的压缩完却几乎没有变化也是这个原因。内容相似之处较多时则容易压缩的很小,反正则不容易压缩。% _" ]  O+ Q- `8 q9 \. h
* Y2 L" ]+ P6 i! V1 c" R  y) Z4 Y


云问刀「初入古黑」 2019-12-18 18:00 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

我不在江湖,但江湖中有我的传说;
7 f# V- r' p# Q0 @5 \' R我身在江湖,江湖里却没有我得传说。
您需要登录后才可以回帖 登录 | 注册账号  

本版积分规则

关于本站|小黑屋|古黑论 网站统计

GMT+8, 2020-4-1 01:02 , Processed in 0.148163 second(s), 26 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表