📖 Scenario: Imagine you have a small collection of fruits and you want to see all possible groups you can make from them. This is like choosing different combinations of fruits to pack in a basket.
🎯 Goal: You will write a program that takes a list of fruits and generates all possible subsets (groups) of these fruits using a bitmask technique.
📋 What You'll Learn
Create a list called fruits with the exact values: 'apple', 'banana', 'cherry'
Create a variable called n that stores the length of the fruits list
Use a for loop with variable bitmask to go from 0 to 2**n - 1
Inside the loop, create a list called subset that holds fruits selected by the current bitmask
Print each subset on a new line
💡 Why This Matters
🌍 Real World
Generating subsets is useful in situations like choosing different combinations of items, planning menus, or exploring options in decision making.
💼 Career
Understanding subsets and bitmasking helps in coding interviews, optimization problems, and tasks involving combinations in software development.
Progress0 / 4 steps
1
Create the list of fruits
Create a list called fruits with these exact values: 'apple', 'banana', 'cherry'
DSA Python
Hint
Use square brackets [] to create a list and separate items with commas.
2
Calculate the number of fruits
Create a variable called n that stores the length of the fruits list using the len() function
DSA Python
Hint
Use len(fruits) to get the number of items in the list.
3
Generate subsets using bitmask
Use a for loop with variable bitmask to go from 0 to 2**n - 1. Inside the loop, create a list called subset that holds fruits where the bit at position i in bitmask is set. Use another for loop with variable i from 0 to n-1 to check each bit.
DSA Python
Hint
Use bitmask & (1 << i) to check if the ith bit is set in bitmask.
4
Print each subset
Add a print(subset) statement inside the for bitmask loop to display each subset on a new line
DSA Python
Hint
Use print(subset) to show each group of fruits.
Practice
(1/5)
1. What does the bitmask technique help to generate when applied to a set of elements?
easy
A. Only subsets with odd number of elements
B. Only the largest subset of the set
C. Only subsets with even number of elements
D. All possible subsets of the set
Solution
Step 1: Understand bitmask representation
Each bit in a bitmask represents whether an element is included (1) or excluded (0) in a subset.
Step 2: Generate subsets using bitmask
By iterating from 0 to 2^n - 1 (where n is number of elements), all combinations of included/excluded elements are covered, producing all subsets.
Final Answer:
All possible subsets of the set -> Option D
Quick Check:
Bitmask = subsets generator [OK]
Hint: Bitmask bits map directly to subset inclusion [OK]
Common Mistakes:
Thinking bitmask generates only large subsets
Confusing bitmask with sorting or filtering
Assuming bitmask generates only even or odd subsets
2. Which of the following is the correct Python syntax to iterate over all bitmasks for a set of size n?
easy
A. for mask in range(1 << n):
B. for mask in range(n << 1):
C. for mask in range(2 * n):
D. for mask in range(n ** 2):
Solution
Step 1: Understand bit shift for 2^n
Using 1 << n shifts 1 left by n bits, which equals 2 to the power n.
Step 2: Use range to cover all bitmasks
Iterating from 0 to 1 << n - 1 covers all subsets represented by bitmasks.
Final Answer:
for mask in range(1 << n): -> Option A
Quick Check:
1 << n = 2^n range [OK]
Hint: Use 1 << n for 2^n subsets [OK]
Common Mistakes:
Using multiplication instead of bit shift
Using n squared or doubled incorrectly
Confusing range limits
3. What is the output of the following code?
arr = ["a", "b"]
subsets = []
for mask in range(1 << len(arr)):
subset = []
for i in range(len(arr)):
if mask & (1 << i):
subset.append(arr[i])
subsets.append(subset)
print(subsets)
medium
A. [['a', 'b'], ['a'], ['b'], []]
B. [[], ['a'], ['b'], ['a', 'b']]
C. [[], ['b'], ['a'], ['b', 'a']]
D. [['a'], ['b'], ['a', 'b'], []]
Solution
Step 1: Understand bitmask iteration
For arr of length 2, masks go from 0 to 3 (00, 01, 10, 11 in binary).
Step 2: Map bits to elements
Mask 0 (00) -> no elements -> []
Mask 1 (01) -> include arr[0] -> ['a']
Mask 2 (10) -> include arr[1] -> ['b']
Mask 3 (11) -> include arr[0], arr[1] -> ['a', 'b']
Final Answer:
[[], ['a'], ['b'], ['a', 'b']] -> Option B
Quick Check:
Bitmask subsets match output [OK]
Hint: Trace bitmask bits to elements included [OK]
Common Mistakes:
Mixing order of subsets
Appending elements incorrectly
Confusing bit positions
4. Identify the error in the following code snippet for generating subsets using bitmask:
arr = [1, 2, 3]
subsets = []
for mask in range(1 << len(arr)):
subset = []
for i in range(len(arr)):
if mask & i:
subset.append(arr[i])
subsets.append(subset)
print(subsets)
medium
A. The subset list should be initialized outside the loop
B. The range should be 'range(len(arr))' instead of 'range(1 << len(arr))'
C. The condition should be 'mask & (1 << i)' instead of 'mask & i'
D. The print statement should be inside the inner loop
Solution
Step 1: Analyze bitmask condition
The condition 'mask & i' incorrectly checks bits; it should check if the i-th bit is set using 'mask & (1 << i)'.
Step 2: Correct bit checking
Using 'mask & (1 << i)' correctly tests if the bit at position i is 1, indicating inclusion of arr[i].
Final Answer:
The condition should be 'mask & (1 << i)' instead of 'mask & i' -> Option C
Quick Check:
Bit check needs shift [OK]
Hint: Use bit shift to check bits, not index alone [OK]
5. Given a list arr = [1, 2, 2], what is the output of the following code that generates subsets using bitmask?
arr = [1, 2, 2]
subsets = []
for mask in range(1 << len(arr)):
subset = []
for i in range(len(arr)):
if mask & (1 << i):
subset.append(arr[i])
subsets.append(subset)
print(subsets)