700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 二进制哈夫曼编码c语言实现 二进制霍夫曼编码

二进制哈夫曼编码c语言实现 二进制霍夫曼编码

时间:2018-08-16 14:52:01

相关推荐

二进制哈夫曼编码c语言实现 二进制霍夫曼编码

通过查看其他博客的内容,整理一篇关于二进制霍夫曼编码的笔记供大家参考和讨论,如果有错误,欢迎大家联系我批评指正。

一、二进制霍夫曼的原理

我们可以将二进制霍夫曼编码拆分理解:

二进制即 0、1;

二进制编码就是用0和1的组合来表示其他字符;

霍夫曼编码(Huffman Coding)是一种编码方式,是一种用于无损数据压缩的熵编码(权编码)算法,通常用于无损数据压缩。(详见维基百科:/wiki/Huffman_coding#n-ary_Huffman_coding)

二、编码方法:

1.将信源中n个符号按概率分布的大小,以递减次序排列(降序排列);

2.用0和1分别分配给概率最小的两个信源符号,并将这两个概率最小的信源符号合并为一个新符号,并用这两个概率最小的信源符号合并成一个新符号,从而得到只包含n-1个符号的新信源,称其为缩减信源;

3.把缩减信源的符号仍按概率大小降序排列,再将最后两个概率最小的符号合并为一个新符号,并分别用0、1表示,这样又形成一个新的缩减信源;

4.按2、3步骤继续进行直到缩减信源最后只剩下两个符号位置。再将最后两个新符号分别用0和1表示。最后这两个符号的概率之和为1,然后从最后一级缩减信源开始,依编码路径右后向前返回,就可以得到各信源符号所对应的码符号序列,即对应的码字。

通过典型的两个例题来介绍。

例题一:字符串“alibaba”的二进制霍夫曼编码有多少位?

1.1计算符号的概率并进行降序排序。

符号

概率

a

3/7

b

2/7

i

1/7

l

1/7

1.2构建二叉树

1.3从根节点数,得到a、b、i、l 对应的码字。

符号

概率

编码

a

3/7

0

b

2/7

11

i

1/7

100

l

1/7

101

例题二:现有一段文言文,要通过二进制哈夫曼编码进行压缩。假设这段文言文只由4个汉字“之”“乎”“者”“也”组成,它们出现的次数分别为700、600、300、200。那么,“也”字的编码长度是?

同理,按照例题一的三个步骤进行就可以得到:

符号

概率

编码

700

0

600

11

300

101

200

100

答:3位。

这道“之乎者也”没有像例题一一样出现相同的概率,但是其实保证字符的码字具有唯一性就行了。

例题三:字符串“ABCDADA”的二进制哈夫曼编码有多少位?

符号

概率

编码

A

3/7

0

D

2/7

10

C

1/7

111

B

1/7

110

所以字符串“ABCDADA”的二进制哈夫曼编码为(0110111100100),共13位。

出现次数越多的字符,编码越短;出现次数越少的字符,编码越长。这样就能让编码后的文件大小能够最短。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。