码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于字典的LZW压缩算法


    基于字典的LZW压缩算法

    • 基于字典的LZW压缩算法
      • 简介
      • 重要概念:前缀和后缀
      • 算法
      • 示例

    基于字典的LZW压缩算法

    简介

    J.Ziv和A.Lempel在1978年首次发表了介绍第二类词典编码算法的文章。在他们的研究基础上,Terry A.Wlch在1984年发表了改进这种编码算法的文章。因此把这种编码方法称为LZW压缩算法。

    LZW算法又叫“串表压缩算法”就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩。 LZW压缩算法是Unisys的专利,有效期到2003年,所以对它的使用已经没有限制了。

    重要概念:前缀和后缀

    两个重要概念:

    • 前缀(prefix):一个词组的前面一个字符 ,比如 ab,前缀为a,8f前缀为8;

    • 后缀(suffix):反之,为后一个字符,比如 ab,后缀为b,8f后缀为f;

    算法

    算法流程:

    1. 在输入流中读一个字符。
    2. 如果当前编码在字典中,则把当前编码的第一个字符作为当前串的后缀,如果当前串不在字典中,就把它加入到字典中,然后把当前编码作为串的前缀,转到第4步。
    3. 如果当前编码不在字典中,就把前缀的第一个字符作为后缀,把串加入到字典中,用当前串的编码作前缀,转到第4步。
    4. 把前缀放到输出流,转到第1步。

    示例

    对于字符串ababbacb。初始字典为{a, b, c}。

    步骤前缀后缀词存在对应码输出码
    1a(, a)
    2ab(a, b)noa256
    3ba(b, a)nob257
    4ab(a, b)yes
    5256b(256, b)no256258
    6ba(b, a)yes
    7257c(257, c)no257259
    8cb(c, b)noc260

    把输出来的和最后一个后缀连在一起则是:a,b,256,257,c,b这6个字符,那么就达到了压缩的目的。

    对应生成的码表则是:

    256257258259260
    (a, b)(b, a)(256, b)(257, c)(c, b)

    解压缩时,将输出字符串按照码表对应转化。a,b,256(ab),257(ba),c,b,即ababbacb,解压成功。

  • 相关阅读:
    基础IO介绍
    Linux系统中安装Redis-7.0.4
    Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)
    nodejs中的错误类型及捕获处理
    2023年新授的IBDP物理/化学/生物课程有何不同?
    数据结构——树
    ssm基于微信小程序的校园商铺系统+ssm+uinapp+Mysql+计算机毕业设计
    C语言知识阶段性总结项目:电子词典
    oracle使用regexp_substr来拆分,CONNECT BY LEVEL查询卡死,速度慢的问题。
    java面试自我介绍
  • 原文地址:https://blog.csdn.net/ProgramNovice/article/details/128159619
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号