Huffman编码实现文本文件压缩

整理旧的博客 2009-03-10 21:36:25

这是当初大二时候的课程设计文档

 

PS:很多人留邮箱求源码......囧,好多年前的东西,翻不到了,自个实现一个也不难吧

--------------------------------------------------------------------

辛苦做完了估计老师也不看~~~

貌似这是俺的劳动成果~~~~~O(∩_∩)O~

        

数据结构课程设计报告【一】

课程设计题目:文本文件压缩【一】

 

 题目: 文本文件压缩解压

 需求分析

  输入:文本文件(压缩文件)

  输出:压缩文件(文本文件)  (压缩率)

  知识点:堆排序、霍夫曼树、二叉树遍历、存储数据结构设计

      文件流操作、字符汉字编码方式、二进制文件读写

  备注:字符文件、汉字文件的压缩与解压

 解决问题要点:

1.      文本文件,二进制文件及数据流的操作

2.      英文字符,中文字符的存储与识别【难点】

3.      压缩及解压的主要思想【重点】

4.      Huffman树的构造

5.      编码的获取

6.      压缩文件的存储形式[huffman编码信息及数据存储]

7.      对文本文件最后一个字符的处理[补位数:压缩,解压无错误]

        以上七点即解决问题的关键,仅仅了解整个思想是远远不够的,整个过程中,很多细节需要注意,把握要点的同时,要在具体实现中注意细节。

模块及框架设计:

按功能需求,主要分为五个模块

主要模块:

1.      压缩模块

2.      解压模块

辅助模块:

 1.  字符识别及权重获取

2.  Huffman树构造

3.  获取huffman编码

 

 主要设计及具体实现 【实现代码(带注释)】

压缩解压的实现思想及原理

定义:利用算法将文件有损或无损地处理,以达到保留最多文件信息,而令文件体积变小。

在文本文件中,一个ASCII码占用一个字节空间(1Byte),汉字由两个字节构成(区码和位码),区码和位码分别用ASCII码的161-255字符表示,共94*94=8836个【GB2312编码】

即,无论字符还是汉字,均可由ASCII码表示,我们可以以二进制文件形式将一个文本文件读入,分析每个ASCII码的频数,构造huffman树,并得到相应的编码。

编码是由0、1组成的一串数字,出现频率越高的字符,其编码越短,通过这个特性,我们可以将每8位组成一个新的字符(1Byte),输出到压缩文件中,达到压缩的目的。

例如:

已知  a: 000  b:10  c: 001  d:01   e:11 

如果其中的一段是::abcde 则处理如下:

补上两位

    a     b    c      d     e  

   000   10   00  1  01   11   00

每次取7位【取8位亦可,但此处为了处理最后一个字符,只取7位】

0+7位凑成1Byte,转化为相应AscII码输出

最后一位一般不能刚好凑够8 bit 所以需要补上0

而补上的0的个数记录为补位数 【补位数的处理】

原来:  5*1Byte=8 Byte

处理后:2*1Byte=2 Byte

        仅为原来的四分之一,达到了压缩的目的

 

字符,汉字处理方式

字符,即ASCII码,ASCII编码由8位组成࿰

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值