5、神秘电报密码——哈夫曼编码
5.1 算法设计
-
哈夫曼编码的基本思想是以字符的使用频率作为权构建一颗哈夫曼树,然后利用哈夫曼树对字符进行编码。构造一颗哈夫曼树,是将所要编码的字符作为叶子节点,该字符在文件中的使用频率作为叶子节点的权值,以自底向上的方式,通过n-1次的“合并”运算后构造出一棵树,核心思想是权值越大的叶子离根越近。
-
哈夫曼算法采取的贪心策略是每次从树的集合中取出没有双亲且权值最小的两棵树作为左右子树,构造一颗新树,新树根结点的权值为其左右孩子结点权值之和,将新树插入到树的集合中,求解步骤如下:
(1)数据结构
- 哈夫曼树中没有度为1的结点,则一棵树有n个叶子结点的哈夫曼树共有2n-1个结点(n-1次的“合并”,每次产生一个新节点)
- 构造哈夫曼树后,为求得编码,需从叶子节点除法走一条从叶子节点到根的路径。
- 译码需要从根路径出发走一条从根路径到叶子节点的路径,那么这时需要直到每个结点的权值、双亲、左孩子、右孩子和结点信息。
(2)初始化。构造n棵结点为n个字符的单节点树集合T={t1,t2,……,tn}