1.哈夫曼编码 Huffman code:
是一种文本压缩算法,这种算法依据的是不同符号在一段文本中相对出现的频率。假设一个文本是由a,u,x,z组成的字符串,其长度为1000,每个字符用1字节来存储,共需要1000字节,即8000位。如果每个字符用2位二进制来编码:00=a, 01=x, 10=u, 11=z.那么,用2000位空间即课表示1000个字符。此外,我们还需要一定的空间来存放编码表,它可以采用如下的存储格式:
符号个数,代码1,符号1,代码2,符号2,...
符号个数即以及每个符号分别占8位,每个代码占 log2(符号个数) 向上取整 位。因此,在这个例子中,编码表需要5*8+4*2 = 48 位。压缩比为8000/2048 = 3.9。
即一段文本的压缩结果是:压缩有的字符串+编码表。
在字符串aaxuaxz中,a出现3。一个符号出现的次数称为频率frequency. 当不同字符出现的频率有很大差别时,我们可以通过可变长编码来缩短编码串的长度。这带来一个 问题:每次提取多少为代码来解释符号?——只要没有任何一个代码是另一个代码的前缀就可以!因此,当从左到右检查编码位串时,可以得到与一个确切的代码相匹配的字符。</