LZ77算法理论

news2024/11/18 8:51:41

发布时间:2023-07-25 14:58:28

英文介绍文档:https://archive.ph/F4pg7
很短,看一遍10~20分钟应该够了。

1. 算法用到的术语:

  • Input stream

    • 要被压缩的字符序列
  • Character

    • 输入流中的基本数据元素
  • Coding position

    • 输入流中现在正在被编码的那个字符的位置(lookhead buffer的开始位置)。
  • Lookhead buffer

    • 从coding position到输入流末尾的字符序列。
  • Window

    • 大小为W,能够容纳W个字符,从coding position往回数,也就是已经处理的最后W个字符。
  • Pointer

    • 指向window中的匹配(点),同时指定了匹配的length。

2. 压缩原理

算法在window中搜寻和lookhead buffer开始处最长的匹配,然后输出一个指向匹配的pointer。

由于可能一个字符都没匹配到,所以输出不可能值包含pointer。LZ77用这样的方式解决这个问题:在每个pointer后,输出在lookhead buffer中匹配了的后面的第一个字符。如果没有匹配,输出一个null-pointer和coding position处的字符。

3. 编码算法

  1. 把coding position设置到输入流的开始处

  2. 找到window中与lookahead buffer最长的匹配

  3. 输出(P, C)对:

    • P 是pointer,指向window中的匹配
    • C是lookahead buffer中第一个未匹配的字符。
  4. 如果lookahead buffer不为空,将coding position(和window)前向移动L+1个字符,然后返回到步骤2。

4. 一个例子

编码的过程在下面的表(图)中。

  • Step是编码的步数。每次编码算法产生输出算作一步。在LZ77中,发生在编码的第3步。
  • Pos指明 coding position。输入流中的第一个字符的coding position为1.
  • Match是在window中最长的匹配。
  • Char 是lookahead buffer中匹配了的后面第一个字符。
  • Output以(B, L) C的格斯打印输出:
    • (B, L)是指向匹配(Match)的pointer(P)。它给出了解码时的指令:在window中往回B个字符处,拷贝L个字符到输出流。
    • C就是字面上的字符。

在这里插入图片描述

5. 解码

以在编码时同样的方式维护window。每次读一个(P, C)对时,输出window中P所指的匹配序列,然后输出字符C。

6. 实用特点

这个算法的压缩率对很多类型的数据都很好,但是编码可能相当耗时,因为要做太多的lookahead buffer和window之间的比对。另一方面来说,解码非常简单且快速。编码和解码的内存需求很低。内存中保存的唯一的结构是window,它通常在4 ~ 64K的大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/788773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RealsenseD455 + ubuntu18.04 + ROS-Melodic的使用

系统:Ubuntu18.04 ros: melodic 相机:intel RealSense D455一、安装依赖和 Realsense SDK sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver…

机器人导航(3):导航相关消息

文章目录 地图nav_msgs/MapMetaDatanav_msgs/OccupancyGrid 里程计坐标变换定位目标点与路径规划激光雷达相机深度图像转激光数据depthimage_to_laserscan简介depthimage_to_laserscan节点说明depthimage_to_laserscan使用 地图 地图相关的消息主要有两个: nav_msgs/MapMetaD…

【雕爷学编程】Arduino动手做(171)---micro:bit 开发板

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这…

“VCMessage”任务意外失败

从网上查到很多都是说设置这个位置,但是我的已经是对的,还是出现 “VCMessage”任务意外失败这个错误。 又查到一个人说解决方法是更正OutputPath或从父级继承:右键单击项目,然后转到"属性">"链接器">"常规&q…

开源项目注意事项

fork项目后,记得另外开启一个分支然后在新分支上进行开发,push到仓库后从分支往原项目提交。 否则会出现Partially verified(导致提交pr后auto-merge失败) 注意git提交操作 https://blog.csdn.net/sonichenn/article/details/13…

matplotlib从起点出发(3)_Tutorial_3_Image

1 图像教程 matplotlib可以简单地处理并显示图像,当然,它不是一个专业的图像处理库,所以也不要拿它来与opencv进行比较。 2 启动命令 首先,让我们启动IPython。它是对标准python提示符的最出色的增强,它与matplotli…

OpenHarmony与HarmonyOS联系与区别

目录 1. 背景 2.OpenHarmony 3.HarmonyOS 4.鸿蒙生态 5.OpenHarmony与HarmonyOS的技术上实现区别 1.语言支持 2.SDK 的不同 3.运行调测方式不同 4.对APK的兼容性不同 5.包含关系 6.调试命令 6.何时选择OpenHarmony或是HarmonyOS? 1. 背景 开篇就说“关于…

企业数字化转型中容易出现哪些误区?

对信息化和数字化的投入产出认识有误 在和一些从事企业信息化数字化建设的朋友的沟通中,发现很多企业老板对信息化和数字化投入产出认知上确实有偏差,他们总觉得投入一部分,就得有相应的产出,在他们心里信息化的投入产出如下图曲线…

强化学习SAC算法对数概率公式推导

强化学习 SAC算法 对数概率推导 先上原论文: 首先对公式 ( 20 ) (20) (20) 做推导。 公式 ( 20 ) (20) (20) 的数据流应该是这样的: s → π ( u ∣ s ) → u → a tanh ⁡ ( u ) → a \mathbf{s}\rightarrow \pi(\mathbf{u}|\mathbf{s}) \rightar…

Vue3标签(Tag)

APIs 参数说明类型默认值必传closable标签是否可以关闭booleanfalsefalsecolor标签颜色,预置多种常用颜色:success, processing, error, warn, pink, red, orange, green, cyan, blue, purplestring‘’falseicon设置图标string | slot‘’false Event…

【深度学习】【Image Inpainting】Generative Image Inpainting with Contextual Attention

Generative Image Inpainting with Contextual Attention DeepFillv1 (CVPR’2018) 论文:https://arxiv.org/abs/1801.07892 论文代码:https://github.com/JiahuiYu/generative_inpainting 论文摘录 文章目录 效果一览摘要介绍论文贡献相关工作Image…

MySQL数据备份与恢复练习

目录 1.创建student和score表 2.为student表和score表增加记录 3.备份数据库school到/backup目录 4.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 5.直接将MySQL数据库压缩备份 6.备份MySQL数据库某个(些)表。此例备…

『Python学习笔记』Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号

Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号 文章目录 一. pip包的好处二. 简单小例子2.1. 创建Python包2.2. 构建Python包2.3. 上传到PyPI2.4. pip安装测试 三. CLIP多模态模型相关例子3.1. Chinese-CLIP例子3.2. CLIP-ONNX例子3.3. 问题1和问题…

vue使用driver.js完成页面引导的功能

需求:用户首次进入的时候肯定不知道一些功能是干什么在哪里,之后给用户一个页面引导,教他怎么做。 点击插件driver.js官方文档 效果: 1.下载driverjs 我默认下载的是最新版 "driver.js": "^1.0.5",&#x…

MySQL 高级SQL语句(一)

目录 一、高级SQL语句(进阶查询) 1.1 select 1.2 distinct 1.3 where 1.4 and 和 or 1.5 in 1.6 between 1.7 通配符 1.8 like 1.9 order by 一、高级SQL语句(进阶查询) 先准备2个表 一个location表: use m…

私人记账本程序cashbook

什么是 cashbook ? cashbook 是一个私人或家庭记账程序,支持私有化部署,商用或其他使用不受约束。建议使用者每年创建一个账本,图表功能可以起到分析全年数据的效果。 官方提供了演示站点,但不建议记录真实数据 演示账…

ardupilot 遥控的输入控制模式

目录 本节主要记录自己整理ardupilot的遥控器的输入控制模式:正常模式、简单模式、超简单模式的理解。 1.正常模式(有头模式) 在不用简单和超简单的模式的情况下,无人机操作员操作的控制输入是对应着不断旋转着的飞行器进行操作的。如上方图所示举例,当无人机操作员进行…

flask中的werkzeug介绍

flask中的werkzeug Werkzeug是一个Python库,用于开发Web应用程序。它是一个WSGI(Web Server Gateway Interface)工具包,提供了一系列实用功能来帮助开发者处理HTTP请求、响应、URLs等等。Werkzeug的设计非常灵活,可以…

基础入门-SpringBoot-自动配置特性

一、自动配好Tomcat 引入Tomcat依赖。配置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.3.4.RELEASE</version><scope>compile</sco…

同城跑腿小程序怎么做

同城跑腿小程序是一款基于地理位置的服务平台&#xff0c;为用户提供了便捷的日常生活服务。以下是该小程序的主要功能介绍&#xff1a; 1. 快速下单&#xff1a;用户可以通过小程序平台快速填写订单信息&#xff0c;包括取送地址、物品类型和重量等信息&#xff0c;然后选择合…