资源描述:
《自适应huffman编码算法研究及探究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、自适应Huffman编码算法研究及探究摘要:Huffman编码作为一种髙效而简单的可变长编码常用于信源编码。但现有的Huffman编码算法存在效率不高,同时应用受到一些限制,因此,提出一种自适应Huffman编码算法,该算法与其他的Huffman编码相比效率更高,应用范围更广。Abstract:Huffmancoding,asanefficientandsimplevariablelengthcoding,isusedinsourcecoding.ButtheexistingHuffmancodingalgorithmeff
2、iciencyisnothigh,butapplicationisalsolimited,therefore,thispaperproposesanadaptiveHuffmancodingalgorithm,thisalgorithmwithotherHuffmanencodingcomparedwithhighefficiency,wideapplicationrange・关键词:数据压缩;Huffman编码;自适应Huffman编码Keywords:datacompression;Huffmancoding;adapt
3、iveHuffmancoding中图分类号:TP39文献标识码:A文章编号:1006-4311(2012)35-0196-030引言如何采用有效的数据压缩技术在信息科学领域发挥着重要的作用,Huffman编码在数据压缩技术中得到了广泛的应用,笔者对Huffman编码的原理和存在的不足进行探讨,并在此基础上提出了自适应Huffman编码方法,从而解决Huffman编码的不足。1Huffman编码的原理和构造过程Huffman编码是1952年由Huffman提出的一种比较常用的变长编码方法,其主导思想是根据数据符号发生的概率进行
4、编码。在数据中出现概率越高的符号,相应的码长越短;出现概率越低的符号,其码长越长,从而达到用尽可能少的码符号表示源数据。Huffman编码需对原始数据进行两遍扫描,第一遍统计原始数据中各字符出现的频率,由此创建Huffman树并将其有关信息保存起来,以便解压时使用;第二遍则根据所得到的Huffman树对原始数据进行编码,并将编码信息保存起来。创建Huffman树的过程如下:①根据源数据符号出现的概率,求出各个符号出现的权值(Wl,W2,-Wn)构成n棵二叉树的集合F={T1,T2…Tn},其中每棵二叉树Ti中只有一个带权为W
5、i的根结点,其左右子数为空。②在F中选取两棵根结点的权值最小的树作为左右子树构造一新的二叉树,设置新二叉树的根结点的权值为左、右子树上根结点权值之和。③在F中删除所选取的两棵子树,同时将构成得到新二叉树加入到F中。④重复②、③直到F中只包含一个二叉树为止,这棵树便是Huffman树。以abcddbb为例作为待编码的原始数据符号。首先,统计出a、b、c、d四个字符在原始数据中出现的概率(权重),结果如表1所示。根据上述Huffman树构造过程,对“abcddbb”原始数据构造的Huffman树的过程如图1〜4所示。从Huffm
6、an编码的根结点出发,经右子树、左子树、左子树三步,到达包含字符a的叶结点,获得a字符的二进制编码:100。从根结点出发,经过左子树前进一步,就到达包含字符b的叶结点,获得b字符的二进制编码为:0,类似可得到c字符的二进制编码为:101,d字符的二进制编码为11,abcddbb的编码结果为:lOOOlOlllllOOo这种Huffman编码算法进行编码时,必须进行两次扫描,第一次扫描统计字符出现的概率(权重),并据此进行构造Huffman树;第二次扫描是按Huffman树的字符进行编码。在存储和传输Huffman编码时,必须
7、先存储和传输Huffman树,在实际应用系统中它有很大的局限性,特别在诸如通信等实时传输、处理的系统中,更不允许这种两次处理过程。因此,为改进该编码算法,提出了自适应Huffman编码方案。2自适应ITuffman编码原理和构造过程在叙述自适应Huffman编码之前,必须给每个结点引入两个新属性:结点编号和所属块。结点编号是一个全局唯一值,不同的结点拥有不同的点编号,而所属块是指具有相同权重的一组结点。其中结点编号需要具有以下特征:①权重越大的结点,结点编号越大。②父结点的编号总是大于子结点的编号。以上两点成为兄弟属性。自适
8、应Huffman编码的过程主要包括Huffman树初始和Huffman树更新。①Huffman树的初始化。初始化Huffman树时,由于对字符流进行一次扫描,因此,不能预先知道各字符的概率,为了对所有字符一致对待,Huffman树的初始状态只包含一个叶子结点,该叶子结点的符号为NYT(No