压缩独特的数据流

2024-04-21

我有大量的整数数组。每个整数都有几千个整数,每个整数通常与前一个整数相同或仅相差一两位。我想将每个阵列缩小到尽可能小,以减少磁盘 IO。

Zlib 将其缩小到原始大小的 25% 左右。这很好,但我不认为它的算法特别适合这个问题。有谁知道对于此类信息可能表现更好的压缩库或简单算法?

更新:zlib 将其转换为异或增量数组后,将其缩小到原始大小的 20% 左右。


如果大多数整数确实与前面的相同,并且符号间差异通常可以表示为一位翻转,那么这听起来像是 XOR 的工作。

获取如下输入流:

1101
1101
1110
1110
0110

和输出:

1101
0000
0010
0000
1000

一些伪代码

compressed[0] = uncompressed[0]
loop
  compressed[i] = uncompressed[i-1] ^ uncompressed[i]

我们现在已将大部分输出减少到 0,即使高位发生更改也是如此。您使用的任何其他工具中的 RLE 压缩都会对此大有裨益。它在 32 位整数上工作得更好,并且仍然可以对流中弹出的完全不同的整数进行编码。您省去了自己处理位打包的麻烦,因为所有内容仍然是 int 大小的数量。

当你想解压时:

uncompressed[0] = compressed[0]
loop
  uncompressed[i] = uncompressed[i-1] ^ compressed[i]

这还有一个优点是它是一个简单的算法,运行得非常非常快,因为它只是异或。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

压缩独特的数据流 的相关文章

  • 如何将 Zlib 与 Cmake 链接

    我试图将我的文件与 zlib 库链接 但仍然得到 对 deflateInit 的未定义引用 我目前正在使用CLion 已从主页下载了zLib文件并将其添加到项目中 这就是我的 CmakeLists txt 的样子 cmake minimum
  • 从 iPhone 中的视频帧获取图像

    是否可以使用 iPhone SDK 从 iPhone 中的视频中抓取帧并将其保存或在应用程序中以任何方式使用它 除了播放 停止或访问视频的二进制数据之外 SDK 是否可以对视频进行任何控制 还可以知道用户停止观看视频的时间 我知道在 SDK
  • 错误:Zlib._handle.onerror (zlib.js:355:17) 错误号:-3,代码:'Z_DATA_ERROR' 处的标头检查不正确

    我的 HTTP 请求有 content encoding gzip 标头 我正在尝试使用node js 读取数据 我使用下面的代码来解压缩数据 但我明白了错误 Zlib handle onerror zlib js 355 17 错误号 3
  • JavaScript 中的文本压缩

    有没有图书馆 等等 在 JavaScript 中实现轻量级文本压缩 我真正的目标是稍微缩短一些文本并使其一目了然 它不需要提供安全性 文本将为用户显示 理想情况下 可以调整压缩以仅输出查询字符 a zA Z0 9 所以它可以在 URL 中传
  • 用于 HTTP 压缩的 GZip 或 Deflate

    哪种压缩方法更好 我听说过很多关于 GZip 被更广泛使用的说法 但 Deflate 更快 在某些情况下 是否有公认的标准来使用哪个标准以及为什么 UPDATE 根据链接问题的最新更新 应该使用 GZip 看http www vervest
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 尽管缓冲区分配给 compressBound 结果(文件太大?),zlib compress() 返回 Z_BUF_ERROR

    使用 zlib 时 我调用compress 给出一个Z BUF ERROR当我尝试压缩一个 13G 的文件时 尽管我认为缓冲区分配是正确的 此代码适用于较小的文件 struct stat infile stat FILE fp NULL i
  • Java 中客户端/服务器传输的压缩字符串

    我使用专有的客户端 服务器消息格式来限制我可以通过网络发送的内容 我无法发送序列化对象 我必须将消息中的数据存储为字符串 我发送的数据是大的逗号分隔值 我想在将数据作为字符串打包到消息中之前对其进行压缩 我尝试使用 Deflater Inf
  • 在客户端将大文件(> 2GB)压缩为 ZIP

    我使用构建上传工具node js and socket io 因为他们通常会上传令人难以置信的巨大文件 而普通的上传表单将无法工作 问题是他们想在发送之前将文件压缩成zip 以提高传输效率 我一直在研究压缩方法 例如JSZip http s
  • IIS 7.5 ASP.NET-4 Gzip 压缩

    我似乎无法为我的 ASP NET 4 应用程序启用 GZIP 压缩 似乎只有 javascript 文件被压缩 页面 CSS 和其他内容不会被压缩 未压缩的CSS文件的响应头是 Content Type text css Last Modi
  • Internet Explorer 8 + 放气

    我有一个非常奇怪的问题 我真的希望有人能给出答案 因为我不知道还能去哪里问 我正在用 C 编写一个 cgi 应用程序 它由 Apache 执行并输出 HTML 代码 我自己在 C 应用程序中压缩 HTML 输出 因为我的 Web 主机由于某
  • System.IO.Compression 和 ZipFile - 提取并覆盖

    我使用标准 VB NET 库来提取和压缩文件 它也可以工作 但是当我必须提取并且文件已经存在时 问题就出现了 我使用的代码 Imports Imports System IO Compression 崩溃时我调用的方法 ZipFile Ex
  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • tar 和 zip 有什么区别? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 tar 和 zip 有什么区别 每个的用例是什么 tar其本身只是将文件捆绑在一起 结果称为tarball 尽管zip也应用压缩 通常你使用gzip随
  • 十六进制字符串的运行长度编码(包括换行符)

    我正在使用以下方法实现游程长度编码GZipStreamC winforms 应用程序中的类 数据以一系列由换行符分隔的字符串形式提供 如下所示 FFFFFFFF FFFFFEFF FDFFFFFF 00FFFFFF 在压缩之前 我将字符串转
  • 解压在 Python 2.5 和 Python 3.1 中腌制的数据,然后使用 zlib 解压缩

    在 Python 2 5 中 我使用以下代码存储数据 def GLWriter file name string import cPickle import zlib data zlib compress str string file o
  • 在 Java 中使用 Inflater 解压缩 gzip 数据

    我正在尝试使用以下方法解压缩 gzip 数据Inflater 根据文档 如果参数 nowrap 为 true 则 ZLIB 标头和校验和 字段将不会被使用 这提供了与 GZIP 和 PKZIP 使用的压缩格式 注意 使用 nowrap 选项
  • PageSpeed Insights 没有看到 Gzip 压缩

    我正在努力加快我的网站速度 谷歌洞察 https developers google com speed pagespeed insights https developers google com speed pagespeed insi
  • url文本压缩(不是缩短)并存储在mysql中

    我在 mysql 中有一个 url 表 其中只有两个字段 id 和 varchar 255 用于 url 目前那里有超过 5000 万个 url 我的老板刚刚向我提供了有关当前项目扩展的线索 这将导致在该 url 表中添加更多的 url 预
  • 在 python 3 中压缩字符串?

    我不明白 在 2 X 中它起作用了 import zlib zlib compress Hello world 现在我有一个 zlib compress Hello world TypeError must be bytes or buff

随机推荐