Algorithm 什么';这是在小内存(小于50MB)中存储大量二进制数的最佳方式

Algorithm 什么';这是在小内存(小于50MB)中存储大量二进制数的最佳方式,algorithm,data-structures,Algorithm,Data Structures,例如,我需要存储1000000(或几个数量级以上)二进制数。我的内存不足50MB。布尔类型数组如何占用空间 我第一次尝试使用整数数组实现,但它需要大量内存,这在嵌入式设备中是不可接受的 我是否也可以使用二进制形式的整数来表示8个二进制数字,这样可以减少整数的数量(虽然只减少了8倍)?如果您的数字受MAX限制,则可以使用Ceil(MAX/8)字节在每个字节中存储8个布尔值 设置数组中的第n位: ByteArr[N div 8]=ByteArr[N div 8]或(1你可以尝试使用一个你需要知道比你

例如,我需要存储1000000(或几个数量级以上)二进制数。我的内存不足50MB。布尔类型数组如何占用空间

我第一次尝试使用整数数组实现,但它需要大量内存,这在嵌入式设备中是不可接受的


我是否也可以使用二进制形式的整数来表示8个二进制数字,这样可以减少整数的数量(虽然只减少了8倍)?

如果您的数字受MAX限制,则可以使用Ceil(MAX/8)字节在每个字节中存储8个布尔值

设置数组中的第n位:

ByteArr[N div 8]=ByteArr[N div 8]或(1你可以尝试使用一个

你需要知道比你告诉我们更多的关于你的数字。它们的范围是什么?它们的分布是什么?是否存在任何模式?有损压缩是否可以接受?如果是,损失是多少?如果你的意思是你需要存储一百万位,即每个1或0,那么根据定义,你可以存储每个字节8,通常每个整数32位,因此一百万位只有125k。如果它们是稀疏的(即,大多数为零,只有附加的1),您可能会查看Bloom过滤器。
Set Nth bit in array:
ByteArr[N div 8] = ByteArr[N div 8] OR (1 << (N mod 8))
Clear Nth bit in array:
ByteArr[N div 8] = ByteArr[N div 8] AND !(1 << (N mod 8))
Get Nth bit:
BoolResult = 0 <> (ByteArr[N div 8] AND (1 << (N mod 8)))