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 choice at each step without looking ahead, which can miss the best overall solution if future steps depend on earlier 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
How does backtracking handle constraints in problems?
Backtracking checks constraints at each step and stops exploring a path as soon as it violates any constraint, saving time by pruning wrong paths early.
Click to reveal answer
intermediate
What is a key difference between backtracking and brute force?
Backtracking is smarter than brute force because it stops exploring paths that can't lead to a solution, while brute force tries all possibilities blindly.
Click to reveal answer
Which approach tries all possible solutions but stops early when constraints fail?
ABacktracking
BGreedy
CDivide and Conquer
DDynamic Programming
✗ Incorrect
Backtracking explores all options but prunes paths that break constraints early.
Why might a greedy algorithm fail to find the best solution?
AIt looks ahead too much
BIt tries all possibilities
CIt only makes local best choices without considering future steps
DIt uses recursion
✗ 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 succeeds?
ASorting numbers
BSubset Sum
CFinding maximum
DBinary Search
✗ Incorrect
Subset Sum requires checking combinations, which greedy can't handle well.
What does backtracking do when it finds a path that violates constraints?
AStops exploring that path and goes back
BSwitches to greedy
CRestarts the whole process
DContinues exploring
✗ Incorrect
Backtracking abandons paths that break rules to save time.
Which method is more efficient than brute force by pruning invalid paths?
ABrute Force
BGreedy
CLinear Search
DBacktracking
✗ Incorrect
Backtracking avoids unnecessary work by stopping early on bad paths.
Explain why greedy algorithms cannot solve all problems and how backtracking helps in such cases.
Think about how decisions affect future steps.
You got /4 concepts.
Describe how backtracking explores solutions and handles constraints differently from brute force.
Focus on pruning and efficiency.
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 backtracking explores all possible solutions and can undo choices, while greedy makes irreversible decisions.
B. Because greedy algorithms always find the optimal solution faster than backtracking.
C. Because backtracking uses less memory than greedy algorithms.
D. Because greedy algorithms are only used for sorting problems.
Solution
Step 1: Understand backtracking's approach
Backtracking tries all possible options and can go back to previous steps to try different paths.
Step 2: Compare with greedy algorithm
Greedy makes the best immediate choice without reconsidering, which can miss the correct solution in complex problems.
Final Answer:
Because backtracking explores all possible solutions and can undo choices, while greedy makes irreversible decisions. -> Option A
Quick Check:
Backtracking = explores all + undo [OK]
Hint: Backtracking tries all paths; greedy picks immediate best [OK]
Common Mistakes:
Thinking greedy always finds the best solution
Confusing memory usage between backtracking and greedy
Assuming greedy can undo choices
2. Which of the following is the correct syntax to start a backtracking function in JavaScript?
easy
A. function backtrack = (path, options) => { /* code */ }
B. function backtrack(path, options) { /* code */ }
C. backtrack function(path, options) { /* code */ }
D. function backtrack[path, options] { /* code */ }
Solution
Step 1: Recall JavaScript function declaration syntax
Functions are declared using the keyword 'function' followed by the name and parentheses with parameters.
function backtrack(path, options) { /* code */ } -> Option B
Quick Check:
Standard function declaration = function backtrack(path, options) { /* code */ } [OK]
Hint: Use 'function name(params) { }' for normal functions [OK]
Common Mistakes:
Using '=' with function keyword incorrectly
Mixing function declaration and expression syntax
Using brackets [] instead of parentheses ()
3. What will be the output of the following code snippet?
function backtrack(nums, path, res) {
if (path.length === nums.length) {
res.push([...path]);
return;
}
for (let i = 0; i < nums.length; i++) {
if (path.includes(nums[i])) continue;
path.push(nums[i]);
backtrack(nums, path, res);
path.pop();
}
}
const result = [];
backtrack([1, 2], [], result);
console.log(result);
medium
A. [[1, 2]]
B. [[2, 1]]
C. [[1, 2], [2, 1]]
D. [[1], [2]]
Solution
Step 1: Understand the backtracking logic
The function generates all permutations of the array [1, 2] by adding elements not already in the path.
Step 2: Trace the recursive calls
First path: [1, 2], second path: [2, 1]. Both are added to result.
Final Answer:
[[1, 2], [2, 1]] -> Option C
Quick Check:
Permutations of [1,2] = [[1,2],[2,1]] [OK]
Hint: Backtracking with includes avoids duplicates, generates permutations [OK]
Common Mistakes:
Forgetting to pop after recursion
Not checking if element is already in path
Expecting only one permutation
4. Identify the bug in this backtracking code for generating subsets:
function subsets(nums) {
const res = [];
function backtrack(start, path) {
res.push(path);
for (let i = start; i < nums.length; i++) {
path.push(nums[i]);
backtrack(i + 1, path);
path.pop();
}
}
backtrack(0, []);
return res;
}
medium
A. The function should return inside the loop.
B. The loop should start from 0 instead of start.
C. The pop() is missing after recursive call.
D. The code pushes the same path array reference, causing all results to be identical.
Solution
Step 1: Analyze how path is added to results
The code pushes 'path' directly, which is a reference to the same array that changes over time.
Step 2: Understand consequences
All entries in res will point to the same array, resulting in identical subsets at the end.
Final Answer:
The code pushes the same path array reference, causing all results to be identical. -> Option D
Quick Check:
Push copy of path, not reference [OK]
Hint: Push a copy of path (e.g., [...path]) to avoid reference bugs [OK]
Common Mistakes:
Pushing path without copying
Incorrect loop start index
Missing pop after recursion
5. Given the problem of selecting a subset of items with weights and values to maximize value without exceeding weight limit, why can't a greedy algorithm always solve it correctly, and how does backtracking help?
Choose the best explanation.
hard
A. Greedy picks items with highest value first, which may exceed weight; backtracking tries all combinations to find the best fit.
B. Greedy always finds the best solution by sorting items by weight; backtracking is slower and unnecessary.
C. Greedy picks items randomly; backtracking sorts items before selection.
D. Greedy and backtracking both always find the same solution for this problem.
Solution
Step 1: Understand greedy approach limitations
Greedy selects items based on immediate criteria (like highest value), which can lead to overweight or suboptimal total value.
Step 2: Understand backtracking advantage
Backtracking explores all subsets, checking weight limits and total values, ensuring the optimal subset is found.
Final Answer:
Greedy picks items with highest value first, which may exceed weight; backtracking tries all combinations to find the best fit. -> Option A
Quick Check:
Greedy = local best, Backtracking = global best [OK]
Hint: Greedy fails on constraints; backtracking tries all combos [OK]
Common Mistakes:
Assuming greedy always works for knapsack
Thinking backtracking is always slower without benefit
Confusing sorting criteria in greedy
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.