前缀编码是什么?哈夫曼编码是什么?

前缀编码:

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

前缀编码怎么判断

如上图,不等长编码方案1是前缀编码;

分析如下:

在不等长编码方案1中,a,b,c,d为四个字符,其对应编码0,10,110,111中,任意一个编码(四个里面随便选)都不是其他任何编码的前缀,比如选择a的编码0进行比对,你会发现 10,110,111都不以0为前缀(都不以0开头)。 

如上图,不等长编码方案2不是前缀编码;

分析如下:

四个编码中,随便选一个,如果选0,会发现01,010都是以0为前缀,所以不符合前缀编码的定义,分析结束。

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

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

前缀编码作用 :

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

公号众陆小马获取更多资料。

哈夫曼编码:

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

哈夫曼编码的主要思想:

在进行数据压缩时,为了使压缩后的数据文件尽可能短,可以采用不定长编码。

其基本思想是:

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

哈夫曼树满足两条性质:

性质1  哈夫曼树是前缀编码。

性质2  哈夫曼树是最有前缀编码。

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

猜你喜欢

转载自blog.csdn.net/qq_30787727/article/details/112210023