-
问题给定字符集C={x1,x2,…,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码。
-
解析哈夫曼算法:
1)初始化n个单节点的树,每个字符的概率记在树的根中,用作树的权重。
2)找到两棵权重最小的树,把它们作为新树中的左右子树,并把权重和记作新的权重记录在新树的根中。
3)重复第二步直到只剩一颗单独的树。
-
设计
第一步:初始化n个单节点的树,并为它们标上字母表中的字符。把每个字符的概率记在树的根中,用来指出树的权重(更一般地来说, 树的权重等于树中所有叶子的概率之和)。第二步:重复下面的步骤,直到只剩一棵单独的树。找到两棵权重最小的树(对于权重相同的树,可任意选择其一)。把它们作为新树中的左右子树,并把其权重之和作为新的权重记录在新树的根中。 -
分析O(nlogn)频率排序;
for 循环:O(n);
插入操作:O(logn)
算法时间复杂度是 O(nlogn) -
源码
https://github.com/hackkkkkk/calculate
作业11:最优前缀码
最新推荐文章于 2022-11-25 19:50:32 发布