What does the Brian Kernighan algorithm count in a number?
It counts the number of set bits (1s) in the binary representation of the number.
Click to reveal answer
intermediate
How does the Brian Kernighan algorithm reduce the number of operations compared to checking each bit?
It repeatedly clears the rightmost set bit, reducing the number of iterations to the number of set bits instead of total bits.
Click to reveal answer
intermediate
Explain the operation 'n = n & (n - 1)' in the Brian Kernighan algorithm.
This operation clears the rightmost set bit of n by turning it to 0, effectively reducing the count of set bits by one.
Click to reveal answer
intermediate
What is the time complexity of the Brian Kernighan algorithm for counting set bits?
O(k), where k is the number of set bits in the number, making it efficient for sparse bit patterns.
Click to reveal answer
beginner
Write the basic C code snippet for counting set bits using Brian Kernighan's algorithm.
int countSetBits(int n) {
int count = 0;
while (n) {
n = n & (n - 1);
count++;
}
return count;
}
Click to reveal answer
What does the expression 'n & (n - 1)' do in Brian Kernighan's algorithm?
AClears the rightmost set bit of n
BSets the rightmost unset bit of n
CInverts all bits of n
DShifts n to the right by one bit
✗ Incorrect
The expression 'n & (n - 1)' clears the rightmost set bit in n, which is the key step in Brian Kernighan's algorithm.
What is the main advantage of Brian Kernighan's algorithm over checking each bit individually?
AIt counts unset bits instead of set bits
BIt uses less memory
CIt works only for positive numbers
DIt runs in time proportional to the number of set bits, not total bits
✗ Incorrect
Brian Kernighan's algorithm runs in O(k) time where k is the number of set bits, making it faster than checking all bits.
If a number has 5 set bits, how many times will the loop run in Brian Kernighan's algorithm?
ANumber of total bits in the number
B5
CDepends on the number's value
DAlways 1
✗ Incorrect
The loop runs exactly as many times as there are set bits, so 5 times for 5 set bits.
What initial value should the count variable have in the Brian Kernighan algorithm?
ANumber of bits in the integer
B1
C0
DUndefined
✗ Incorrect
Count starts at 0 and increments each time a set bit is cleared.
Which of these is a correct output of countSetBits(13) using Brian Kernighan's algorithm?
A3
B4
C2
D5
✗ Incorrect
13 in binary is 1101, which has 3 set bits.
Describe how Brian Kernighan's algorithm counts the set bits in an integer.
Think about how the number changes each loop iteration.
You got /4 concepts.
Explain why Brian Kernighan's algorithm is more efficient than checking each bit one by one.
Consider the number of loop iterations.
You got /4 concepts.
Practice
(1/5)
1. What does the Brian Kernighan algorithm do when counting set bits in a number?
easy
A. It repeatedly clears the least significant set bit until the number becomes zero.
B. It counts the total number of digits in the binary representation.
C. It shifts the number right and counts zeros.
D. It converts the number to decimal and counts digits.
Solution
Step 1: Understand the algorithm's main operation
The algorithm uses n = n & (n-1) to clear the least significant set bit in each iteration.
Step 2: Effect of clearing bits
Each operation reduces the number of set bits by one until the number becomes zero.
Final Answer:
It repeatedly clears the least significant set bit until the number becomes zero. -> Option A
Quick Check:
Clearing bits one by one = It repeatedly clears the least significant set bit until the number becomes zero. [OK]
Hint: Clear least set bit repeatedly to count set bits [OK]
Common Mistakes:
Counting zeros instead of ones
Shifting without clearing bits
Confusing decimal digits with bits
2. Which of the following is the correct syntax to clear the least significant set bit in C using Brian Kernighan's method?
easy
A. n = n & (n - 1);
B. n = n | (n - 1);
C. n = n & (n + 1);
D. n = n ^ (n - 1);
Solution
Step 1: Recall the bit clearing operation
The Brian Kernighan algorithm clears the least significant set bit by n = n & (n - 1).
Step 2: Verify other options
Options A, B, and D do not clear the least significant set bit correctly.
Final Answer:
n = n & (n - 1); -> Option A
Quick Check:
Use n & (n-1) to clear bits [OK]
Hint: Use n & (n-1) to clear least set bit [OK]
Common Mistakes:
Using +1 instead of -1
Using OR or XOR instead of AND
Confusing bitwise operators
3. What is the output of the following C code snippet?
unsigned int n = 13; // binary 1101
int count = 0;
while (n) {
n = n & (n - 1);
count++;
}
printf("%d", count);
medium
A. 5
B. 2
C. 4
D. 3
Solution
Step 1: Analyze initial value and binary form
13 in binary is 1101, which has three set bits (1s).
Step 2: Count iterations clearing bits
Each loop clears one set bit: 1101 -> 1100 -> 1000 -> 0000, so loop runs 3 times.
Final Answer:
3 -> Option D
Quick Check:
Number of set bits in 13 = 3 [OK]
Hint: Count set bits by clearing one bit per loop [OK]
Common Mistakes:
Counting total bits instead of set bits
Off-by-one in loop count
Misreading binary representation
4. Identify the error in this C code snippet that tries to count set bits using Brian Kernighan's algorithm:
int countSetBits(int n) {
int count = 0;
while (n != 0) {
n = n & (n + 1);
count++;
}
return count;
}
medium
A. Missing initialization of count variable.
B. Using n + 1 instead of n - 1 in bit clearing step.
C. Incorrect return type of the function.
D. Loop condition should be while (n > 0).
Solution
Step 1: Check the bit clearing operation
The code uses n = n & (n + 1), which does not clear the least significant set bit correctly.
Step 2: Correct operation for clearing bits
The correct operation is n = n & (n - 1) to clear the least significant set bit.
Final Answer:
Using n + 1 instead of n - 1 in bit clearing step. -> Option B
Quick Check:
Use n & (n-1) to clear bits, not n & (n+1) [OK]
Hint: Use n & (n-1) to clear bits, not n & (n+1) [OK]
Common Mistakes:
Using +1 instead of -1
Ignoring loop condition correctness
Forgetting to initialize count
5. Given an array of unsigned integers, which approach using Brian Kernighan's algorithm is most efficient to find the total count of set bits in all elements?
hard
A. Shift each number bit by bit and count set bits using bitwise AND with 1.
B. Convert each number to binary string and count '1's using string functions.
C. For each element, repeatedly clear least significant set bit and count until zero, then sum counts.
D. Use a lookup table for each byte and sum counts for all bytes in each number.
Solution
Step 1: Identify Brian Kernighan's approach
For each element, repeatedly clear least significant set bit and count until zero, then sum counts.: For each element, repeatedly clear the least significant set bit until zero and count (using n = n & (n-1)), then sum the counts across elements. This is the direct application of Brian Kernighan's algorithm.
Step 2: Why it is most efficient using Brian Kernighan
B (strings) is slow; C (shifts) is O(word size) always; D (lookup) is fast but a separate method, not Brian Kernighan's. Brian Kernighan excels for sparse bits (O(set bits) time).
Final Answer:
For each element, repeatedly clear least significant set bit and count until zero, then sum counts. -> Option C
Quick Check:
Brian Kernighan on array: apply n & (n-1) loop per element [OK]
Hint: Brian Kernighan per element: clear LSB until zero, sum counts [OK]
Common Mistakes:
Using string conversion which is slow
Bit shifting each bit without optimization
Confusing lookup table with Brian Kernighan method
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.