[英]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.