Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Count Set Bits Brian Kernighan Algorithm in DSA Python - Execution Trace

Choose your learning style10 modes available
Concept Flow - Count Set Bits Brian Kernighan Algorithm
Start with number n
↓
Check if n != 0?
No→Stop
Yes↓
Remove rightmost set bit: n = n & (n-1)
↓
Increment count
↓
Repeat check
The algorithm repeatedly removes the rightmost 1-bit from the number and counts how many times this happens until the number becomes zero.
Execution Sample
DSA Python
def count_set_bits(n):
    count = 0
    while n != 0:
        n = n & (n - 1)
        count += 1
    return count
Counts how many 1-bits are in the binary form of n by removing the rightmost set bit each loop.
Execution Table
StepOperationn (binary)n (decimal)CountVisual State
1Start11011301101 (13)
2Remove rightmost set bit: n = n & (n-1)11001211100 (12)
3Remove rightmost set bit: n = n & (n-1)1000821000 (8)
4Remove rightmost set bit: n = n & (n-1)0000030000 (0)
5Check n != 0000003Stop: n is zero
💡 n becomes 0 at step 4, loop ends
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
n (decimal)1312800
n (binary)11011100100000000000
count01233
Key Moments - 3 Insights
Why does the algorithm use n = n & (n-1) to remove the rightmost set bit?
Because n & (n-1) clears the lowest set bit in n, reducing the number of 1s by one each time, as shown in execution_table steps 2 to 4.
Why does the loop stop when n becomes zero?
When n is zero, there are no set bits left to count, so the condition n != 0 fails and the loop ends, as seen in execution_table step 5.
What happens if the input number is zero at the start?
The loop never runs because n != 0 is false initially, so count remains zero, meaning zero set bits.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of count after step 3?
A1
B3
C2
D0
💡 Hint
Check the 'count' column in execution_table row for step 3.
At which step does n become zero, causing the loop to stop?
AStep 2
BStep 4
CStep 3
DStep 5
💡 Hint
Look at the 'n (decimal)' column and find when it reaches 0.
If the input n was 8 (1000 in binary), how many times would the loop run?
A1
B2
C3
D4
💡 Hint
Count the number of set bits in 1000 binary; relate to count increments in variable_tracker.
Concept Snapshot
Count Set Bits using Brian Kernighan's Algorithm:
- Initialize count = 0
- While n != 0:
  - n = n & (n-1) removes rightmost set bit
  - Increment count
- Return count
Efficiently counts 1-bits by clearing them one by one.
Full Transcript
This visualization shows how Brian Kernighan's algorithm counts set bits in a number. Starting with n, it repeatedly removes the rightmost 1-bit by computing n = n & (n-1). Each removal increments the count. The process repeats until n becomes zero, meaning no set bits remain. The execution table traces each step with binary and decimal values of n and the count. Key moments clarify why the bit removal works and when the loop stops. The quiz tests understanding of count values and loop termination. This method is efficient because it only loops as many times as there are set bits.

Practice

(1/5)
1. What does the Brian Kernighan algorithm do when counting set bits in a number?
easy
A. It shifts the number to the right until it becomes zero without counting bits.
B. It counts the total number of digits in the number.
C. It converts the number to a string and counts the characters.
D. It repeatedly clears the least significant set bit until the number becomes zero.

Solution

  1. Step 1: Understand the algorithm's main operation

    The Brian Kernighan algorithm clears the least significant set bit in each iteration by doing n = n & (n-1).
  2. Step 2: Effect of clearing bits

    Each clearing reduces the number of set bits by one until the number becomes zero, counting how many bits were set.
  3. Final Answer:

    It repeatedly clears the least significant set bit until the number becomes zero. -> Option D
  4. Quick Check:

    Clearing bits counts set bits [OK]
Hint: Clear rightmost set bit repeatedly to count bits [OK]
Common Mistakes:
  • Thinking it counts all digits, not just set bits
  • Confusing bit shifting with bit clearing
  • Counting characters in string form of number
2. Which of the following is the correct syntax to clear the least significant set bit in Python 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

  1. Step 1: Identify the bit clearing operation

    The correct operation to clear the least significant set bit is n = n & (n - 1).
  2. Step 2: Understand why other options are incorrect

    Using OR, XOR, or addition does not clear the least significant set bit correctly.
  3. Final Answer:

    n = n & (n - 1) -> Option A
  4. Quick Check:

    Bit clear uses AND with n-1 [OK]
Hint: Use AND with n minus one to clear bits [OK]
Common Mistakes:
  • Using OR instead of AND
  • Using XOR which toggles bits
  • Adding numbers instead of bitwise operations
3. What is the output of the following Python code using Brian Kernighan's algorithm?
def count_set_bits(n):
    count = 0
    while n:
        n = n & (n - 1)
        count += 1
    return count

print(count_set_bits(13))
medium
A. 3
B. 5
C. 4
D. 2

Solution

  1. Step 1: Convert 13 to binary

    13 in binary is 1101, which has three set bits (1s).
  2. Step 2: Count set bits using the algorithm

    Each iteration clears one set bit: 1101 -> 1100 -> 1000 -> 0000, total 3 times.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    Binary 1101 has 3 set bits [OK]
Hint: Count 1s in binary of number [OK]
Common Mistakes:
  • Counting total bits instead of set bits
  • Miscounting binary digits
  • Confusing decimal with binary
4. Find the error in the following code that tries to count set bits using Brian Kernighan's algorithm:
def count_set_bits(n):
    count = 0
    while n > 0:
        n = n & (n + 1)
        count += 1
    return count

print(count_set_bits(7))
medium
A. Loop condition should be n != 0
B. Missing initialization of count variable
C. Using n & (n + 1) instead of n & (n - 1)
D. Using addition instead of bitwise AND

Solution

  1. Step 1: Identify the bit clearing operation

    The code uses n & (n + 1), which does not clear the least significant set bit correctly.
  2. Step 2: Correct operation for clearing bits

    The correct operation is n = n & (n - 1) to clear the rightmost set bit.
  3. Final Answer:

    Using n & (n + 1) instead of n & (n - 1) -> Option C
  4. Quick Check:

    Use n & (n - 1) to clear bits [OK]
Hint: Use n & (n - 1), not n & (n + 1) [OK]
Common Mistakes:
  • Using n & (n + 1) which is incorrect
  • Confusing loop condition syntax
  • Forgetting to initialize count
5. Given a list of integers, which code snippet correctly uses Brian Kernighan's algorithm to return a list of counts of set bits for each number?
nums = [3, 5, 7]

A) def count_bits_list(nums):
       return [bin(n).count('1') for n in nums]

B) def count_bits_list(nums):
       def count_set_bits(n):
           count = 0
           while n:
               n = n & (n - 1)
               count += 1
           return count
       return [count_set_bits(n) for n in nums]

C) def count_bits_list(nums):
       return [sum(int(d) for d in str(n)) for n in nums]

D) def count_bits_list(nums):
       return [len(str(n)) for n in nums]
hard
A. Option A uses built-in count of '1's in binary string.
B. Option B uses Brian Kernighan's algorithm correctly.
C. Option C sums digits of decimal string, not bits.
D. Option D counts decimal digits, not bits.

Solution

  1. Step 1: Analyze the code snippets

    The first snippet uses Python's bin(n).count('1'), which counts set bits but not Brian Kernighan's algorithm. The second snippet implements the algorithm correctly using a while loop that clears the least significant set bit with n = n & (n - 1). The third sums the decimal digits, which is incorrect for bits. The fourth counts the length of the decimal string, also incorrect.
  2. Step 2: Confirm correct implementation

    The second snippet defines count_set_bits using n = n & (n - 1) in a loop and applies it to each number via list comprehension, which is the proper use of Brian Kernighan's algorithm.
  3. Final Answer:

    Option B uses Brian Kernighan's algorithm correctly. -> Option B
  4. Quick Check:

    Correctly uses n & (n-1) loop [OK]
Hint: Use n & (n - 1) loop inside list comprehension [OK]
Common Mistakes:
  • Using string digit sums instead of bits
  • Counting decimal digits instead of set bits
  • Confusing built-in binary count with algorithm
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard