压缩独特的数据流

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(使用前将#替换为@)

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

  • 改进PNG优化Gulp任务

    这是透明的 PNG 源代码 https i stack imgur com 6XZBB png https i stack imgur com 6XZBB png 13 3kB 使用 compresspng com 进行优化 https i
  • GZIPOutputStream:提高压缩级别

    java util zip GZIPOutputStream不为其底层的压缩级别提供构造函数参数或设置器Deflater 有多种方法可以解决此问题 如所述here http www redirecttonull com p 134 例如 G
  • Json压缩传输

    我想知道基于 javascript 的 json 压缩的当前状态是什么 当前是否有任何库允许通过用单个字符替换长名称或其他方法来压缩 json 有人有用 Javascript 实现 HPPack https github com WebRe
  • PHP 中的 zipArchive 打开错误

    无法在 PHP 中创建 zip 存档 总是返回Ziparchive ER MULTIDISK fileName SERVER DOCUMENT ROOT temp temp zip zip new ZipArchive err zip gt
  • 如何从文件字节开始在内存中创建 zip 文件?

    我尝试使用 C 在内存中创建一个 zip 文件 但结果是一个 zip 文件 其中包含损坏的文件 所有要压缩的文件都在数据库中 我存储字节 文件为 PDF 格式 我的代码如下 extract bytes and file name for e
  • js中压缩一串0和1

    介绍 我目前正在用 js 开发 John Conway 的 Game of Life 我的游戏可以运行 在这里查看 http goljs github io GoL 我正在开发额外的功能 例如与您的朋友分享您的 网格 游戏 为此 我将网格的
  • 使用node.js核心zlib模块压缩成.zip文件

    如何压缩一个或多个文件并将其保存到 zip包含所提供的 node js 的扩展文件zlib https nodejs org api zlib html模块 我想出了如何保存到 gz使用 gzip 如下 const gzip zlib cr
  • 在Android中压缩带有大图像的pdf

    这个问题通过java压缩带有大图像的pdf https stackoverflow com questions 20614350 compress pdf with large images via java给出了在 Java 中使用 iT
  • 压缩从设备获取或从库、iOS 中选择的图像

    在我的应用程序中 用户可以从设备拍摄照片或从库上传照片以将其设置为个人资料照片 现在 当用户完成后 我需要将该图像上传到服务器 通常从设备获取的图像大小为 5 6MB 我需要在上传到服务器之前将其压缩到 25KB 所以我使用以下方法 voi
  • 上传前压缩相机图像

    我正在使用这段代码 来自www internetria com http www internetria com blog 2013 04 12 android enviar imagenes por webservice 拍照并上传到服务
  • Java 中对象序列化和压缩的性能成本

    应用程序不断接收名为Report并将对象放入Disruptor对于三个不同的消费者 在 Eclipse Memory Analysis 的帮助下 每个进程的 Retained Heap SizeReport对象平均为 20KB 该应用程序开
  • 使用 Dask 处理大型压缩 csv 文件

    设置是我有八个大的 csv 文件 每个 32GB 每个文件都用 Zip 压缩为 8GB 文件 我无法使用未压缩的数据 因为我想节省磁盘空间 但没有剩余 32 8GB 空间 我无法加载一个文件 例如pandas因为它不适合内存 我认为 Das
  • 使用 YUIcompressor 压缩多个 JavaScript 文件?

    我正在尝试使用 YUI 压缩机压缩多个 JS 文件 我认为我的语法错误 我想压缩目录中以以下内容开头的所有文件at 然而 当 YUI 压缩机运行时 我发现 YUI 压缩机在输出中只放置了一个文件的压缩版本 具体来说 假设我有三个文件 at
  • 尽管缓冲区分配给 compressBound 结果(文件太大?),zlib compress() 返回 Z_BUF_ERROR

    使用 zlib 时 我调用compress 给出一个Z BUF ERROR当我尝试压缩一个 13G 的文件时 尽管我认为缓冲区分配是正确的 此代码适用于较小的文件 struct stat infile stat FILE fp NULL i
  • 如何使用 Python GZip 模块压缩文件夹?

    我正在创建压缩文件 文件夹的 Python 软件 我将如何创建一段代码 要求用户输入文件夹位置 然后对其进行压缩 我目前拥有单个文件的代码 但没有包含完整文件的文件夹 请详细解释如何执行此操作 将文件夹压缩为 tar 文件的代码是 impo
  • Java 压缩字符串

    我需要创建一个接收字符串并返回字符串的方法 防爆输入 AAABBBCCC 防爆输出 3A4B2C 好吧 这很尴尬 我在今天的面试中无法做到这一点 我正在申请初级职位 现在 我在家尝试制作一些静态工作的东西 我的意思是 不使用循环有点无用 但
  • 在 JavaScript 中压缩 Blob

    我需要使用 ajax 向服务器发送一个 blob 但它最终可能会变得有点大 我想减少上传时间 我已经尝试过 jszip 但这只是在 zip 中给了我一个空文件 我也尝试过 btoa 但事实证明编码值最终只是 object Blob 而不是实
  • 首次执行后 CPU 霍夫曼压缩速度更快?

    我最近用 C 构建了 Huffman 编码的 CPU 实现 我还在 CUDA 中构建了一个 GPU 版本来比较时间 但在测试 CPU 时间时遇到了一个问题 当通过压缩大文件 例如几乎包含字母表中的每个字母和各种其他 ascii 字符的 97
  • Ruby 安装由于缺少扩展而中止:openssl、readline、zlib 编译错误

    我正在使用 macOS Catalina 我正在尝试通过 rbenv 安装旧版本的 Ruby 1 9 3 2 1 2 但是 在尝试安装旧版本时 我不断收到以下错误 安装 2 4 或更新版本时没问题 我已经尝试过 brew install o
  • 使用 Android 创建 ZIP 文件

    如何从 XML 文件创建 ZIP 文件 我想以 XML 格式备份所有收件箱消息 并压缩 XML 文件并将其存储在SD card http en wikipedia org wiki Secure Digital 下面的代码解决了我的问题 p

随机推荐