压缩二进制矩阵

时间:2016-08-22 23:08:44

标签: php compression

我必须发送包含生物样本的large set of data,这些样本是二维 [ [0,1,0], [1,0,0], [0,0,0] ] 数组的1和0。 比如说:

ctrl.rowCollection = result.data.items;     

所以这是三维的。我的成绩为60-70,预计将达到120行/列(最高)。我必须通过Ajax / API发送它并存储到数据库中。 我可以序列化为Json-但我在寻找是否有一种最佳方式来处理这样的事情。比如,通过一系列适当的压缩/解压缩?

我能想到的一种方式是:

  1. 将数字加入字符串
  2. 分成6位数的簇。 111111 bin = 63 dec(A-Z,a-z,0-9,_ = 26 + 26 + 10 + 1)
  3. 将每个群集转换为字母数字编码(a-zA-Z0-9_)并以字符串形式连接
  4. 这个解决方案有多聪明/愚蠢/最优?那里有更好的东西吗?

1 个答案:

答案 0 :(得分:0)

将您的数据结构转换为JSON,然后通过标准压缩算法(如gzdeflate())将其传递到您可以获得的简单程度,并将产生出色的压缩率。可能没有理由让它复杂化。

gzdeflate的输出将是二进制数据。如果您需要通过无法处理的频道进行传输,您可以base64_encode它;结果仍然小于任何有意义大小的矩阵的原始JSON。)

在压缩之前将矩阵“展平”为1 s和0 s的单个字符串(并将原始矩阵的尺寸存储在字符串旁边)可以为您提供稍好的压缩比,但是以使代码更复杂为代价。

对你在问题中描述的矩阵执行字母数字编码会导致显着更差的压缩率,因为它会使DEFLATE算法很难检测到数据中的任何模式它不会与你的集群的大小完美地“对齐”。