(4) What is the fastest way to count the total number of set bits in an array of a ten thousand 16 bit integers? - Quora



(4) What is the fastest way to count the total number of set bits in an array of a ten thousand 16 bit integers? - Quora

10,000 16-bit integers is a very small number of integers to process. You can just go through all of the numbers and add up each set bit.

count = 0
for (x in numbers)
  for (bit in 0 to 15)
    count += (x >> bits) & 1

If you had, say, 10 billion integers, you could do clever things like precomputing the # of set bits in ever possible 16-bit integer. That would mean 2^16 computations at the beginning, and then you would only have to add 10 billion numbers instead of 16 * 10 billion numbers. In this case, since you only have 10,000 numbers, that kind of optimization is pointless.

You can go halfway and precompute the number of bits in all 8-bit combinations, then add up 10,000 pairs of counts.

precomputed = int[256]
for (num in 0 to 255)
  precomputed[num] = the number of set bits in num
count = 0
for (x in numbers)
  count += precomputed[x & 0xFF] + precomputed[(x >> 8) & 0xFF]

But again, with 10,000 numbers, these kind of optimizations won't have any appreciable difference.

No matter what, your runtime will be O(n), but these kinds of optimizations will let you lower the constant term by a little bit.

Read full article from (4) What is the fastest way to count the total number of set bits in an array of a ten thousand 16 bit integers? - Quora


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts