仅限数字的压缩算法

fir*_*003 8 compression data-compression

我要压缩位置数据(纬度,经度,日期,时间).所有数字都是固定格式.其中2个(纬度,经度)采用十进制格式.其他2是整数.

现在这些数字是固定格式的字符串.

压缩固定格式数字的算法是什么?数字压缩(如果有的话)比字符串压缩更好吗?我应该直接压缩字符串而不将其转换为数字然后压缩吗?

提前致谢.

Cha*_*tin 7

这是一个小理论有用的地方之一.你需要考虑几件事:

  • 测量的分辨率是多少:0.1°或0.001°?1秒还是1微秒?
  • 测量是相关的,并按某种顺序,或随机扔在一起?

比方说,例如,分辨率为0.01°.你知道你的值在-180°到+ 180°之间,或35900个不同的值.Lg(35900)≈16所以你需要16位; 14位 - -90° - + 90°.显然,如果您将此类值存储为浮点数,则可以立即将数据压缩一半.

与日期时间类似,范围是多少; 你必须有多少位?

现在,如果数据按某种顺序(例如,在一艘船上顺序采集的样本),那么您只需要一个起始值和一个增量; 这可以产生很大的不同.如果船舶以30节的速度行驶,则位置不能再变化,即每小时约0.03度或每秒约0.0000083度.这些增量将是非常小的值,因此您可以将它们存储在很少的位中.

关键是你可以做很多事情,但你必须比我们提出建议更多地了解数据.


更新:哦,等等,定点字符串?!

好的,这是(相对)容易的.首先,是的,您希望将字符串转换为某种二进制表示形式.只是编写一个数据项,你可能有

040.00105.0020090518212100Z
Run Code Online (Sandbox Code Playgroud)

你可以转换为

|  4000            | short int, 16 bits |  
| 10500            | short int, 16 bits |  
| 20090518212100Z  | 64 bits            |

这是96位,12个字节对​​26个字节.


Cad*_*oux 5

压缩通常适用于字节流.当流具有非均匀的字节值分布(例如文本或存储为文本的数字)时,您可以实现的压缩率会更高,因为使用更少的位来存储更频繁出现的字节(在Huffman中)压缩).

通常,您所谈论的数据将简单地存储为二进制数字(而不是文本),这通常是空间和检索效率.

我建议您查看数据压缩书