LZW编解码算法实现与分析_C语言实现

一.    lzw编解码原理概述

1.      lzw简介

       LZW压缩算法由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。

       LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如"print" 字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将"print"字符串存入串表中,在图象解码时遇到数字266,即可从串表中查出266所代表的字符串"print",在解压缩时,串表可以根据压缩数据重新生成。

 

2.      lzw编解码举例:

2.1 编码

       输入流:a  a  b  b  b  a  a  b  b  .....
       初始标号集:

0

1

2

3

a

b

压缩过程:

第几步

前缀

后缀

Entry

认识(Y/N)

输出

标号

1

a

(,a)

2

a

a

  (a,a)

      N

0

4

3

a

b

  (a,b)

      N

0

5

4

b

b

  (b,b)

      N

1

6

5

b

b

  (b,b)

      Y

6

6

a

  (6,a)

      N

6

7

7

a

a

  (a,a)

      Y

8

4

b

  (4,b)

      N

4

8

9

b

b

  (b,b)

      Y

10

6

  (6,)

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值