Backtracking tries all possible options step-by-step and goes back (undoes) when a choice leads to a dead end, ensuring all solutions are explored.
Click to reveal answer
beginner
Why can't greedy algorithms solve all problems?
Greedy algorithms make the best local choice at each step but may miss the best overall solution because they don't reconsider previous choices.
Click to reveal answer
intermediate
Give an example problem where greedy fails but backtracking works.
The "Subset Sum" problem: greedy might pick large numbers first and miss a valid subset, but backtracking tries all combinations to find the correct subset.
Click to reveal answer
intermediate
What does 'pruning' mean in backtracking?
Pruning means stopping early in a search path when we know it can't lead to a valid solution, saving time by not exploring useless options.
Click to reveal answer
beginner
How does backtracking ensure all solutions are found?
By exploring every possible choice and undoing steps when needed, backtracking systematically checks all options without missing any.
Click to reveal answer
Which approach tries all possible options and backtracks on dead ends?
ADivide and Conquer
BBacktracking
CGreedy
DDynamic Programming
✗ Incorrect
Backtracking explores all options and undoes choices when they don't lead to a solution.
Why might a greedy algorithm fail to find the best solution?
AIt only makes local best choices without reconsidering
BIt tries all options
CIt uses recursion
DIt prunes search paths
✗ Incorrect
Greedy algorithms pick the best immediate choice but may miss better overall solutions.
Which problem is a classic example where greedy fails but backtracking works?
ASubset Sum
BSorting numbers
CFinding maximum
DBinary Search
✗ Incorrect
Subset Sum requires checking combinations; greedy can miss valid subsets.
What is pruning in backtracking?
ASorting the input
BAdding more options
CChoosing the best local option
DStopping early when no solution is possible
✗ Incorrect
Pruning cuts off search paths that cannot lead to a solution.
Backtracking is best described as:
AA greedy method
BA divide and conquer method
CA trial and error method with undo
DA sorting algorithm
✗ Incorrect
Backtracking tries options and undoes them if they fail.
Explain why greedy algorithms cannot solve all problems and how backtracking helps in those cases.
Think about local vs global decisions and exploring all possibilities.
You got /5 concepts.
Describe the role of pruning in backtracking and why it is important.
Consider how to avoid wasting time on impossible solutions.
You got /4 concepts.
Practice
(1/5)
1. Why is backtracking preferred over greedy algorithms in problems like the N-Queens puzzle?
easy
A. Because greedy algorithms never use recursion
B. Because greedy algorithms always find the optimal solution quickly
C. Because backtracking uses less memory than greedy algorithms
D. Because backtracking explores all possible solutions and can backtrack on wrong choices
Solution
Step 1: Understand the problem nature
The N-Queens puzzle requires placing queens so none attack each other, needing exploration of many possibilities.
Step 2: Compare backtracking and greedy approaches
Backtracking tries all options and undoes wrong choices, while greedy picks locally best choices that may fail globally.
Final Answer:
Because backtracking explores all possible solutions and can backtrack on wrong choices -> Option D
Quick Check:
Backtracking explores all options = A [OK]
Hint: Backtracking tries all paths; greedy picks only best immediate choice [OK]
Common Mistakes:
Thinking greedy always finds the best solution
Confusing backtracking with dynamic programming
Assuming backtracking uses less memory
2. Which of the following is the correct syntax to start a backtracking function in Python?
easy
A. def backtrack(path, options):
B. function backtrack(path, options) {
C. backtrack(path, options) => {
D. def backtrack[]:
Solution
Step 1: Identify Python function syntax
Python functions start with 'def', followed by name and parameters in parentheses, ending with a colon.
Step 2: Check each option
def backtrack[]: uses invalid square brackets instead of parentheses; function backtrack(path, options) { and backtrack(path, options) => { are JavaScript syntax; def backtrack(path, options): is the correct Python syntax.
Final Answer:
def backtrack(path, options): -> Option A
Quick Check:
Python function syntax = D [OK]
Hint: Python functions start with 'def' and end with ':' [OK]
Common Mistakes:
Using JavaScript or other language syntax
Missing colon at function end
Using square brackets instead of parentheses
3. What will be the output of the following Python code snippet?
def backtrack(nums, path):
if not nums:
print(path)
return
for i in range(len(nums)):
backtrack(nums[:i] + nums[i+1:], path + [nums[i]])
backtrack([1, 2], [])
medium
A. [2, 1]
B. [1, 2]
C. [1, 2]\n[2, 1]
D. []
Solution
Step 1: Understand the backtracking function
The function generates all permutations of the list by choosing each element and recursing on the rest.
Step 2: Trace the calls for input [1, 2]
First call picks 1, then 2 left, prints [1, 2]. Second call picks 2, then 1 left, prints [2, 1].
Final Answer:
[1, 2]
[2, 1] -> Option C
Quick Check:
Permutations of [1, 2] = [1, 2] and [2, 1] [OK]
Hint: Backtracking here prints all permutations of the list [OK]
Common Mistakes:
Thinking it prints only one permutation
Confusing slicing syntax
Missing that print happens when nums is empty
4. Find the error in this backtracking code for subset generation:
def subsets(nums, path=[]):
print(path)
for i in range(len(nums)):
subsets(nums[i+1:], path.append(nums[i]))
subsets([1, 2])
medium
A. Using mutable default argument for path causes unexpected behavior
B. Missing return statement in function
C. Incorrect slicing of nums in recursive call
D. Using print inside recursion is invalid
Solution
Step 1: Identify mutable default argument issue
Using path=[] as default causes the same list to be shared across calls, leading to wrong subsets.
Step 2: Check recursive call usage
path.append(nums[i]) modifies path in place and returns None, so recursive call gets None instead of list.
Final Answer:
Using mutable default argument for path causes unexpected behavior -> Option A
Quick Check:
Mutable default args cause bugs = A [OK]
Hint: Avoid mutable defaults like lists in function parameters [OK]
Common Mistakes:
Ignoring mutable default argument problem
Thinking print inside recursion is wrong
Assuming missing return causes error here
5. Which problem below cannot be solved correctly by a greedy algorithm but requires backtracking to find all solutions?
A) Finding minimum number of coins for change when coin denominations are unlimited and standard B) Finding all subsets of a set C) Finding shortest path in a weighted graph with non-negative edges D) Sorting an array in ascending order
hard
A. Finding minimum number of coins for change when coin denominations are unlimited and standard
B. Finding all subsets of a set
C. Finding shortest path in a weighted graph with non-negative edges
D. Sorting an array in ascending order
Solution
Step 1: Analyze each problem type
A) Greedy works for standard coin change; C) Dijkstra's algorithm is greedy and works; D) Sorting uses greedy-like comparisons.
Step 2: Identify problem needing backtracking
Finding all subsets requires exploring all combinations, which greedy cannot do; backtracking is needed.
Final Answer:
Finding all subsets of a set -> Option B
Quick Check:
All subsets need backtracking = B [OK]
Hint: All subsets require exploring all options, not greedy choice [OK]
Common Mistakes:
Thinking greedy can find all subsets
Confusing shortest path with subset generation
Assuming sorting needs backtracking
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.