在阅读过后《程序是怎样跑起来的》第6章后,我了解了关于文件压缩的相关知识。文件压缩指的就是将文件中重复的字符用“数据×出现次数”的方式表达出来,就如书中所说的AAABBDDFFF这样10个字符用A×3+B×2+D×2+F×3=A3B2D2F3来表示,这是RLE算法的压缩方式,但是这种算法也存在一定的缺陷,当数据是文本就如书中所举的例子This is pen,那么This is pen中按照RLE算法并没有重复的字符,因此只能表示为T1h1i1s1 i1s1 p1e1n1如此的形式,按照一个半角字符就是一个字节来计算,“压缩”后甚至比压缩前大了1倍,因此RLE算法也是具有一定的局限性。当然,压缩的算法并不止这一种,还有哈夫曼算法等等多种算法,其中,哈夫曼算法并不是按照1字节=8位的方式来计算字符的,它是将出现次数最为频繁的字符设置为最低位,并且按照频率依次增加。那么这个频率是按照谁来定呢?书中举例按照莫尔斯编码来定,但却是按照全部出版物的内容来定的,并不符合每个每个文件出现的字符来排序。因此效果也并不显著。并且如果只是单单按照这种方式,AAABBCCDEF这样A=1位编码为0;B和C是2位编码为01和10;D,E,F都是3位编码分别为为001、010、100那么AC=010,E也=010,如此就出现问题了。所以哈夫曼算法就有其独特的哈夫曼编码,哈夫曼编码树按照先排序后,将每个频率相同的数据的频率相加,最后将每个频次的值加起来,左0右1,如此即可解决上述问题了。利用哈夫曼算法搭配哈夫曼编码的压缩方法有着显著的效果。
其中压缩也分为可逆与不可逆压缩,图像压缩最为显著,因此在日常大部分图像压缩的过程中因为图片格式的不同大部分是会丢失数据,这也是导致图片模糊的原因