http://www.cs.bell-labs.com/cm/cs/pearls/sol01.htmlから:
C コードは次のようになります。
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
void set(int i) { a[i>>SHIFT] |= (1<<(i & MASK)); }
void clr(int i) { a[i>>SHIFT] &= ~(1<<(i & MASK)); }
int test(int i){ return a[i>>SHIFT] & (1<<(i & MASK)); }
ctypes、BitArrays、numpyを見つけましたが、上記の C コードと同じくらい効率的かどうかはわかりません。
たとえば、次のようなコードを記述したとします。
from ctypes import c_int
a=[c_int(9)]*1024*1024
使用されるスペースは 1M バイトですか、それともそれ以上ですか?
Python で同じことを実行できる優れたライブラリを知っている人はいますか?