Compression 小差异排序数据的压缩

Compression 小差异排序数据的压缩,compression,sorted,Compression,Sorted,我对整数的数据序列进行了排序。两个数字之间的最大差值为3。例如,数据如下所示: Data: 1 2 3 5 7 8 9 10 13 14 Differences: (start 1) 1 1 2 2 1 1 1 3 1 有没有比保存差值更好的方法来存储(压缩)这种类型的序列?因为如果我使用基于字典的方法,它无法压缩,因为数字1、2和3是随机的。如果我使用“PAQ”风格的压缩,结果会更好,但仍然不太令人满意。哈夫曼和算术编码器比基于字典的方法更差 预测有什么方法吗 例如,对原始数据使用回归,而不

我对整数的数据序列进行了排序。两个数字之间的最大差值为3。例如,数据如下所示:

Data: 1 2 3 5 7 8 9 10 13 14
Differences: (start 1) 1 1 2 2 1 1 1 3 1
有没有比保存差值更好的方法来存储(压缩)这种类型的序列?因为如果我使用基于字典的方法,它无法压缩,因为数字1、2和3是随机的。如果我使用“PAQ”风格的压缩,结果会更好,但仍然不太令人满意。哈夫曼和算术编码器比基于字典的方法更差

预测有什么方法吗

例如,对原始数据使用回归,而不是存储差异(可能更小或更一致)

或者使用基于差异直方图的某种预测


或者完全不同的东西。。。。或者根本不可能(在我看来,这是真正的答案:)

因为你在评论中说你已经在每个字节存储四个差异,你可能不会做得更好。如果差异0、1、2和3是随机且均匀分布的,那么就没有办法做得更好

如果它们分布不均匀,那么使用哈夫曼或算术代码可能会做得更好。例如,如果1比0更常见,这比2和3更常见,则可以将1存储为0、0存储为10、2存储为110、3存储为111。或者如果0从未发生过,那么1代表0,2和3代表10和11。如果引用的是80%的时间出现1,那么使用算术代码可以做得更好。或者一个穷人通过编码成对符号的算术代码。例如:

11 0
13 100
21 101
12 110
31 1110
22 111100
23 111101
32 111110
33 111111
对于180%、210%、310%的用户来说,这是一个很好的代码。(这并不能完全处理奇数差异的情况,但你可以在开始时用一个位表示偶数或奇数,如果是奇数,则在结束时用几个位表示。)


可能有一个比前一个值更好的预测值。这将是n个先前值的函数,而不仅仅是一个先前值。但是,这将高度依赖于数据。例如,您可以假设当前值很可能落在前两个值所形成的直线上。或者它落在由前三个值组成的抛物线上。或者,如果数据有偏差,可以使用其他功能,例如具有某个频率的正弦信号。

您可以将每个数字存储为与前一个数字(1-3)的距离,但可以将其存储为2位数字。然后可以将4个数字打包到每个字节中。这样做的缺点是,要确定序列中的任何给定数字,必须从头开始。你把所有的距离加起来。。我已经把4个数字压缩成1字节了。我想知道,如果有更好的解决方案来解决这个“问题”,你也许可以找出半个未使用的部分,并获得更多的空间。但是如果数字序列真的是随机的,那么你就不可能从压缩算法中获得太多的价值,因为它们通常基于某种重复序列的思想,而随机数据通常缺乏这一点。我想真正的问题是,你的数据真的是随机的吗?也许是某种自然现象?或者可能有一些深层次的模式可以在其中找到?如果找不到模式,就没有可压缩性。它们几乎是随机的。。。但最常见的值是1(大约超过80%的数据),而不是2和3。没有“可见”的模式。这就是为什么我想到用神经网络来寻找任何一个。或者,如果绘制原始数据,则它们非常接近线性函数(在excel中进行线性回归后,可靠性=0.9998)