赫夫曼算法及其应用研究与实现.docVIP

  • 10
  • 0
  • 约1万字
  • 约 21页
  • 2018-09-21 发布于福建
  • 举报
赫夫曼算法及其应用研究与实现

赫夫曼算法及其应用研究与实现   摘#8195;要 本文主要给出了数据结构中的Huffman算法,并详细介绍了Huffman算法,Huffman编码,按照这一思路,将其应用于通信编码、多分支结构程序设计中,提高了效率。结合计算机文件存储方式,设计并用软件实现了对文件的数据压缩,其过程主要分为压缩和解压缩两部分。在应用Huffman编码进行压缩时,其压缩效率与文件大小无关,只与文件中字符出现的频率有关。根据字符出现的概率来构造平均长度最短的编码,它是一种变长的编码。在编码中,若各编码长度严格按照编码所对应符号出现概率的大小排列,则编码的平均长度是最小的。本文的主要目的是通过对Huffman算法的论述和演示,阐述了Huffman算法的原理及其特性,说明了这种压缩算法的优越性和它被广泛应用的原因。且在数据压缩等领域中,Huffman算法是一种常用的数据压缩方法,应用结果表明,该算法具有很高的实用价值。   关键词 Huffman算法;平均长度;数据压缩   中图分类号 TP 文献标识码 A 文章编号 1673-9671-(2011)112-0166-04      1 Huffman算法的概述   所谓赫夫曼算法是由赫夫曼(D.A.Huffman)在1952年最早就构造带权路径长度WPL最小的二叉树(亦称最优二叉树或赫夫曼树)而给出的一个带有一般规律的算法,其算法描述如下。   1)根据给定的n 个权值{ω1,ω2,…,ωn}构成n棵二叉树的森林集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权值为ωi的根结点,其左右子树为空。   2)在森林F中任意选取两棵根结点的权值最小的树作为左右子树,构造一棵新的二叉树,且设置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。   3)在F中删除这两棵树,同时将新得到的二叉树加入F中。   4)重复2)和3),直到森林F只含一棵树为止。这棵树便是赫夫曼树。在得到最优二叉树之后,从叶子出发走一条从叶子到根的路径即可得到该叶子结点字符对应的Huffman编码。   本文中的Huffman编码采用一维数组表示,其中每个元素是一个带有头结点的线性链表。对线性链表的插入操作是在表头进行的。为了求得赫夫曼编码,首先是要构造是一种带权路径长度最短的二叉树,即最优二叉树。赫夫曼首先给出了该类树的构造方法,故称其为赫夫曼算法,同时也把用此方法构造的树称为赫夫曼树。该算法的核心思想就是在没有严格限定工作经验(权)调整工作步骤的顺序,使权值越大的结点离根结点越近,以寻求工作总量的极小化。   根据赫夫曼算法,我们可以构造赫夫曼(HUFFMAN)树,编写赫夫曼编码。赫夫曼编码是赫夫曼树的一个应用。赫夫曼编码应用广泛,如通信编码和判定程序等方面中就广泛应用了赫夫曼编码。   2 Huffman树及Huffman编码的存储表示   2.1 Huffman树   赫夫曼树又称最优二叉树,是一类带权路径长度最短的树。在引入赫夫曼树之前,先简要介绍几个概念。   如果在一棵树中存在着结点序列k1,k2,...,kj,使得ki是ki+1的双亲(1=ij),则称k1,k2,...,kj是从k1到kj的路径,由于树中每个结点都有且只有一个双亲结点,所以它也是这两个结点之间的唯一路径。从k1到kj所经过的分支数我们称为这两点之间的路径长度。   树的路径长度是从树的根结点到每个分支结点所经过的分支数。通常我们将树中的结点赋上一个有着某种意义的实数,我们称这个实数为该结点的权,所以结点的带权路径长度规定为从根结点到该结点之间的路径长度与该结点上权的乘积。所以树的带权路径长度规定为树中所有叶子结点的带权路径长度之和。   所谓树的带权路径长度就是树中所有叶子结点的带权路径长度之和。通常记作WPL=(W1*L1+W2*L2+W3*L3+…+ Wn*Ln),假设有n个权值{W1,W2,W3...,Wn}构成一棵有n个叶结点的二叉树,相对应的叶子结点的路径长度分别为{L1,L2,L3...,Ln}。我们可以证明其中WPL值最小的为哈夫曼树。   定义1:假设有n个权值{ω1,ω2,……,ωn},在具有n个叶子结点且分别以其为权值的二叉树中,带权路径长度最小的二叉树称做最优二叉树或赫夫曼树(Huffman树)。   在用二叉树来设计二进制的编码时,如约定左分支表示字符0,右分支表示字符1,则从根结点到叶子结点的路径上分支字符组成的字符串作为该叶子结点字符的编码。该编码一定是前缀编码。   定义2:对应最优二叉树的二进制前缀编码称为Huffman 编码(或赫夫曼编码)。   2.2 Huffman编码的存储表示   typedef struct   { unsigned i

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档