首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >整数序列的最佳压缩算法

整数序列的最佳压缩算法
EN

Stack Overflow用户
提问于 2008-11-12 08:19:07
回答 15查看 64.9K关注 0票数 71

我有一个很大的数组,它的整数范围大部分是连续的,例如1-100,110-160等,所有的整数都是正数。最好的压缩算法是什么?

我尝试了deflate算法,但它只提供了50%的压缩。请注意,算法不能是有损的。

所有的数字都是唯一的,并且逐渐递增。

另外,如果你能告诉我这种算法的java实现,那就太好了。

EN

回答 15

Stack Overflow用户

发布于 2013-02-13 06:28:40

我们最近写了一些研究论文,调查了解决这个问题的最佳方案。请参阅:

Daniel Lemire和Leonid Boytsov,通过矢量化每秒解码数十亿个整数,软件:实践和经验45 (1),2015。http://arxiv.org/abs/1209.2137

Daniel Lemire,Nathan Kurz,Leonid Boytsov,SIMD压缩和排序整数的交集,软件:实践和经验(即将出现) http://arxiv.org/abs/1401.6399

它们包括广泛的实验评估。

您可以在C++11 online中找到所有技术的完整实现:https://github.com/lemire/FastPForhttps://github.com/lemire/SIMDCompressionAndIntersection

还有一些C库:https://github.com/lemire/simdcomphttps://github.com/lemire/MaskedVByte

如果您更喜欢Java,请参阅https://github.com/lemire/JavaFastPFOR

票数 82
EN

Stack Overflow用户

发布于 2008-11-12 10:57:11

首先,通过获取每个值与前一个值之间的差值来预处理您的值列表(对于第一个值,假设前一个值为零)。在您的情况下,这应该主要提供一个1序列,大多数压缩算法可以更容易地压缩这些序列。

这就是PNG格式改进其压缩的方法(它采用几种不同的方法之一,然后使用与gzip相同的压缩算法)。

票数 38
EN

Stack Overflow用户

发布于 2008-11-12 08:35:35

好吧,我投票给更聪明的方式。您需要存储的所有内容是int:startnumber在本例中,您将把示例数组转换为4xInt值。在此之后,您可以根据需要进行压缩:)

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/283299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档