第06章 亲自尝试压缩数据
热身问题
1:文件存储的基本单位是什么?
1字节(=8位),文件是字节数据的集合体。
2:文件内容用“数据的值*循环次数”来表示的压缩方法是RLE算法还是哈夫曼算法?
RLE算法,例如:AAABB这个数据压缩后是A3B2。像这样,把文件内容用“数据*重复次数”的形式来表示的压缩方法称为RLE(Run Length Encoding,行程长度编码)算法,如发送传真图像时多使用此算法。
3:BMP(BITMAP)格式的图像文件,是压缩过的吗?
没有压缩过,因为BMP格式的图像文件是没有压缩的,因此要比JPEG格式等压缩过的图像文件大不少。
4:可逆压缩和非¥[可逆压缩]的不同点是什么?
压缩后的数据¥[能复原]的是可逆压缩,¥[无法复原]的是非可逆压缩。像JPEG格式这样的图片,之所以压缩后会让人感到不自然,就是因为使用了非可逆压缩。
6.1 文件以字节为单位保存
文件是将数据存储在磁盘等存储媒介中的一种形式。程序文件中存储数据的单位是字节。文件的大小之所以用XXKB,XXMB等来表示,就是因为文件是以字节(B=Byte)为单位来存储的。
文件是将数据存储在磁盘等存储媒介中的一种形式,程序文件中存储数据的单位是¥[字节]。从物理上对磁盘进行读写时是以¥[扇区的整数倍(簇)](如512字节)为单位的,但另一方面,程序则可以在¥[逻辑]上以字节为单位对文件的内容进行读写。文件就是¥[字节数据的集合],在任何情况下,文件中的¥[字节数据]都是¥[连续存储]的,大家一定要认识到这一点。
6.4 用二叉树实现哈夫曼编码
压缩后同压缩前文件大小的比率,称为¥[压缩比率]或¥[压缩比]。
哈夫曼算法(D.A.¥[Huffman]):举例说明:如一文本文件中每个字符占1个字节、8个位,若文本中有100个字符‘Q’,2个字符‘A’,则共占据102个字节,816位。若使用2个位表示‘Q’,10个位表示‘A’则使用200位+20位即可。可以看出选择恰当的¥[编码体系]可以有效的减少占用的存储空间。
哈夫曼算法是指,为各压缩对象文件分别构造最佳的编码体系,并以该编码体系为基础来进行压缩。因此,用什么样的编码(¥[哈夫曼编码])对数据进行分割,就要由各个文件而定。用哈夫曼算法压缩过的文件中,存储着哈夫曼编码信息和压缩过的数据。
下面我们一AAAAAAEEEEEBBDDCF为例来说明哈夫曼编码:
字符:A E B D C F
频率:6 5 2 2 1 1
编码:0 1 10 11 100 101
位数:1 1 2 2 3 3
可以看出频率越高的字符所占用的存储空间¥[越少],但是该体系存在问题:例如100这个3位的编码,意思是什么呢?因此如果不加入区分字符的符号,这个编码方案就无法使用。我们可以通过哈夫曼树构造编码体系,在不使用字符区分符的情况下也可以明确区分编码体系。
哈夫曼树:在哈夫曼算法中,通过借助¥[哈夫曼树]构造编码体系,即使在不使用字符¥[区分符]号的情况下,也可以构建能够明确进行区分的编码体系。以AAAAAABBCDDEEEEEF为例:
步骤1:列出数据及其出现频率,()里面表示的是出现频率,这里按照降序排列
频率:6 5 2 2 1 1
字幕:A E B D C F
步骤2:选择两个出现频率最小的数字,拉出两条线,并在交叉地方写上两个字的和。当有多个选项时,任意选取即可。
2
/ \
频率:6 5 2 2 1 1
字幕:A E B D C F
步骤3:重复步骤2,知道这些数字汇聚到一个点上。
17
/ \
/ 6
/ / \
11 4 2
/ \ / \ / \
频率:6 5 2 2 1 1
字幕:A E B D C F
步骤4:最后这些数字汇聚到一个点上,该点就是根,这样哈夫曼树也就完成了。按照从根部到底部的叶子这一顺序,在左边的树枝上写上0,右边的树枝上写上1。然后从根部开始沿着树枝到达目标文字后,再按照顺序把树枝上的0或者1记录下来就是哈夫曼编码了。
频率:6 5 2 2 1 1
字幕:A E B D C F
编码:00 01 100 101 110 111
认真观察可以发现,在用树枝连接数据时,我们是从出现¥[频率较低]的数据开始的,这就意味着出现频率较低的数据到达根部的枝条就越多。而枝条数越多,编码的位数也就随之增多。仔细观察还会发现两位的编码与任一个三位的编码的前两位¥[绝不相同],否者在解码时就有可能出现¥[歧义]。
6.7 非可逆压缩和可逆压缩
可逆压缩和非可逆压缩:Windows的标准图像数据形式为BMP,是完全未压缩的。由于与显示器以及打印机输出的bit(点)是可以直接¥[映射](mapping)的,因此便有了BMP(bitmap)这一名称。常用的图片格式还有:BMP(Bitmap)、JPEG(Joint(joint |dʒɔɪnt| n 关节、接合处 adj联合的) Photographic(|ˌfəʊtəˈgræfɪk| adj 摄影的) Experts(expert |ˈekspɜːt| n 专家 adj 熟练的) Group)、TIFF(Tag Image File Format)、GIF(Graphics Interchange(interchange n 交换 v 交替发生) Format)等。
对于图像来说通常使用¥[非可逆压缩]。因为对于图像来说,即使有时无法还原到压缩前那样鲜明的图像状态,只要肉眼看不出也没关系。例如JPEG格式使用的就是非可逆压缩。