选择具有最高压缩比的压缩算法



我正在寻找一种压缩算法:

  • 必须不输
  • 必须具有非常高的压缩比
  • 必须通过 JavaScript 库在浏览器中支持或本机支持
  • 不应该很快。

目标:

  1. 压缩 800 万个双精度浮点数的密集数组。只有 256 个唯一值。值呈正态分布。(主要用例(
  2. 与以前相同,但对于稀疏数组(包含大量 0 值(

我可以在这些用例中使用 2 种不同的算法。

我找到了谷歌的Brotli算法。但我不确定它是否是最好的。

编码几乎

是一个问题:你的主要任务将是建模(从float numberlossless开始(。
[primarily dense arrays] of 256 unique float numbers听起来并不乐观:根据范围,指数表示可能是可利用冗余的唯一来源。
sparse array听起来确实很有希望,16×16 稀疏矩阵更是如此。您对数据了解得越多,就越能帮助压缩机——"主要是对角矩阵",有人吗?

"通用数据压缩器"利用自相似性:
要了解您的数据在哪里,请在您选择的任何"机器表示"和通用 unicode 表示上使用"通常的嫌疑人"。
后者允许您使用不超过要求的分辨率。

我有很多浮点数。但是因为只有 256 个唯一值,我可以将每个数字编码为 1 个字节。它提供了巨大的压缩比。之后,我可以运行一些通用算法来进一步压缩数据。我检查了几种流行的算法:gzip,Brotli,bzip2,lzma,Zstandard。

发现 2 个选项适合我的需求:

  • bzip2
  • 布罗特利

bzip2

  • 即使我不将浮点数转换为无符号字节,也可以很好地压缩。
  • 但需要浏览器中的JS库

布罗特利

  • 仅当我之前手动将所有浮点数映射到无符号字节时,才能很好地压缩
  • 几乎所有现代浏览器都原生支持

最新更新