不管是校验算法,还是纠错算法,本质上或者说思路上都是利用冗余信息对文件原本的样子进行推算。
, e1 g# }0 b( B7 M e3 l" b+ j根据用途的不同,校验算法的目的是利用更小的冗余信息进行错误是否存在的验证,而纠错算法是在保证一定冗余信息量的前提下,对已经发生错误的文件进行修复。8 `& {; K% C8 `& V; R- i
CRC可以保证检测出100%的奇数个错误和小于其阶数个的突发错误。
( o- j" }6 e6 L. k这一算法仅仅是用于检测错误,而不是纠正错误,单纯凭借这一信息很难修复出错。
$ L- ^) }8 v' l* D对rar文件进行成功修复往往是建立在配置了一定比例的冗余数据的基础上的。
. L) H R8 q- |* H/ Z6 M- r而且当错误足够多时,往往这些冗余数据也不能起到太大的帮助。
0 R" ?1 x# R# ~4 w8 c: T" I9 n' w3 c* E" c
题外话:
, T; K1 h8 L' P9 m0 j W8 S事实上香农在通信的数学理论一书中提出过:
+ e) `4 i) L H2 M. B% e存在一纠错算法,使得信号传输过程中的误码率得以任意小。5 v4 Z8 i3 U P0 D; d# }' G
如果原话理解起来费劲的话,可以理解成:
6 e, E. m5 L5 O; X% O: Z存在一个纠错算法,可以使得错误率不为100%的任意情况下通信得以绝对保真。9 f+ u$ X1 t+ u. M( s
唯一的问题在于:为了保真,我们需要付出的额外的冗余代价是否现实,或者值得。
1 t/ u; ~0 j. f; V这一论断可以认为是通信领域中最有用也最没用的一个。
7 e* h" a9 S8 ?) M4 f因为这一论断从事实上可以证明不论通信多么差,我们总可能设计出算法来对通信进行可靠性保证。
7 E0 x* u& R2 H) Q: o3 l1 w但是这个论断对于我们实际设计出这些算法简直是一点帮助也没有,充其量也不过是为我们鼓起信心而已。
0 ?! B% t/ `8 u" K5 b2 j( w1 _/ \6 c9 b, U2 J% r
8 E2 W/ u! s* u8 y |
|