What array are we talking about? If we were counting bits in a 16-bit unsigned integer, then several O (1) time algorithms were developed: see "Fast Counters" .
This is one of the algorithms presented here; the one they call Nifty Parallel Count:
#define MASK_01010101 (((unsigned int)(-1))/3) #define MASK_00110011 (((unsigned int)(-1))/5) #define MASK_00001111 (((unsigned int)(-1))/17) int bitcount (unsigned int n) { n = (n & MASK_01010101) + ((n >> 1) & MASK_01010101); n = (n & MASK_00110011) + ((n >> 2) & MASK_00110011); n = (n & MASK_00001111) + ((n >> 4) & MASK_00001111); return n % 255 ; }
Zeroone
source share