1. Bit Map Introduction to the algorithm

So-called Bit-map Just use one bit Bit to mark the corresponding Value, and Key That's the element . Because of the adoption of Bit Store data in units , So in terms of storage space , Can save a lot .

2. Bit Map The basic idea of

Let's take a concrete example first , Suppose we want to be right 0-7 Internal 5 Elements (4,7,2,5,3) Sort ( Let's assume that these elements are not repeated ). Then we can adopt Bit-map To achieve the purpose of sorting . To express 8 Number , We just need 8 individual Bit(1Bytes), First we open up 1Byte Space , Put all of these spaces Bit All bits are set to 0, Here's the picture :

And then go through this 5 Elements , The first element is 4, Then put 4 The corresponding position is 1( You can do this p+(i/8)|(0x01<<(i%8)) Of course, the operation here involves Big-ending and Little-ending The situation of , I think so Big-ending), Because it starts from scratch , So the fifth position is one ( Here's the picture ):

aaarticlea/png;base64,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pWdBQUFhYeGECRMKCgpGjRpVXFx8ww03FBcXd6CooqKiMWPGFBQUuOsdO3ZsZynpJDc3d8yYMSNGjCguLh49evSIESPGjBnTASWLiorij/n5+ePGjcvJySkoKJg0aVJubm5OTo77KS8vz9VJu6S4uNgpNnLkyMLCQrfTgfosLCx0Z3c7hYWFRUVF+fn5d911V9Iox8MDZ7kff/zxrVu3dol/IHJLhzV2KJ0ice8Wnx4ddUviA5131VkaxiU7S+B5HrNb16qD9eB82c5VL5akb+YSg9E0XNAucQdKlKHpJMYAkaPcgZIlMfxInqjDRTVTxo3ak4nHseVuhJuI4jryPC9+/3QHlGhDHOLxyLXDo+/keBRNm+HARWudvL1FpAO3ECdere1K6Nx3eDvxfT82SR2+AyUxcLTWOlWJSCnlfNm45DjruF0S3zMxhR2TVuF2WrmBXKweEV155ZW33HLLo48+unnz5i6xJWi207GBbauSbOx4WNmBcuIrdDudrmeyKpNJ5B1TMvmxE/V0Jbtrj5XsWFQHiX4VCSsb123SDHWs/Jg5SRjy9pYT65DsEiW6M509imG4/PLLb7rpprlz57788stdmqniPra0rNJRR+JL+VI+NxGRCy64oKSk5OGHH96wYUOX5A+uS+2wm/WlfCmfpzTrJdx+//79x40bN3v27HXr1nVJPsuJ1sKfX8qX8sWUlv4PgMsvv/zmm2+eN2/e+vXru2Sz2ffff7+8vHz69OnFxcVXXXXVRRdddOGFFw4cOPCaa64ZPHjwtU1l8JfypXwBJEbx2muvve6664YMGTJkyJDrrruuoKBg2rRpzz333CuvvNIlm81+8sknGzZseOaZZ+67777bbrtt0qRJN91006233nrbbbf95Cc/mTx58uTJk5M7X8qX8r8ukxPy04Tcddddc+fOraioePPNN7sYY+rq6v75z39WV1c/++yzjz322GOPPfbEE0/88Y9/fOKJJ5588smnnnrqySefdDvx/pfypXxx5Kmnnno6kvnz5y9fvvzVV1/dsWNHF6217/v19fUff/zx66+//vLLL69evfqll17auHHjpk2bNm/evHnz5k2bNrn9LVu2bP5SvpQvgDgmk5Q62bJlyzvvvLNr1y7f9/8vJA33MoL0iw0AAAAASUVORK5CYII=" alt="" />

And then deal with the second element 7, Put the eighth position at 1,, Then I'll deal with the third element , All the way to the end, all the elements , Set the corresponding position to 1, At this time of memory Bit The status of bits is as follows :

aaarticlea/png;base64,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0dH6liSFr0Gz1jrn/Dtx/Dfebqa/KWH6fdGiRf4lq/4N8F3/eLfib8lPMnsN119/fS++ZFVEbrrppttuu83XQvqi1FL1+Pf1aPLStksvvXTdunU9Nlq7inPud7/7HZJXM6cX7YGq9Kx33333vPPO88p7o4wAcM8991xxxRXpC4zSzrBn5RSR++67b9SoUUh7qhIlNdvpqx4BjB079vbbb/fa0nv3/9pduIno4YcfPuaYY/zr0OfOnVtTU1NfujQ0NKT/nTNnzqmnnnr22Wf3QE8xOeuss84666yampqFCxcWXrEk8a+jb2ho8G9TP/LII6uqqnqxkPPmzTvwwANnz549d+7c+vr6O+64I30peklSXV09Z86c2bNn19XVXX/99YcddlhtbW1643suAwcO7Nu375133llfXz9//vz6+vqGhoa6urpS9fiarK6uHjx48EknnVRbW+u1lSqzZ8/2r6P39VZfX3/nnXf++Mc/njdvXhRF6heAJ48BEXUXblV97733Lrvssj/96U9Dhw71LwMfWaJUVlb6d6qPHDlyxIgRXtXYsWNL1dOFjB49+oorrhg1atTFF19cVlY2atSoYcOGlapk2LBhY8eOvfjii4cPH15eXl5VVfWnP/2pFwtZVVU1evTo8vLyIUOGeP1lZWXDhw/vgarKykpfk2VlZZdddtmQIUOGDBnSW+UcM2aM/69vsmHDhlVWVlZVVZWqp6qqavjw4WVlZZdffnlFRUVFRcWQIUNGjx5dqh4PT+F75seOHXvZZZdt3Lgx9XNSN6+7Pnfq26UuV8/eI1zYr2nysrYedE9diL+9tJw9fk8fEn/GD32CIOjFcvriZbNZX8g96ev9QRRFfsAXBEEvlRFIevnCOuxZlXpaUkcxHfCVqkc6vhVaRDKZTCdV6Utru2u5U9cwPTMMw541tm/LwtvrRV8WBbeNjmO1HhSysGzpmqNeEWutr9K0Yomox/WQvpQxl8sVOqN7LmklFD6BPagHf+6uJrJnpfJjofQ5KRzpoiBE2F3LjY7DlLQLKLVYuw5De51sbySk4DWePYtapk9g4di0d4uKpL173My+RdOASY/js11IGrNLLUXPrpI2dLLTg/bgrgvDL0EQFHrYna7iv+kAd+H1do3jFH7f6Tf7ZJ/8HaXYw/DTn/50yJAhd9xxx+rVq/sUw7cY3Ptkn3yY5eSTT7744otvu+22lStX9vEOeyf/8m/R2e2TfbIX5IQTThg8ePDNN9/8/PPPt/vcmizoStd07fbkvd397JN90j3xfB533HHtcBtjdpuAovv8kH3y/6D85Cc/afe5jTGbN29+4oknJk6ceP7555966qk//vGPTznllDPOOOPMM8/81a9+ddZZZ/1qn+yTD6uc1VEGDBhw5ZVXNjQ0vPjii30ymczWrVvXrFlz9913T5o0qbKy8tJLL7344osrKioqKytHJVKVyKh9sk8+ZDK6QMaNG3fXXXc98cQTmzZt6kNEra2tGzdufPbZZxcsWDB79uxZs2bNnj27urq6trY2TSqoS6QH6QH7ZJ/0uuwKZENDQ0NDw7x585566ql169a1trb2IaIwDBsbGzdt2vTKK6+sXbt21apVq1evXrt27Qv7ZJ98WGXdunWFx+vXr1+3bt26deteeumlN998c/v27a2trf8X6PiJMEpKxQYAAAAASUVORK5CYII=" alt="" />

And then we're going through it now Bit Area , Output the number of the one bit (2,3,4,5,7), In this way, the purpose of sorting is achieved .

advantage :

1. It's very efficient , No comparison or displacement ;

2. Less memory , such as N=10000000; Just use... Memory N/8=1250000Byte=1.25M.

shortcoming :

All the data can't be repeated . That is, duplicate data cannot be sorted and searched .

3. Map The mapping table

Let's say the total number of items that need to be sorted or searched N=10000000, So we need to apply for the memory size of int a[1 + N/32], among :a[0] In memory 32 To be able to correspond to a decimal number 0-31, By analogy :

bitmap The table is :

a[0]--------->0-31

a[1]--------->32-63

a[2]--------->64-95

a[3]--------->96-127

..........

So how to convert a decimal number to a corresponding bit position , The following describes the use of displacement to convert decimal numbers into corresponding bit position .

4. Displacement conversion

Apply for one int One dimensional array , Then it can be regarded as 32 Two dimensional array of bits ,

  |                 32 position                          |

int a[0]    |0000000000000000000000000000000000000|

int a[1]    |0000000000000000000000000000000000000|

………………

int a[N]    |0000000000000000000000000000000000000|

For example, the decimal system 0, Corresponding to a[0] Occupied bit To be the first in the world : 00000000000000000000000000000001

0-31: Corresponding to a[0] in

i =0                      00000000000000000000000000000000

temp=0                   00000000000000000000000000000000

answer=1                 00000000000000000000000000000001

i =1                      00000000000000000000000000000001

temp=1                   00000000000000000000000000000001

answer=2                 00000000000000000000000000000010

i =2                      00000000000000000000000000000010

temp=2                   00000000000000000000000000000010

answer=4                 00000000000000000000000000000100

i =30                     00000000000000000000000000011110

temp=30                  00000000000000000000000000011110

answer=1073741824               01000000000000000000000000000000

i =31                            00000000000000000000000000011111

temp=31                        00000000000000000000000000011111

answer=-2147483648               10000000000000000000000000000000

32-63: Corresponding to a[1] in

i =32                     00000000000000000000000000100000

temp=0                   00000000000000000000000000000000

answer=1                 00000000000000000000000000000001

i =33                     00000000000000000000000000100001

temp=1                   00000000000000000000000000000001

answer=2                 00000000000000000000000000000010

i =34                     00000000000000000000000000100010

temp=2                   00000000000000000000000000000010

answer=4                 00000000000000000000000000000100

i =61                       00000000000000000000000000111101

temp=29                    00000000000000000000000000011101

answer=536870912                00100000000000000000000000000000

i =62                       00000000000000000000000000111110

temp=30                    00000000000000000000000000011110

answer=1073741824              01000000000000000000000000000000

i =63                       00000000000000000000000000111111

temp=31                    00000000000000000000000000011111

answer=-2147483648               10000000000000000000000000000000

Analysis of the corresponding table above , three :

1. Find decimal 0-N Corresponding to the array a Subscript in :

Decimal system 0-31, Corresponding to a[0] in , Start with the decimal number n Convert to and from 32 The remainder of can be converted to the corresponding in the array a Subscript in . such as n=24, that n/32=0, be 24 Corresponding to the array a The subscript in is 0. And such as n=60, that n/32=1, be 60 Corresponding to the array a The subscript in is 1, In the same way, we can calculate 0-N In the array a Subscript in .

2. seek 0-N Corresponding 0-31 The number in :

Decimal system 0-31 As the corresponding 0-31, and 32-63 Then it's the same thing 0-31, That is, given a number n You can go through the mold 32 Get the correspondence 0-31 The number in .

3. Using displacement 0-31 Make corresponding 32bit Position as 1:

To find the corresponding 0-31 The number is M, Move left M position : namely 2^M. Then put 1.

From this we calculate 10000000 individual bit Occupied space :

1byte = 8bit

1kb = 1024byte

1mb = 1024kb

The space occupied is :10000000/8/1024/1024mb.

5. Expand

Bloom filter It's right bit-map An extension of

6. Bit-Map Application

1) Fast data search , Weight determination , Delete , Generally speaking, the data range is int Of 10 Below the times .

2) Data compression is achieved by removing duplicate data

7. Bit-Map The concrete realization of

 #define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000 int a[ + N/BITSPERWORD];// Application memory size //set Set the bit Position as 1
void set(int i) {
a[i>>SHIFT] |= (<<(i & MASK));
}
//clr Initialize all bit Position as 0
void clr(int i) {
a[i>>SHIFT] &= ~(<<(i & MASK));
}
//test The test is in bit For whether it is 1
int test(int i){
return a[i>>SHIFT] & (<<(i & MASK));
} int main()
{
int i;
for (i = ; i < N; i++)
clr(i);
while (scanf("%d", &i) != EOF)
set(i);
for (i = ; i < N; i++)
if (test(i))
printf("%d\n", i);
return ;
}

Indicate the : Move left n Bits are multiplied by 2 Of n Power , Move right n Bits are divided by 2 Of n Power

Analyze the void set(int i) {        a[i>>SHIFT] |=  (1<<(i & MASK)); }

1)  i>>SHIFT:

among SHIFT=5, namely i Move right 5 by ,2^5=32, amount to i/32, That is to find the decimal system i Corresponding to the array a Subscript in . such as i=20, adopt i>>SHIFT=20>>5=0 Obtainable i=20 The subscript of is 0;

2)  i & MASK:

among MASK=0X1F, Hexadecimal to decimal to 31, Binary for 0001 1111,i&(0001 1111) It's equivalent to keeping i After 5 position .

such as i=23, Binary for :0001 0111, that

0001 0111

& 0001 1111 = 0001 0111 Decimal system :23

such as i=83, Binary for :0000 0000 0101 0011, that

0000 0000 0101 0011

& 0000 0000 0001 0000 = 0000 0000 0001 0011 Decimal system :19

i & MASK amount to i%32.

3) 1<<(i & MASK)

Is equivalent to 1 Move left (i & MASK) position .

such as (i & MASK)=20, that i<<20 Equivalent to :

0000 0000 0000 0000 0000 0000 0000 0001 << 20

=0000 0000 0001 0000 0000 0000 0000 0000

Note that the above “|=”. Bitwise operators and their applications I mentioned the application of bit operation :

take int Type variable a Of the k Positional clarity 0, namely a=a&~(1<<k)

take int Type variable a Of the k Location 1, namely a=a|(1<<k)

Here will be   a[i/32] |= (1<<M)); The first M Location 1 .

4) void set(int i) { a[i>>SHIFT]  |=  (1<<(i & MASK)); } Equivalent void set(int i) {  a[i/32] |= (1<<(i%32));  }

That is to realize the three steps mentioned above :

1. Find decimal 0-N Corresponding to the array a Subscript in : n/32

2. seek 0-N Corresponding 0-31 The number in : N%32=M

3. Using displacement 0-31 Make corresponding 32bit Position as 1: 1<<M, Juxtaposition 1;

Then print the results :

0=11000000000000000000000000001110

1=1000001000000000000000010

6=10000000

32 Who said , The actual results are clear at a glance , have a look 1,2,3,30,31, 33,50,56,199 Where the data is located :

  31  30                                                              3     2    1

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />                                                                           aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />

0=  1    1    00       0000   0000   0000   0000    0000   0000   1     1   1  0

       56          50                                   33

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />          aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />                                   aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />

1= 0000  0001  0000  0100  0000  0000  0000  0010

                     199

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAIAAACJJmN7AAAByklEQVQokXXSzUvUURTG8fk3DYQiaCBoHzoTQaCm9kK5qZRZ1CYQEiyhgiBdFRFCC3tZFPkSqOgMjvO7955znm+LUUYnussDH865zzk1eoYHpUf0RElSDg6dLbg2tbDTwQMCLwDFjdNXIyjdHpHNjqrcNTjKdKH1dv3qxJO51nIxLFNShBCck54yslAySoYMvw6pTzwebdxvTi9sfN+TQBxndwa4JgdALqyK3DHvOnNPV56tbYxcn/34bX9idj4bKatyylmJCCG5Y51SJVj/ut240/oJF8bvduDBo+dv3n1wyJDPDFwL4dGPwDIcpHL7YWv1y/YPZ2RsZtfY3EuTM3PbuwcVpLM9i3AIvGdVhtVPnyfvzbfhN4w2p9uQYPHFyuLScoJqSBY3EUE5tur1+7Wd/dQONuHijam2yEGvsqWXr5Jk5xICEWBQnDAo4gi24FLjVheKAFzmMCwhoEARJoigJ/6Iy42bx+AKsFB24txW6DdUhgIGKEiwC1fGGz0UylAUSf9KUVBGuS9xitgT9eZ4kqMMiVM5uKFAkqOCMsRAQr05lk7qfcmwDCSKKCc1p4h9qDfH8ulHFLkvB9MaFEWEqX+H+q8cyvYv0jsfu2bQ+9kAAAAASUVORK5CYII=" alt="" />

6=  0000  0000  0000  0000  0000  0000  1000  0000

【 Problem instance 】

  1) It is known that a file contains some phone numbers , Each number is 8 Digit number , Count the number of different numbers .8 Most bits 99 999 999, Probably need 99m individual bit, Probably 10 A few m Bytes of memory . ( Can be understood as from 0-99 999 999 The number of , Each number corresponds to one Bit position , So you just need to 99M individual Bit==1.2MBytes, such , Just a little 1.2M Left and right memory represents all 8 Number of phone numbers )

  2)2.5 The number of non repeated integers found in billion integers , There's not enough memory for this 2.5 Million integers . take bit-map Extend the , use 2bit Represent a number ,0 Indicates no ,1 Indicates one occurrence ,2 Appear 2 Times and above , In traversing these numbers , If the value of the corresponding position is 0, Set it to 1; If it is 1, Set it to 2; If it is 2, Keep the same . Or we don't 2bit To represent , We use two bit-map You can simulate this 2bit-map, It's the same thing .

 // use char Array storage 2-Bitmap, Don't worry about the size of the memory 
unsigned char flags[]; // Array size customization
unsigned get_val(int idx) {
// | 8 bit |
// |00 00 00 00| // mapping 3 2 1 0
// |00 00 00 00| // Express 7 6 5 4
// ……
// |00 00 00 00| int i = idx/; // One char Express 4 Number ,
int j = idx%;
unsigned ret = (flags[i]&(0x3<<(*j)))>>(*j);
//0x3 yes 0011 j For the range of 0-3, therefore 0x3<<(2*j) The scope is 00000011 To 11000000 Such as idx=7 i=1 ,j=3 that flags[1]&11000000, Get is |00 00 00 00|
// Express 7 6 5 4
return ret;
} unsigned set_val(int idx, unsigned int val) {
int i = idx/;
int j = idx%;
unsigned tmp = (flags[i]&~((0x3<<(*j))&0xff)) | (((val%)<<(*j))&0xff);
flags[i] = tmp;
return ;
}
unsigned add_one(int idx)
{
if (get_val(idx)>=) { // This position has already appeared ??
return ;
} else {
set_val(idx, get_val(idx)+);
return ;
}
} // Only test for non negative numbers ;
// If you think about negative numbers , One more 2-Bitmap Array .
int a[]={, , , , , , , , , , , ,, , ,,,,,,}; int main() {
int i;
memset(flags, , sizeof(flags)); printf(" The original array is :");
for(i=;i < sizeof(a)/sizeof(int); ++i) {
printf("%d ", a[i]);
add_one(a[i]);
}
printf("\r\n");
printf(" Numbers that only appear once :");
for(i=;i < ; ++i) {
if(get_val(i) == )
printf("%d ", i);
}
printf("\r\n"); return ;
}

Big data processing -bitmap It's a more related article about Shenma things

  1. Big data processing -Bitmap

    MapReduce It's a programming model , For large data sets ( Greater than 1TB) Parallel operation of . Concept "Map( mapping )" and "Reduce( reduction )" Bit-map Space compression and quick sort to ...

  2. function : Recursion is a magic horse - Basic learning Python022

    function : Recursion is a magic horse Let programming change the world Change the world by program The theme of our class is recursion, which is Shenma , Will be through the small turtle with a sense of explanation , To tell you that Shenma is recursive ! If a good programmer is Bole , Then give me ...

  3. Basic learning Python(22)-- function : Recursion is a magic horse

    Knowledge point Recursion is a magic horse ? Recursion belongs to the category of algorithms . Recursion is a behavior of a function call itself . >>> def g(): return g() >>> g() Traceback ...

  4. Magic Horse ,EntityFramework Core 1.1 Updated again ? go , Hurry to watch

    Preface Oh , Don't do SQL Why? , Of course it will continue , It will continue to update over the weekend , It is estimated that there will be dozens of articles to be finished , But I will insist on SQL Updated completely , It's not going to be bad , If it hasn't been updated for a long time , Don't miss me , That means I'm learning new skills , That's learning English , Ben ...

  5. SQLSERVER It's something you see all the time CACHE STORES It's Shenma Dongdong ?

    SQLSERVER It's something you see all the time CACHE STORES It's Shenma Dongdong ? When we're in SSMS Do the following SQL Statement empty SQLSERVER When you're caching , We will be in SQL ERRORLOG I see some information in the library DBCC ...

  6. Record a database tuning process (IIS Send to me SQLSERVER Of FETCH API_CURSOR Sentence is god horse ?)

    Record a database tuning process (IIS Send to me SQLSERVER Of FETCH API_CURSOR Sentence is god horse ?) A few days ago, I helped customers optimize a database , The size of that database is 6G It's reasonable that such a small database won't have too much performance problems , ...

  7. [ Re posting ]Tensor What is god horse? ? Why would Flow?

    Tensor What is god horse? ? Why would Flow? Internet enthusiasts There was no. 17-05-2310:03 Big data digest works , Please refer to the end of the article for reprint requirements compile | Shao Pangpang , Jiang Fan , Da Jieqiong ,Aileen Maybe you've downloaded TensorFl ...

  8. Big data processing framework Strom: Storm----helloword

    Big data processing framework Strom: Storm----helloword Storm Run according to the designed topology flow , So before you write the code, you need to design the topology . Here's a simple topology : First step : Create a topology class that contains main Methodical ...

  9. Baidu , Google ,360, sogou , God horse and other spiders IP paragraph

    https://www.imydl.com/wzjs/5971.html Remember 3 In January, Mingyue shared an article [ Stationmaster must : Baidu . Google . sogou .360 When spiders are common IP Address ] The article , Seems to have been the attention of many webmasters ...

Random recommendation

  1. js Kuzhi dojo

    Use dojo Source code 1. download Dojo 2.dojo The directory structure is as follows demo/ myModule.js dojo/ dijit/ dojox/ util/ hellodojo.html 3. introduce dojo. ...

  2. [Hadoop big data ]——Hive Getting started with deployment

    Hive To solve the problem hadoop in mapreduce Write the difficult , To be familiar with sql Of people who use . As long as you are right SQL Have some understanding , You can pass Hive Write mapreduce The program , Instead of learning hadoop Medium api. ...

  3. LINQ to SQL sentence (16) Object identification of

    Object identifier Objects in the runtime have unique identities . Two variables that refer to the same object actually refer to the same instance of the object . When you change a variable , You can see these changes through another variable . Rows in relational database tables do not have unique identities . Because each line has a unique main ...

  4. Eight queens , Backtracking and recursion (Python Realization )

    The eight queens problem is a famous mathematician Gauss in the 19th century 1850 in . The following is a python Statement of the eight queens code , Excerpt from <Python Basic course >, Code relative to other languages , It's short and can be printed at one time 92 Seed result . At the same time, it can expand ...

  5. Linux Lower serial port ttyS2,ttyS3 Solutions to problems that don't work

    PC104,Xlinux Next , Suddenly found the serial port 3,4 Out-of-service ... Thought it was a hardware problem , Switch to wince after ,3,4 Work well , Eliminate circuit problems stay linux Check out dmesg: serial8250: ttyS0 at ...

  6. etcd Use it ttl The problem of inaccuracy

    Problem phenomenon Deployment has a etcd colony , Namely 10.8.65.106,10.8.65.107 and 10.8.65.108. And then I use etcdctl Set... For a value ttl, And then through watch Observe , It is found that the failure time is not accurate ...

  7. 【BZOj 3670】【UOJ #5】【NOI 2014】 zoo

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 http://uoj.ac/problem/5 You can build "KMP automata " however ...

  8. Stream- Quick start Stream Programming

    1. What is flow Stream Not a collection element , It's not a data structure and doesn't hold data , It's about algorithms and calculations , It's more like an advanced version of Iterator. Original version of Iterator, Users can only explicitly traverse elements one by one and execute ...

  9. Begin to learn .net The second day of the

    There is no class this morning for some reason . I went to school in the afternoon .net Table for . <body></body><img src="../temp/ New folder /64aab4ae3e632dbc ...

  10. Object oriented design pattern _ Generator mode interpretation (Builder Pattern)

    First of all, it is easy to think of an application scenario : The production process of mobile phones : Mobile phones have a lot of sub components ( parts ), Tens of thousands of , The production process of different brands of mobile phones is complex and different , The design of mobile phones of the same brand is also diversified due to the needs of customers , It's as big as the model , Small to color , whether ...