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

时间:2014-07-10 10:13:53

标签: c#

我正在使用.Net Micro Framework编写嵌入式设备的代码,我有一组计算的整数,如下面的链接所示,我需要访问但是如果这些信息可以以某种方式最小化,我会喜欢它,基本上我有一个数字列表,范围从150 - 4,每个数字有一个相邻的数字列表,它可以链接到,ex 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

2 个答案:

答案 0 :(得分:3)

将每一行存储为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个字节中。

答案 1 :(得分:1)

如果两个连续数字之间的最大减量不超过(例如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