本栏目责任编辑:贾薇薇计算机工程应用技术
基于Huffman编码的压缩技术的Java实现
陈旭辉,范肖南,巩天宁
(安徽理工大学,安徽淮南232001)
摘要:当前,广泛采用的无损压缩技术主要有2种,一种是短语式压缩,另一种是编码式压缩。本文介绍采用java编程语言利用Huffman算法实现文件的压缩功能,是实现的编码式压缩技术。
关键词:压缩技术;霍夫曼编码;java
中图分类号:TP393.09文献标识码:A文章编号:1009-3044(2008)11-20349-02
CompressedTechnologyBasedonHuffmanCodebyJava
CHENXu-Hui,FANXiao-Nan,GONGTian-Ning
(AnhuiUniversityofScienceandTechnology,Huainan232001,China)
Abstratct:Therearetwomainlywaysinunlossingcompressedtechnologynowadays:oneisshort-Vacabulary-Compress,theotherisEn-coding-Compress.ThisarticlwillmanifestthecompressedtechnologyofUsingHuffmanalgorithm,whichbelongstoTheEncoding-Compressed-Technology.
Keywords:CompressedTechnology;HuffmanCode;Java
在某一个特定的文件系统中,某些字符可能会累计重复出现多次。编码压缩技术采用的原理就是统计这些字符出现的频率,并根据频率的高低对该字符进行编码。这样,处理全部信息的总码长一定小于实际信息的符号长度,从而达到压缩的目的。
本文用java实现的Huffman编码压缩技术是实现的编码式压缩技术。
1Huffman编码原理
霍夫曼(Huffman)编码是1952年为文本文件而建立,是一种统计编码。属于无损压缩编码。霍夫曼编码的码长是变化的,对于出现频率高的信息,编码的长度较短;而对于出现频率低的信息,编码长度较长。
构造Huffman编码的可以先将原始数据构造成一棵带权值的Huffman树。步骤如下:
(1)将信号源的符号按照出现概率递减的顺序排列。
(2)将两个最小出现概率进行合并相加,得到的结果作为新符号的出现概率。
(3)重复进行步骤1和2直到概率相加的结果等于1为止。
(4)在合并运算时,概率大的符号用编码0表示,概率小的符号用编码1表示。
(5)记录下概率为1处到当前信号源符号之间的0,l序列,从而得到每个符号的编码。
例如电文“ABACCDA”,有4种字符。可以用两位二进制代码:00,01,10,11分别表示A,B,C,D。译码为”00010010101100”。这样的二进制串长度为16位。比原始的字符串长度8*8=64远小。若采用Huffman编码,则得:A:1;B:000C:01;D:001。译码字符串为:1000101010011。长度为13位,比16又小。对于应用文档来说,一般会有大量词汇重复出现,这样两者之间的差距也随着文件的大小与词汇重复出现的频率而越来越高。
2用java实现huffman压缩算法的程序流程
图1程序流图
3程序实现
根据上面的流程以及huffman算法的原理,有如下的程序类组织结构:
3.1程序相关类
Frame类:框架类,用于实现程序的界面,其中还包括文件的读入,统计字符的频率,各字符按频率排序等函数
HuffmanNode类:利用Huffman算法的特点,进行Huffman数据结构定义,如图2。
BuildHuffman类:初始化Huffman树,并得到编码。其中包括生成Huffman树结构的函数(具体实现参看附程序),编码函数,写二进制文件函数,解码函数等,结构参看图3。
3.1.1在Frame类中,可能会遇到的问题
收稿日期:2008-02-27
作者简介:陈旭辉(1979-),男,湖南益阳人,硕士研究生,研究方向:数据库方向;范肖男(1956-),男,安徽合肥人,教授,研究方向:矿物加工方面的教学与研究;巩天宁(1982-),男,安徽泗县人,研究方向:单片机技术。
349