You can't. You can allow an integer type variable i to identify e.g. a 16-bit short with index i % 16 and bit 1 << i. This is a very standard technique.
On Jul 5, 10:15 am, Ashish Goel <[email protected]> wrote: > i fail to understand how can you give a pointer to a bit which is not > starting at the word boundary? > > Best Regards > Ashish Goel > "Think positive and find fuel in failure" > +919985813081 > +919966006652 > > > > On Mon, Jul 5, 2010 at 7:24 PM, Siddhi <[email protected]> wrote: > > i think 2 digit combination switch case can be kept: > > e.g : there can be value between 1 to F (considered smallest 4 bit > > sequence) > > now 2, 4, 6 can never be part of coninuous sequence.. > > switch(combo): > > > 1 followed by 8: valid > > 1 followed by 9: valid, > > 1 followed by 10: valid > > like that we make combinations of all 1 to f wid each other which are > > valid, else invalid: > > > like combo of 7 followed by F, 3 followed by F, 5 followed by F, 3 > > followed by 9 make sense > > So i think instead of scanning every bit, what can be done is take 8 > > bits (anding integer with 0x0f, 0xf0) > > if switch case gives valid combo as result, remember pointer to first > > 1's bit of left digit.. go to next, now if this and the right digit > > (og previous combo) combo makes sense, then go to next else break > > sequence start scanning from next remember the first pointer > > (overwrite the pointer stored previously, if lengths of 1's are > > greater).. > > like that we can get longest sequence. > > e.g, the sequence given by you is- > > 1111,0111,0011,1110,0000,10111 > > > Here at beginning we get F, we remember 1st bit , next we get 7 , > > invalid combo of F and 7 (smallest length till now 4, pointer 1st bit- > > remember) , > > next 7 and 3.. forget, next 3 followed by 14 .. valid combo.. length - > > > 5 > previously stored length.. overwrite length.. and remember > > beginning 1's position in 3.. > > like that continue.. > > > i think this (if implemented well) can give better result than > > scanning eaach bit.. > > > let me know ur view.. and correct me if m wrong > > > On Jul 5, 12:15 am, Gene <[email protected]> wrote: > > > On Jul 4, 6:31 am, jalaj jaiswal <[email protected]> wrote: > > > > > There is very long array of ints, and you are given pointer to base > > addr of > > > > this array.. each int is 16bit representation... you need to return the > > > > pointer to tht "bit" inside array where longest sequence of "1"s start > > > > for example. if your array has following in bit representation: > > > > 1111,0111,0011,1110,0000,10111 > > > > then your longest sequence has 5 ones but the longest number has only 4 > > > > ones.(so finding highest num wnt wrk) > > > > -- > > > > With Regards, > > > > Jalaj Jaiswal > > > > +919026283397 > > > > B.TECH IT > > > > IIIT ALLAHABAD > > > > You can just define a function that accesses the array by bit index > > > and then scan in a simple manner to find the longest stretch of 1's. > > > > I'll assume unsigned short is 16 bits. This code is not compiled or > > > tested. > > > > // Exact definition here depends on how you want to index bits. > > > // This is only one possibility. > > > int bitval(unsigned short *a, unsigned long i) > > > { > > > return (a[i / 16ul] >> (i % 16 ul)) & 1; > > > > } > > > > // Return index of start of longest span of 1's. > > > // The special value NULLBITINDEX is returned if a is all 0's. > > > > // Here's one possibility. Make this 64 bits if bit arrays can be very > > > large. > > > typedef unsigned long BITINDEX; > > > #define NULLBITINDEX (~0ul) > > > > BITINDEX longest1span(unsigned short *a, int size) > > > { > > > BITINDEX bitsize = size * 16, i, j; > > > // Location and length of longest span found so far. > > > BITINDEX r = NULLBITINDEX, len = 0; > > > > i = 0; > > > while (1) { > > > // Find start of a span of 1's. > > > while(1) { > > > if (i == bitsize) return r; > > > if (bitval(a, i) == 1) break; > > > i++; > > > } > > > // i now points to the start of a span of 1's. > > > // Get index of next 0 in j. > > > for (j = i + 1; j < bitsize; j++) { > > > if (bitval(a, j) == 0) break; > > > } > > > // [i..j-1] is a new span of 1's > > > // update longest span info > > > if (j - i > len) { > > > r = i; > > > len = j - i; > > > } > > > // set preconditions for new span search > > > i = j; > > > } > > > > } > > > -- > > You received this message because you are subscribed to the Google Groups > > "Algorithm Geeks" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]<algogeeks%2bunsubscr...@googlegroups > > .com> > > . > > For more options, visit this group at > >http://groups.google.com/group/algogeeks?hl=en. -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.
