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

时间:2017-11-10 12:16:57

标签: javascript algorithm browser compression lossless-compression

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

  • 必须失败
  • 必须具有非常高的压缩比
  • 必须在浏览器中通过JavaScript库或原生支持
  • 不应该快。

目标:

  1. 压缩密集阵列的800万双精度浮子。只有256个唯一值。值通常是分布的。 (主要用例)
  2. 与之前相同,但对于稀疏数组(包含大量0值)
  3. 它'我可以为这些用例使用2种不同的算法。

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

2 个答案:

答案 0 :(得分:3)

编码几乎解决了问题:您的主要任务是建模(从float numberlossless开始)。
[primarily dense arrays] of 256 unique float numbers看起来并不乐观:取决于范围,指数表示可能是可利用冗余的唯一来源 sparse array 确实听起来很有希望,16×16稀疏矩阵更是如此。您对数据的了解越多,您对压缩器的帮助就越多 - “主要是对角矩阵”,任何人?

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

答案 1 :(得分:0)

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

我发现有两个选项符合我的需求:

  • 的bzip2
  • Brotli

<强>的bzip2

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

<强> Brotli

    只有在之前手动将所有浮点数映射到无符号字节时,
  • 才能压缩
  • 几乎所有现代浏览器本地支持