令M为2048x2048矩阵os位。
如果我想将所有这些位存储在矩阵中,那么执行
效率会不高 int[,] M = new int[2048, 2048]
因为它需要比特所需空间的32倍(每个int 2048 ^ 2 * 32bits)。
我可以做int[,] M = new int[64, 64]
并且每个int会给我32位(因此 32×64 = 2048 ),所以我会有一个很好的空间消耗,但它有点像例如,某些任意行的第1033位是难看的,因为我必须获得( 1033/32 )int的( 1033%32 )位
我的问题是:有没有更好的(或更具体的方法)让这个位矩阵具有最佳的空间消耗和对任何M [i] [j]∈{0,1}的持续访问?
答案 0 :(得分:2)
使用BitArray
类的数组:
var bitMatrix = new BitArray[2048];
for (int i = 0; i < bitMatrix.Length; i++)
bitMatrix[i] = new BitArray(2048);
bitMatrix[5][12] = true;
请注意,您可以通过bool
值访问这些位。