#数据转换 #压缩 #rscompress #近似 #科学 #数据编码 #支持

rscompress-transformation

支持rscompress的数据转换库

6个版本

0.2.3 2021年5月15日
0.2.2 2021年2月27日
0.1.1 2021年2月11日
0.1.0 2021年1月30日

算法中排名1129


rscompress中使用

MIT许可协议

27KB
443

rscompress

一个专注于科学数据的Rust压缩库。

免责声明

这是我在攻读博士期间开发的几个压缩算法的改写和合并。

论文可以从https://doi.org/10.5445/IR/1000105055下载

架构

该库分为一个基础库和四个支持库。基础库负责协调支持库。所有压缩算法都遵循相同的基本结构

  1. 使用转换解相关数据
  2. 如果需要有损压缩,则近似数据
  3. 对数据进行编码

此外,检查每个步骤是否按预期执行。

                   +----------------+      lossless      +----------+
                   |                |                    |          |
Start   +------>   | Transformation |   +------------>   |  Coding  |   +------>   End
                   |                |                    |          |
                   +----------------+                    +----------+

                           +                                   ^
                           |                                   |
                           |  lossy                            |
                           |                                   |
                           v                                   |
                                                               |
                   +---------------+                           |
                   |               |                           |
                   | Approximation |  +------------------------+
                   |               |
                   +---------------+

该库将遵循相同的原理。

转换

转换是一种算法,它使用不同的字母表来表示相同的信息。好的转换算法可以消除数据中的冗余信息。数学函数可以看作是一系列数据的转换。以下序列 1 1 2 3 5 8 13 21 .. 可以表示为 f(x) = f(x-1) + f(x-2)。我们将字母表A(整数)中代表的信息映射到更紧凑的字母表B(字母+整数)。需要注意的是,所有转换都必须有两个属性

  • 将转换算法应用于数据,不会丢失信息。
  • 所有转换算法都是可逆的,即可以从新的字母表中重建原始表示。

近似

近似是一种为了更好的压缩而牺牲信息的算法。给定一个阈值 theta(这可以是绝对值或相对值),算法将数据从字母表A映射到B,信息损失在预期的阈值内。一个近似示例是小学中熟知的 ~= 运算符,例如 1/3 ~= 0.3。近似具有以下属性

  • 将近似算法应用于数据,会导致信息丢失。
  • 近似算法是不可逆的。
  • 信息丢失保证在阈值 theta

编码

编码是在其中进行实际压缩的算法。信息以尽可能紧凑的方式保存在磁盘上。例如,有 Huffman算术编码

校验和

校验和是检查数据完整性的算法,例如 Adler-32

依赖关系

~255–530KB
~10K SLoC