繁体   English   中英

最小化一组数字的内存占用的有效方法

[英]Efficient way of minimizing memory footprint of set of numbers

我正在使用.Net Micro Framework为嵌入式设备编写代码,我有一组计算出的整数,如下面的链接所示,我需要访问该整数,但是我希望如果可以某种方式使此信息最小化,基本上一个数字列表,范围从150-4,每个数字都有一个可以链接到的相邻数字列表,例如150可以链接到149、148、146、144、142等,一些数字(150到4)共享链接数150和149共享91以及许多其他例子,因此,我认为必须有某种方式来代表所有这些数字,因为存在大量共享链接数,因此减少了内存占用,所以任何建议都是大。

https://www.dropbox.com/s/qqn8097571r9s27/LinkedNumbers.txt

示例数据

150 = 149、148、146、144、142、140、138、136、134、99、93、92、91、87

149 = 148、147、145、143、141、139、137、135、133、131、129、103、102、97、96、93、92、91

148 = 147、146、145、144、142、140、138、136、134、132、99、97、94、92、91、88、87、86

147 = 146、145、144、143、141、139、137、135、133、131、95、91、90、89、88

将每一行存储为一个19字节的位序列,其中一个代表列表中的一个条目,一个零代表不在列表中的值。

例如,您的第一个条目是:

150 = 149, 148, 146, 144, 142, 140, 138, 136, 134, 99, 93, 92, 91, 87,
      83, 79, 77, 65, 63, 59, 55, 54, 53, 51, 49, 48, 47, 46, 45, 44, 
      43, 42, 41, 40, 39, 38, 37, 35, 34, 33, 31, 29, 27, 25, 23, 22, 
      21, 19, 18, 17, 14, 13, 12, 11, 9, 8, 7, 6, 5, 4, 3, 2

可以存储为:-

150 = 0,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0.....

其中第一位代表0,第二位代表1,依此类推。

您可以通过减少每行使用的位数来提高存储效率,但是要检查的位数的计算变得更加复杂。 使用此功能,整个批次可以存储为1416字节。

如果两个连续数字之间的最大减量不超过例如64 ,则可以将每个序列存储为6位无符号减量值的列表。

例:

150 = 149, 148, 146, 144, 142, 140, 138, 136, 134, 99, 93, 92, 91, 87

成为:

150 =   1,   1,   2,   2,   2,   2,   2,   2,   2, 35,  6,  1,  1,  4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM