最优前缀编码
1.问题
2.解析
构造最优前缀码的贪心算法就是哈夫曼算法(Huffman)
哈夫曼编码的基本思想是以字符的使用频率作为权构建一棵哈夫曼树,然后利用哈夫曼树对字符进行编码。
构造一棵哈夫曼树,是将所要编码的字符作为叶子结点,该字符在文件中的使用频率作为叶子结点的权值,以自底向上的方式,通过n-1次的“合并”运算后构造出的树。核心思想是让权值大的叶子离根最近。
哈夫曼算法采取的贪心策略是每次从树的集合中取出没有双亲且权值最小的两棵树作为左右子树,构造一棵新树,新树根节点的权值为其左右孩子结点权值之和,将新树插入到树的集合中。
3.设计
For i =1 to n-1{
creat z //构造新父节点
z.left = C中最小元x
z.right = C中最小元y
z.weight=x.weight+y.weight
insert(T,z) //将节点插入树T中
}
return T
4.分析
算法时间复杂度:
T(n)=O(nlogn)
5.源码
https://github.com/Adrianna-Yu/algorithm/blob/main/hfm