- 23
- 0
- 约3.23千字
- 约 6页
- 2018-03-16 发布于北京
- 举报
基于Huffman编码的压缩技术的Java实现
摘要:当前,广泛采用的无损压缩技术主要有2种,一种是短语式压缩,另一种是编码式压缩。本文介绍采用java编程语言利用Huffman算法实现文件的压缩功能,是实现的编码式压缩技术。
关键词:压缩技术;霍夫曼编码;java
中图分类号:TP393.09文献标识码:A文章编号:1009-3044(2008)11-20349-02
在某一个特定的文件系统中,某些字符可能会累计重复出现多次。编码压缩技术采用的原理就是统计这些字符出现的频率,并根据频率的高低对该字符进行编码。这样,处理全部信息的总码长一定小于实际信息的符号长度,从而达到压缩的目的。
本文用java实现的Huffman编码压缩技术是实现的编码式压缩技术。
1 Huffman编码原理
霍夫曼(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: 000 C:01;D:001。译码字符串为:1000101010011。长度为13位,比16又小。对于应用文档来说,一般会有大量词汇重复出现,这样两者之间的差距也随着文件的大小与词汇重复出现的频率而越来越高。
2 用java实现huffman压缩算法的程序流程
3 程序实现
根据上面的流程以及huffman算法的原理,有如下的程序类组织结构:
3.1 程序相关类
Frame类:框架类,用于实现程序的界面,其中还包括文件的读入,统计字符的频率,各字符按频率排序等函数
HuffmanNode类:利用Huffman算法的特点,进行Huffman数据结构定义,如图2。
BuildHuffman类:初始化Huffman树,并得到编码。其中包括生成Huffman树结构的函数(具体实现参看附程序),编码函数,写二进制文件函数,解码函数等,结构参看图3。
3.1.1 在Frame类中,可能会遇到的问题
在图1的步骤1中(也就是在统计字符串频率时),对于简单的英文字母与数字字符来说,没有什么难度。而对于统计中文字符或其他一些由2个字节构成的字符时,可能会遇到某些问题。因为在对文件进行遍历统计频率时,需要对读入字符的步长加以控制。如果是单字节的字母,则步长为1,而如果是2个字节的字符,步长就需要相应的改为2。这样,就存在一个步长控制问题了。根据目前国际通用的Unicode代码表示的汉字存储区位,位于4E00~9FFF的为中日韩文字,其他双字节字符也有相应固定的区位。有这样的unicode编码条件,问题就可能解决了:在读入字符时,只需要判断读入的字符是否是位于双字节字符的存储区中。而对于java1.5以上的版本中,character类中提供了isHighSurrogate函数。该函数能判断能判断所读入的字符是否是双字节字符的前半部分。这样就能有效解决读入字符步长控制问题。从而正确统计各种类型的字符出现频率(代码可以见附表)。
3.1.2 构造HuffmanNode类
HuffmanNode是一个定义的典型的Huffman型的数据结构。具体形式如图2。
图2就是即将构造的Huffman结构。接下来需要将按频率已经排好序的各字符初始化成该类的实例(具体方法参见上述1中的原理与附录中的程序片段),构造一棵带有各字符符号及出现频率的Huffman树。这样,从树根开始遍历各个叶子结点。按照每经历一次左孩子取0,经历一次右孩子取1的方法,得到各个叶子接点的Huffman编码。并将该编码存入该类实例的变量:bh中,以备解码时或其他需要(编码函数见附录的Encode函数)。
3.1.3 BuildHuffman类
您可能关注的文档
- 基于ASP网站SQL注入防御的方法.doc
- 基于ASP网站的安全防范.doc
- 基于ASS与UMDS的安全教务管理系统的设计.doc
- 基于Asterisk平台的IP_PBX设计.doc
- 基于ASTER遥感数据源的Creator三维地形建模技术研究.doc
- 基于AT89S51单片机的“追足球”机器人的设计与实现.doc
- 基于AT89S51单片机的LED点阵显示屏设计.doc
- 基于AT89S51单片机的串行通信系统设计.doc
- 基于AT89S51的低成本单片机实验板的开发与设计.doc
- 基于AT89S51的电子琴设计.doc
- 25-26学年政治(部编版)选择性必修第二册课件:第1单元 周清1 民法中的人身权及财产权.pptx
- 25-26学年政治(部编版)选择性必修第二册课件:1.4.1 权利保障 于法有据.pptx
- 2025北京丰台区高二(上)期中地理(A卷)含答案.docx
- 2025北京三帆中学初三(上)开学考英语试题含答案.docx
- 2025北京一零一中初三9月月考语文试题含答案.docx
- 2025北京海淀区初三(上)期中道法试题含答案.docx
- 2025北京丰台区高一(上)期中政治(A卷)含答案.docx
- 25-26学年政治统编版必修4课件:3.3 唯物辩证法的实质与核心.pptx
- 25-26学年政治统编版必修4课件:7.2 正确认识中华传统文化.pptx
- 湖北省部分高中2026届高三上学期二模联考 历史试卷.docx
最近下载
- 附录B规范性附录AGC性能指标计算及补偿-中国电力企业联合会.DOC
- 山东省烟台市蓬莱区2022-2023学年六年级上学期期末数学试题(五四学制) (含答案解析).docx VIP
- YQ-15-烟用材料许可使用物质名 单系列标准.pdf VIP
- 2019-2020学年四川成都锦江区五年级上册语文期末试卷及答案.pdf
- 基于ABAQUS的动力总成悬置支架仿真分析方法研究.docx VIP
- 【三套试卷】【浙教版】小学三年级数学上册第一单元教材检测题附答案.pdf VIP
- EMT会议管理制度.docx VIP
- 十年(2016-2025)高考物理真题分类汇编(全国通用)-专题23 法拉第电磁感应定律.docx VIP
- 渠道维护工高级技师考试答案(强化练习).docx VIP
- 动量和能量中的滑板块模型专题.docx VIP
原创力文档

文档评论(0)