哈夫曼编码思想,假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字母构成。它们在电文中出现的频度分别为{0.31,0.16,0.10,0.08,0.11,,0.20,0.04},

目录

问题

哈夫曼思想(图解):


问题

1)为这7个字母设计哈夫曼编码

a:11 b:101 c:010 d:1001 e:011 f:00 g:1000 

2)为这7个字母设计等长编码,至少需要几位二进制数?

为这7个字母设计等长编码,至少需要3位二进制数

3)哈夫曼编码比等长编码使电文总长压缩多少?

 等长编码长度:(0.31+0.16+0.1+0.08+0.11+0.2+0.04)×3=3

哈夫曼编码长度:0.31×2+0.16×3+0.1×3+0.08×4+0.11×3+0.2×2+0.04×4=2.61

哈夫曼编码比等长编码使电文总长压缩:(3-2.61)÷3  = 13%

总感觉网上有的和这个一模一样的题但是就是和我算的不一样,感觉他们算错啦(若我有错欢迎指正)

哈夫曼思想(图解):

网上比较好理解的图与解释

构建思想:所有的叶子节点构成了最初的森林(所有树的集合),我们可以使用priority_queue对这些树进行管理,使得集合中的数据始终保持着递增的顺序。然后,每次就让前两个元素出队,再构造一个新的节点(树),其权值为出队的两个元素权值之和,左子树为前面第一个元素,右子树为前面第二个元素,这样集合中元素的个数-1。如此做,直至集合中只剩余一个节点(根节点)为止,此时仅有的这棵树便是哈夫曼树。

 

 

 

 

 

原创文章 96 获赞 28 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43813140/article/details/105880291
今日推荐