Run-Length Encoding(RLE)

2022年 10月 8日 44点热度 0人点赞

file

原文地址: Run-Length Encoding(RLE)

Run-Length Encoding(RLE)

  • Run-length encoding 是被许多 bitmap 文件格式支持的数据压缩算法
  • 适合压缩任何数据类型, 压缩比例受数据内容所影响
  • RLE 不能获得高级压缩方法的压缩比例, 但是容易实现和执行
  • 作为使用复杂压缩算法或者不使用压缩的另一种选择
  • RLE 工作方式是减少重复字符的物理尺寸, 被编码成两个字节, 第一个字节表示字符数量, 第二个字节表示本身字符值.

例子

15 个 A 的字符串在不压缩的情况下需要 15 个字节存储

AAAAAAAAAAAAAAA

当使用 RLE 编码之后, 仅仅需要 2 个字节

15A

上面形成的 15A 表示一个 RLE 包, 第一个字节 15 表示 run 的数量, 表示重复的数量, 第二个字节 A 表示 run 值, 表示字符本身.

当 run 字符发生变化时或者 run 的数量超过了最大可用值, 新的包会形成.

例如, 字符串包含 4 个不同字符

AAAAAAbbbXXXXXt

使用 RLE, 可以形成 4 个 2 字节包

6A3b5X1t

当编码之后, 15 个字节字符串仅仅需要 8 字节字符串表示. 压缩比例达到 2:1. 长的 run 在特定数据类型中很少见, 例如 ASCII 文本. 在上面的例子中, 最后的 run(t) 仅仅包含一个字符, 一个字符也是一个 run, 也需要一个 run 数量和 run 值, 因此一个单个的 run 实际需要更多的空间. 同样的道理, 两个字符的数据当 RLE 编码后, 需要相同的空间大小.

在上面的例子中, 最后单个字符并不会影响压缩比例, 因为数据存在很多长的 run.

但是需要注意下面的情况:

Xtmprsqzntwlfb

使用 RLE 之后:

1X1t1m1p1r1s1q1z1n1t1w1l1f1b

RLE 是非常简单和快速的, 但是压缩比例依赖于数据本身, 例如, 黑白图片将会压缩非常好, 因为大量连续的数据存储相同的颜色. 但是拥有很多颜色的图片压缩比例就不会那么好, 因为很少有连续数据存储相同颜色.

rainbow

这个人很懒,什么都没留下

文章评论