文本压缩的几种方法
关键字编码
在数学表示中,我们会遇到 a = 1, b > 2 等一系列数学语言,在我们理解这些数学符号时,其实我们正在“解码”的过程中。
一篇文章中,如果多次出现 “apple”,我们就可以约定 “#” 等于 “apple”,于是 “this is an apple” 就是 “this is an #”,这样就减小了文本内容的大小,类似的编码方式,我们就称为关键字编码。
行程长度编码
一篇文章中,如果多次出现重复的内容,我们可以采用缩短“行程长度”的思想来减少文本内容。如 “AAAAA”,我们可以表示为 “5-A”,“111111”可以表示为“6-1”。
“行程长度编码”我们也称为“迭代编码”。
赫夫曼编码
赫夫曼编码是以它的创建者 David Huffman 博士的名字命名的。赫夫曼编码使用不同长度的位串来表示不同的字符,一些常用的字符用较短的位串表示,不常用的字符用较长的位串表示,这样我们在日常文本传输中就可以大大减少传输的位串数目。
常见的字符编码方式如 ascii 编码和 utf-16(就是我们常说的 unicode 编码)是定长编码,utf-8 则是变长编码。utf-16 和 utf-8 都能表示世界上几乎所有的字符。
现在有一个问题,赫夫曼编码是变长的,那我们怎么区分一个字符的位串长度呢?
赫夫曼编码的重要特征就是:表示一个字符的位串不会是表示另一个字符的位串的前缀,所以只要按对应的位串表逐一扫描,就能精确的确定每一个字符。