标签: bitarray

在 Java 中有效地迭代大量位数组中未设置的值

我得到了一个保存为字节数组的巨大位数组,它代表所有有符号 int 值(4,294,967,295)。

byte[] bitArray = byte[536870912];
Run Code Online (Sandbox Code Playgroud)

数组中的每个字节代表 8 个数字,每一位代表一个数字。这意味着 byte[0] 存储 1, 2, 3, 4, 5, 6, 7, 8,而 byte[1] 存储 9, 10, 11, 12, 13, 14, 15, 16 等。

我用它来存储一个巨大的表,我可以在其中将数字设置为 true 或 false(0 或 1)。我有一些相当有效的方法来检查是否设置了一个位并设置了一个位(仅使用按位运算符)。

现在我需要一遍又一遍地迭代这个表来找到设置为 0 的位。当然,只存储我想要迭代的数字会相当有效,所以我不需要每次都检查它们,但是数字太多,将它们存储在 ArrayList 中会占用大量内存。

如何有效地多次迭代位数组中未设置的值?

java loops bitarray

1
推荐指数
1
解决办法
988
查看次数

为什么600MB后动态内存分配失败?

我使用三维char数组实现了一个bloom过滤器(位表),它运行良好,直到达到无法再分配内存并给出bad_alloc消息的程度.在分配600MB后,它在下一个扩展请求中给出了这个错误.

布隆过滤器(阵列)预计会增长到8到10GB.

这是我用来分配(扩展)位表的代码.

unsigned char ***bit_table_=0;
unsigned int ROWS_old=5;
unsigned int EXPND_SIZE=5;


void expand_bit_table()
     {
         FILE *temp;
         temp=fopen("chunk_temp","w+b");
         //copy old content
         for(int i=0;i<ROWS_old;++i)
             for(int j=0;j<ROWS;++j)
                 fwrite(bit_table_[i][j],COLUMNS,1,temp);
         fclose(temp);
         //delete old table
         chunk_delete_bit_table();
         //create expanded bit table ==> add EXP_SIZE more rows
         bit_table_=new unsigned char**[ROWS_old+EXPND_SIZE];
         for(int i=0;i<ROWS_old+EXPND_SIZE;++i)
            {
                bit_table_[i]=new unsigned char*[ROWS];
                for(int k=0;k<ROWS;++k)
                    bit_table_[i][k]=new unsigned char[COLUMNS];
            }
         //copy back old content

          temp=fopen("chunk_temp","r+b");
         for(int i=0;i<ROWS_old;++i)
         {
            fread(bit_table_[i],COLUMNS*ROWS,1,temp);
         }
          fclose(temp);
         //set remaining content of bit_table_to 0
         for(int i=ROWS_old;i<ROWS_old+EXPND_SIZE;++i)
             for(int j=0;j<ROWS;++j)
                 for(int k=0;k<COLUMNS;++k) …
Run Code Online (Sandbox Code Playgroud)

c++ bitarray bad-alloc dynamic-arrays

0
推荐指数
1
解决办法
1742
查看次数

C#-移位和反转字节数组中的位顺序

我试图从字节数组中获取正确的int。通过POS for .Net从RFIDTag读取字节。(大约需要18位)

二进制格式的字节数组如下:00001110 11011100 00000000 00011011 10000000

我需要摆脱的是:00 00000000 11101101(int = 237)

从原始字节开始将以相反的顺序为以下位:------ 10 11011100 00000000

我一直在看bitArray。Array.Reverse。以及几种移位位的方法。但是我只是无法绕过这个头。

谁能指出我正确的方向?

c# binary byte bits bitarray

0
推荐指数
1
解决办法
8707
查看次数

C#-多维位数组

我正在尝试使用多维,BitArray但是我对如何设置或读取位感到困惑。

使用正常的一维尺寸,BitArray我可以简单地进行以下设置:

bitArray.Set(0, true);
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何对二维位数组执行相同的操作。例如,以下代码没有意义,因为该Set方法需要一个索引,但是我之前已经在“ [0,0]”中提供了该索引:

    bitArray[0, 0].Set(0, true);
Run Code Online (Sandbox Code Playgroud)

我的问题:制作然后使用多维的正确方法是BitArray什么?

c# arrays bitarray multidimensional-array

0
推荐指数
1
解决办法
2377
查看次数