-
问题
代码(码字):Q {001,00,010,01}表示字符 a, b, c, d
同一序列:0100001
产生两种译码(产生歧义):01 00 001; 010 00 01
二元前缀码:任何字符的代码不能作为其他字符代码的前缀
利用二元前缀码译码:从第一个字符开始一次读入每个字符(0 或 1),如果发 现读到的子串与某个码字相等,就将这个子串译作对应的码字;然后从下一个字符开始继续这个过程,直到读完输入的字符串为止。
二元前缀编码存储:二叉树结构,每个字符作为树叶,对应这个字符的前缀码看作根到这片树叶的一条路径,每个结点通向左二子的边记作 0,通向右儿子的边记作 1。
字符集合C={x1,x2…,xn}
xi的频率是 f(xi)
d(xi)表示字符xi二进制位数,也就是xi的码长
二元前缀编码:二叉树
码字:树叶
码字的二进制位数:树叶的深度
存储一个字符所使用的二进制数的平均值最优二元前缀码:每个码字平均使用二进制位数最小的前缀码,称为最优二 元前缀码。
问题:给定字符集C={x1,x2…,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码。 -
解析
哈夫曼算法:
1)初始化n个单节点的树,每个字符的概率记在树的根中,用作树的权重。
2)找到两棵权重最小的树,把它们作为新树中的左右子树,并把权重和记作新的权重记录在新树的根中。
3)重复第二步直到只剩一颗单独
最优前缀编码
最新推荐文章于 2021-06-23 01:40:40 发布
本文介绍了二元前缀编码的概念,强调了避免编码歧义的重要性。哈夫曼编码是一种构造最优二元前缀码的方法,通过初始化单节点树,不断合并权重最小的树来构建。提供的哈夫曼算法包括初始化、合并最小树的过程,其时间复杂度为O(nlogn)。此外,还解释了如何通过二叉树结构存储和解析编码。
摘要由CSDN通过智能技术生成