我已经对整数的数据序列进行了排序。 2个数字之间的最大差异是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 :(得分:0)
由于您在评论中说您已经存储了每个字节的四个差异,因此您可能无法做得更好。如果差异0,1,2和3是随机且均匀分布的,那么就没有办法做得更好。
如果它们不均匀分布,那么您可以使用霍夫曼或算术代码做得更好。例如。如果1比0更常见,这比2和3更常见,那么你可以将1存储为0,0将10存储为110,将3存储为111.或者如果0从不发生,则1为0,2和3为10和11.对于引用的情况,您可以使用算术代码做得更好,其中1%出现在80%的时间。或者通过编码符号对来编写穷人的算术代码。 E.g:
11 0
13 100
21 101
12 110
31 1110
22 111100
23 111101
32 111110
33 111111
对于1 80%,2 10%,3 10%是一个很好的代码。 (这并不完全处理奇数个差异的情况,但你可以在开始时只用一个指示偶数或奇数的数字处理它,如果奇数则在结尾处再多几个位。)
可能有比前一个值更好的预测因子。这将是 n 先前值的函数,而不仅仅是一个先前的值。然而,这将高度依赖数据。例如,您可以假设当前值可能落在前两个值所做的行上。或者它落在前三个值所产生的抛物线上。或者其他一些功能,例如如果数据如此偏倚,则具有一定频率的正弦曲线。