编码 | 解码 | 可视化

> unary | 计数刻度 | 简单 <

// Unary 一元编码——用刻度计数表示整数的最简单方式

[SIMPLE]

最简单的编码

最基础的表示方式,只需按刻度计数即可。

[VISUAL]

可视化展示

基于计数刻度的直观可视化效果。

[VARIANTS]

多种变体

支持标准、反转和截断等多种 Unary 变体。

>> 技术说明

Unary 一元编码的工作原理:

Unary 一元编码用 n 个相同的符号加上终止符来表示整数 n。标准一元编码使用 n 个 1 后接一个 0。反转一元编码使用 n 个 0 后接一个 1。截断一元编码在已知取值范围时,对最大值省略终止符。

Unary 编码变体:

标准一元编码: 0 → 0 1 → 10 3 → 1110 5 → 111110 反转一元编码: 0 → 1 1 → 01 3 → 0001 5 → 000001 截断编码 范围 0–3: 0 → 空 1 → 1 2 → 11 3 → 111

为什么会用到 Unary 编码:

  • >作为其他编码方案的基础组件
  • >用作 Golomb 和 Rice 编码中的商部分
  • >作为 Elias 系列编码的长度前缀
  • >实现非常简单
  • >适合教学和演示压缩算法

>> 常见问题

什么是 Unary 一元编码?

Unary 一元编码是最简单的一类可变长度编码。它将整数 n 表示为某个符号通常是 1 连续重复 n 次,再加上一个不同的符号通常是 0 作为终止标记。这类似于用二进制形式画刻度计数。

Unary 在什么时候比较高效?

Unary 只在整数非常小,或者分布极度偏斜大部分值为 0 或 1 的场景下才算高效。表示整数 n 需要 n 加 1 个比特,因此对较大的数非常低效。它更多是作为其他编码方案内部的一个模块存在。

什么是截断一元编码?

当取值范围是已知时可以使用截断一元编码。对于范围中的最大值,不再添加终止符,因为仅靠长度就能唯一识别该值,这样可以为最大值节省一位比特。

Unary 编码一般用在什么地方?

Unary 编码本身很少单独使用,但在 Golomb 和 Rice 编码的商部分、Elias Gamma 与 Delta 编码的长度部分以及许多其它可变长度编码中都是核心组成部分,是很多压缩算法的基础概念之一。

其他语言