当前位置: 首页 > news >正文

吃透大数据算法-数据压缩算法Run Length Encoding(RLE)

目录

一、场景故事:仓库管理员小李的 “偷懒” 记录法

二、10 种压缩算法对比:针对小李仓库场景的差异化处理

三、RLE算法选择的 “黄金法则”


一、场景故事:仓库管理员小李的 “偷懒” 记录法

小李是社区超市的仓库管理员,每天要手写记录货架上的商品排列 —— 比如货架 A 的序列是:

可乐、可乐、可乐、雪碧、雪碧、矿泉水、矿泉水、矿泉水、矿泉水、可乐、可乐、缺货、缺货、缺货

如果按 “逐个记录” 的方式写,要写 14 项,手酸还容易错。某天他灵光一闪:“连续重复的东西,记‘数量 + 商品’不就完了?”于是他把序列改成:

3 个可乐 → 2 个雪碧 → 4 个矿泉水 → 2 个可乐 → 3 个缺货

x3      x2   x4  x2  x3

只用 5 项就记完了,这就是 RLE(行程长度编码)的核心逻辑:找到 “连续重复的元素”(称为 “行程”),用 “重复次数 + 元素值” 的组合,替代原本冗长的重复序列,实现数据压缩。

就像生活中记录 “连续签到 7 天”(而非 “签到、签到…7 次”)、“连续堵车 3 公里”(而非 “堵车、堵车…3 公里”),本质都是 RLE 的思路 ——用 “计数” 减少 “重复描述” 的冗余

二、10 种压缩算法对比:针对小李仓库场景的差异化处理

以下所有算法均围绕 “小李记录货架商品 / 数据” 的核心场景,对比其处理思想、适用场景与特点:

算法名称同场景故事处理思想(以小李仓库为例)适用场景核心特点
Run Length Encoding(基础 RLE)直接将连续重复的商品序列替换为 “数量 + 商品”,如 “3 可乐、2 雪碧、4 矿泉水”,不优化 “数量” 或 “元素” 的存储格式。有明显连续重复的序列(考勤、库存排列、黑白图像)1. 逻辑最简单,易实现;2. 重复越长,压缩率越高;3. 无重复时反而增加存储(需额外存 “数量 1”)
Base 128 Varint不直接压缩商品,而是优化 “重复数量” 的存储:若小李要记 “130 个可乐”,传统 RLE 用 2 字节存 130,Base 128 Varint 用 “0x81(10000001)+0x01” 动态编码,小数量(如 3)仅用 1 字节。RLE 中 “重复数量” 波动大的场景(日志、二进制流、大库存计数)1. 动态调整计数的字节数,节省存储;2. 需额外解码步骤;3. 仅优化 “计数”,需配合 RLE 使用
Byte Run Length Encoding(Byte RLE)先将商品映射为 1 字节编码(可乐 = 0x01,雪碧 = 0x02),再对连续字节编码:“3 个可乐”=0x03(数量)+0x01(字节值)。字节级连续重复的二进制数据(图片像素、二进制日志、文件碎片)1. 适配字节型数据,压缩效率高;2. 非字节数据需先转码;3. 适合底层二进制压缩
Boolean Run Length Encoding(Boolean RLE)若货架仅需记录 “有货(1)/ 缺货(0)”,则对连续布尔值编码:“3 个缺货”=“3+0”,“2 个有货”=“2+1”。二值序列(开关状态、黑白图像、位掩码、传感器通断信号)1. 对二值数据压缩率极致(1 个计数 + 1 个布尔值代表连续序列);2. 仅支持两种值,通用性极差
Integer Run Length Encoding, version 1(Int RLE v1)针对 “商品数量” 这类整数序列:若小李记录 “3 箱、3 箱、3 箱、5 箱”,则编码为 “3 次 3 箱、1 次 5 箱”。整数序列有连续重复(库存箱数、传感器固定读数、批次数量)1. 直接对整数重复优化,无需转码;2. 逻辑简单,解码快;3. 非重复整数压缩率低
Integer Run Length Encoding, version 2(Int RLE v2)优化 v1,支持 “重复 + 增量”:若小李记录 “3 箱、3 箱、4 箱、4 箱、5 箱”,编码为 “2 次 3 箱、2 次 + 1(4=3+1)、1 次 + 1(5=4+1)”,兼顾重复与小幅度递增。整数序列有重复且含小增量(时间戳、批次号、渐变传感器数据)1. 压缩场景比 v1 更广(支持重复 + 增量);2. 解码逻辑稍复杂;3. 大增量时压缩率下降
Short Repeat专门优化 “短重复序列”:若小李货架多是 “2 罐可乐、3 瓶雪碧” 这类短重复,用 1 字节同时存 “数量(低 4 位)+ 商品编码(高 4 位)”,避免基础 RLE 的 “数量 + 商品” 双字节冗余。以短重复为主的序列(文本重复字符、小批量零售库存、短周期传感器数据)1. 短重复(2-8 次)压缩效率极高,开销最小;2. 长重复(>8 次)不如基础 RLE;3. 适合小数据量场景
Direct(无压缩)若小李的货架商品完全无规律(可乐、雪碧、矿泉水、可乐、雪碧…),不做任何压缩,直接逐个记录每个商品 / 数据。序列无重复或重复极少(随机数据、唯一商品 ID、加密数据)1. 无压缩 / 解码开销,读取速度最快;2. 存储成本最高;3. 是所有压缩算法的 “fallback 选项”
Patched Base处理 “大部分重复 + 少量异常”:若小李货架有 “100 个可乐”,但第 50 位是雪碧,编码为 “基础:100 个可乐;补丁:第 50 位替换为雪碧”,用 “基础重复 + 局部补丁” 保留高压缩率。高重复序列含少量异常值(日志中的偶发错误、图像噪点、库存中的临时缺货)1. 兼顾高重复压缩率与异常处理灵活性;2. 补丁数量越少,效率越高;3. 补丁过多时会增加额外存储
Delta(差值编码,常与 RLE 结合)针对 “有序递增 / 递减序列”:若小李记录商品编号 “101、102、103、103、104”,编码为 “基准 101,+1,+1,2 次(重复 + 0),+1”(结合 RLE),用 “差值” 替代原值。有序整数序列(时间戳、自增 ID、时序传感器数据、批次编号)1. 有序序列压缩率极高(差值通常远小于原值);2. 必须依赖序列的有序性,无序序列不适用;3. 常与 RLE 结合处理 “重复差值”

三、RLE算法选择的 “黄金法则”

小李的仓库场景揭示了RLE压缩算法的本质 ——没有 “最好”,只有 “最适配”

  1. 看 “重复特性”:连续长重复用「基础 RLE」,短重复用「Short Repeat」,无重复用「Direct」;
  2. 看 “数据类型”:二值用「Boolean RLE」,字节用「Byte RLE」,整数用「Int RLE v1/v2」,有序整数用「Delta」;
  3. 看 “异常情况”:少量异常用「Patched Base」,数量波动大用「Base 128 Varint」。

所有算法的设计目标,都是在 “压缩率”“速度”“通用性” 三者间找平衡 —— 就像小李记录货架,最终目的是 “又快又省地记清楚”,而非追求 “最复杂的方法”。

http://www.dtcms.com/a/436149.html

相关文章:

  • 宜兴建设公司网站网页设计师联盟网站怎么
  • 上海网站建设seodian莱芜区都市网莱芜杂谈
  • 网站注册搜索引擎的目的是企业网络维护一般多少钱
  • 网站发布平台南宁伯才网络建站如何
  • 广安网站建设推荐h5是什么意思游戏
  • 分类信息的网站如何推广做建筑材料哪个网站好一点
  • 就业指导中心网站建设总结天津网站建设制作开发公司
  • 西安网站注册2015百度竞价单页面网站模板源码设计
  • 搜索网站模板常州 网站建设
  • com.mysql.cj.jdbc.Driver 解析
  • 做网站撘框架南沙网站开发
  • Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
  • [创业之路-661]:相对于采集狩猎社会,农业社会新增学科和新增职业
  • 有做兼职赚钱的网站吗网站站长英文
  • Javascript/ES6+/Typescript重点内容篇——手撕
  • 网站建设和优化那本书好seo引擎优化是做什么的
  • 【c语言文件操作】
  • SPI Flash基础知识点 (腾讯元宝版本)
  • 天津的网站建设成都网站建设 木木科技
  • 苏州浒关做网站哪里有网站推广公司
  • 怎么买域名自己做网站常州医院网站建设
  • 网站收录平台青岛优化网站多少钱
  • 做静态网站多少钱与恶魔做交易的网站
  • 哈德网站建设建设短视频网站
  • 做exo小说的网站互联网创业项目整合网站
  • 国外网站 模板外贸网站设计公司
  • rk3588移植部署pointnet
  • 网站制作 网站建设 杭州上海名企
  • 谁用fun域名做网站了襄樊网站制作公司
  • php学建网站摄影标志logo设计欣赏