浅谈 前缀编码与哈夫曼编码

目录

关于编码的两个概念:

1 前缀编码

1.1 前缀编码概念

1.2 前缀编码实例分析(简洁易懂)

1.3 前缀编码作用 

2 哈夫曼编码

2.1 哈夫曼编码概念

2.2 哈夫曼编码的两条性质

2.3 哈夫曼编码的两条性质的证明 (摘取自严蔚敏老师的教材)


关于编码的两个概念:

1 前缀编码

1.1 前缀编码概念

前缀编码:如果在一个编码方案中,任何一个编码都不是其他任何编码的前缀(最左子串),则称该编码是前缀编码。

1.2 前缀编码实例分析(简洁易懂)

举个简单的例子,给出下面三种编码方案:

3种不同的编码方案
              等长编码方案                      不等长编码方案1        不等长编码方案2
字符 编码 字符 编码 字符 编码
a 00 a 0 a 0
b 01 b 10 b 01
c 10 c 110 c 010
d 11 d 111 d 111

分析:

  1. 如上图,不等长编码方案1是前缀编码;分析如下:在不等长编码方案1中,a,b,c,d为四个字符,其对应编码0,10,110,111中,任意一个编码(四个里面随便选)都不是其他任何编码的前缀,比如选择a的编码0进行比对,你会发现 10,110,111都不以0为前缀(都不以0开头)。 
  2. 如上图,不等长编码方案2不是前缀编码,分析如下,四个编码中,随便选一个,如果选0,会发现01,010都是以0为前缀,所以不符合前缀编码的定义,分析结束。

不知道大家有没有隐约有种意识,等长编码一定是前缀编码!

例如两位编码,00,01,10,11就是,同理,三位、四位...n位。

1.3 前缀编码作用 

前缀编码可以保证对压缩文件进行解码时不产生二义性,确保正确解码。



2 哈夫曼编码

2.1 哈夫曼编码概念

2、哈夫曼编码:对于一颗具有n个叶子的哈夫曼树,若对树中的每个左分支赋予0,右分支赋予1,则从根到每个叶子的路径上,各分支的赋值分别构成一个二进制串,该二进制串就成为哈夫曼编码。

哈夫曼编码的主要思想:在进行数据压缩时,为了使压缩后的数据文件尽可能短,可以采用不定长编码。其基本思想是:

未出现次数较多的字符编以较短的编码,为确保对数据文件进行有效的压缩和对压缩文件进行正确的解码,可以利用哈夫曼树来设计二进制编码。

2.2 哈夫曼编码的两条性质

哈夫曼树满足两条性质:

  • 性质1  哈夫曼树是前缀编码。
  • 性质2  哈夫曼树是最有前缀编码。 对于包含n个数据字符的文件,分别以它们出现的次数为权值构造哈夫曼树,则利用该树对应的哈夫曼编码对文件进行编码,能使该文件压缩后对应的二进制文件的长度最短。

2.3 哈夫曼编码的两条性质的证明 (摘取自严蔚敏老师的教材)

关于此两条性质的证明如下图(图片参考自严蔚敏 数据结构教材):

浅谈 前缀编码与哈夫曼编码_第1张图片

 

 

你可能感兴趣的:(#,数据结构)