Bit Vector STORE number into corresponding position
Multiple int
int[] array => array[0] ,array[1], .......
32 bit 32 bit
int wordNumber = numberPos >> 5; ==> array Index
int bitNumber = (numberPos & 0x1F); // mod by 32 ==> array element int bit
// NOTE: divide by 32 is because each int is 32 bit
// divide by 8 is because each byte is 8 bit1~ N = 1 ~ 32000 = 32 *1000 = 2^4 * 2^10 = 2 ^14
4KB = 4*2^10*8 btis = 2 ^ 15 bits
2 ^ 15 > 2 ^14
each bit represents a integer
2. Implementation
// NOTE: divide by 32 is because each int is 32 bit
// divide by 8 is because each byte is 8 bit1~ N = 1 ~ 32000 = 32 *1000 = 2^4 * 2^10 = 2 ^14
4KB = 4*2^10*8 btis = 2 ^ 15 bits
2 ^ 15 > 2 ^14
each bit represents a integer
2. Implementation
public static void checkDuplicates(int[] array)
{
BitSet bs = new BitSet(32000);
for (int i =0 ; i < array.length; i++)
{
int num = array[i];
int index = num-1;
if ( bs.get(index) )
System.out.println(num);
else
bs.set(index);
}
}
class BitSet
{
// NOTE: divide by 32 is because each int is 32 bit
// divide by 8 is because each byte is 8 bit
// Field
int[] bitSet;
// Constructor
public BitSet(int size)
{
bitSet = new int[size >> 5]; // divide by 32
}
boolean get(int pos)
{
int wordNumber = (pos >> 5); // divide by 32
int bitNumber = (pos & 0x1F); // mod 32 1F=1 1111 = 2^4*1+2^3*1+...+2^0
return ( bitSet[wordNumber] & (1>>bitNumber) ) != 0;
}
void set(int numberPos)
{
int wordNumber = numberPos >> 5;
int bitNumber = (numberPos & 0x1F); // mod by 32
bitsSet[wordNumber] |= (1<< bitNumber);
}
}
3. Silmilar Ones
No comments:
Post a Comment