2014-11-04 42 views
1

例如,我需要存儲1,000,000(或更多數量級)的二進制數。我有不到50 MB。布爾類型數組如何佔用空間?我第一次試圖使用整數數組來實現,但它需要大量的內存,這在例如不可接受的情況下是不可接受的。一個嵌入式設備。在小內存中存儲大量二進制數的最佳方式是什麼(小於50 MB)

我也可以使用二進制形式的整數來表示8個二進制數字,這可以減少整數的數量(儘管只有8個因子)?

+5

你需要知道比你告訴我們的更多關於你的數字。他們的範圍是什麼?他們的分佈是什麼?是否存在任何模式?有損壓縮可以接受嗎?如果是這樣,損失多少? – 2014-11-04 16:44:12

+4

如果你的意思是你需要存儲一百萬位,即每個1或0,那麼根據定義,你可以存儲每個字節8個,並且通常每個整數32個,因此一百萬位僅僅是125k。如果它們很稀疏(也就是說,大多數只有零值的零),您可以查看Bloom濾鏡。 – 2014-11-04 16:44:52

回答

2

如果您的號碼是由MAX的限制,可存儲8個布爾在每個字節,使用的Ceil(MAX/8)字節

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))) 
相關問題