`
baowang
  • 浏览: 8860 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

lzw压缩机制简单讲解

阅读更多

今天又是没什么事情干,还是测试用例,无聊看了看论坛,有人争论压缩。我主要是看看了lzw数据压缩,当让还自己瞎写的一个 利用ascll的压缩。
先说说 lzw 主要的应用就是GIF,简单讲讲他的原理把。说不清楚别怪小弟啊。
这个压缩在重复字符比较多的时候压缩效果是比较好的。
例如:这个例子是从别人那摘的

  ababbacb  

 前缀:ab那a就是前缀。

 后缀:ab那b是后缀。

 我们这里以2元为一组。

      前缀    后缀   词              存在对应码   输出  编码

1.             a       (,a)                        

2.   a         b        (a,b)            n             a     256

3.   b         a        (b,a)            n             b      257

4.   a          b       (a,b)            y

5.   256     b        (256,b)        n            256    258

6.   b         a         (b,a)           y

7.   257     c          (257,c)        n            257     259

8.   c           b         (c,b)          n            c           260

 

 

上面的压缩

1.在一个保存 的仓库中 去查找每一步的词是否在这个仓库中。

2.如果不存在,则把这个前缀输出,因为不存在这个词,那么前缀肯定是不会在被编码了。而后缀可以和下一个字符形成的词存在仓库中。所以说 这个2元组,并不是代表2个字符,而是大于等于2 个字符。

3.如果存在,那我不用急着输出,因为可能和下一字符形成的词还在仓库中,直到不存在时,这就是我把这几个字符压缩后所替代的编码。

 

大概说说了这个原理。代码从我的描述看 ,递归是个比较重要的步骤,大家可以自己想想。

 

 

 

 

今天在论坛上看见他们说了 20位数字压缩成10之内字符。

 

用ascll码来看的话,0-127都可以被压缩成一个字符。根据这个原理的话, 是没问题的。

 

代码是我随意写的,有些什么规范,效率什么的都没考虑就是实现了个功能。呵呵

 

 private static String a="1237593842947829353985793847589234";
 private static String b="";
 public static void main(String args[]){
      
 
  ys(0);
  System.out.println(b);
  jy();
 }
 
 
 
 //ascll码压缩
 public static void ys(int count){
     int length=a.length();
     char k;
  while(count+3<length){
   String s=a.substring(count, count+3);
   int c=Integer.parseInt(s);
   if(c>127){
    String e=s.substring(0, 2);
    count=count+2;
    k=(char)Integer.parseInt(e);
    b+=k;  
   }
   else{
    count=count+3;
    k=(char)c;
    b+=k;
   }
  }
  if(length-count==3){
   String f=a.substring(count, length);
   int g=Integer.parseInt(f);
   if(g>127){
    String e=f.substring(0, 2);
    k=(char)Integer.parseInt(e);
    b+=k;
    k=(char)Integer.parseInt((f.substring(2, 3)));
    b+=k;
   }
   else
   {
    b+=(char)Integer.parseInt(f);
   }
   
  }
  else {
   String f=a.substring(count, length);
   b+=(char)Integer.parseInt(f);
   
  }
  
  
 }
 
 
    //ascll解压
 public static void  jy(){
  int length=b.length();
  int count=0;
  while(count<length){
   String s=b.substring(count,count+1);
   int m=s.charAt(0);
   count++;
   System.out.print(m);
  }
 }

 

压缩 应该就是一个编码问题,使“xxxxxxxx”数据编码成“yyyy” 从而减少了信息量。但要有一一对应关系,使得压缩后可以被解压缩。在大学学数据结构时,霍夫曼编码,哈希编码有点了解。解压缩我不了解,只是记录下,有错误的见谅

 

 

分享到:
评论

相关推荐

    Introduction to Data Compression, 5th Edition.zip

    4. LZW编码和字典编码:分析字典编码的机制,包括滑动窗口和自适应版本。 5. 小波压缩与离散余弦变换(DCT):讲解在图像压缩中广泛使用的有损压缩技术,如JPEG和JPEG 2000。 6. 视频压缩:涵盖MPEG系列标准,如MPEG...

    数据结构算法与应用-C++语言描述(单文件含目录版)

    - **LZW压缩的实现**:讲解了LZW压缩算法的具体实现细节。 - **LZW解压缩**:介绍了LZW解压缩算法及其工作原理。 - **LZW解压缩的实现**:讲解了LZW解压缩算法的具体实现细节。 **第8章 二叉树和其他树** 1. **...

    Java实战入门[一个资深Java培训老师倾力收藏].pdf

    第二十一章“LZW字典压缩(扩展)”介绍了数据压缩技术中的LZW字典压缩算法,包括压缩的原理和基本步骤。 最后,在附录部分,本书还提供了如何提高学习效率的建议,帮助读者在学习Java的过程中事半功倍。 全书贯穿了...

    使用clean函数式编程

    - **数据压缩工具**:展示如何利用Clean实现高效的数据压缩算法,例如LZW压缩等。 - **更多案例**:书中还包括其他一些实用的应用示例,帮助读者更深入地理解Clean语言的应用场景和实践技巧。 #### 五、Clean语言...

    重庆大学多媒体基础复习重点 2011级

    - **LZW编码**:讲解LZW(Lempel-Ziv-Welch)编码及其解码过程。 #### 第5章 彩色数字图像基础 - **图像属性**:讲解分辨率、像素深度等基本属性的概念。 - **色彩模型**:介绍相加混色模型和相减混色模型及其应用...

    编码的奥秘

    021.PDF可能涵盖了数据压缩技术,如 Huffman 编码、LZW压缩或JPEG图像压缩。这些方法通过减少冗余信息来减小文件大小,使得数据传输更快,存储更高效。 017.PDF可能讨论了错误检测和纠正码,如奇偶校验位、CRC...

    《信息论》课件

    6. **数据压缩**:数据压缩是信息论中的一个重要应用,包括无损压缩(如LZ77、LZW算法)和有损压缩(如JPEG图像压缩、MP3音频压缩)。这些压缩方法利用数据的统计特性来减小存储空间。 7. **通信系统模型**:课程...

    Compressed例程

    1. 压缩算法的详细讲解文档,帮助你理解各种压缩方法的基本原理。 2. 实现压缩和解压缩功能的源代码示例,这可能是用C++、Python或其他编程语言编写的,你可以通过阅读和分析这些代码来提升你的编程技能。 3. 测试...

    android-gif-analysis:android gif编解码的原始分析,附有博客进行讲解

    3. **图像数据解码**:GIF使用LZW(Lempel-Ziv-Welch)无损压缩算法,这是一种基于字典的压缩方法。`GifDecoder`需要解码这些压缩数据,恢复出原始像素。 4. **透明度处理**:GIF支持透明度设置,`GifDecoder`会...

    gift:用 JavaScript 编写的 GIF 解码器

    GIF使用LZW(Lempel-Ziv-Welch)压缩算法对图像数据进行压缩,这种算法是无损的,可以有效地减少文件大小。 要使用JavaScript编写GIF解码器,我们需要理解GIF文件结构。GIF文件由一个头部、逻辑屏幕描述符、全局...

    计算机程序设计语言课程设计(C语言C++)及实践项目的例子.txt

    3. **文件压缩工具**:实现文件压缩功能,采用哈夫曼编码或LZW等算法。 4. **游戏开发**:使用C++和游戏开发库创建简单游戏,如迷宫游戏、射击游戏等。 5. **数据结构实现**:选择链表、栈、队列或二叉树等数据结构...

    计算机算法课件

    11. **数据压缩**:虽然标题未直接提及,但计算机领域中的数据压缩算法也很重要,如霍夫曼编码、LZ77、LZW等,它们在存储和传输数据时起到关键作用。 通过这些课件的学习,你可以建立起扎实的算法基础,提高解决...

    Algorithms

    4. 数据压缩:霍夫曼编码、LZW编码等算法减少数据存储需求。 七、学习资源 1. “算法导论”:经典的算法教材,深入浅出讲解各种算法。 2. LeetCode:在线平台,提供大量算法题目供练习。 3. Coursera、edX等在线...

Global site tag (gtag.js) - Google Analytics