What is the main idea behind the greedy algorithm approach?
Greedy algorithms build a solution step-by-step, always choosing the option that looks best at the moment, hoping this leads to the best overall solution.
Click to reveal answer
intermediate
Why does a greedy algorithm work correctly for some problems?
It works when the problem has the 'greedy choice property' and 'optimal substructure', meaning local best choices lead to a global best solution.
Click to reveal answer
intermediate
What is the 'greedy choice property'?
It means you can make a choice that looks best now without worrying about future choices, and this choice is part of an optimal solution.
Click to reveal answer
intermediate
Give an example of a problem where greedy algorithms fail to find the optimal solution.
The coin change problem with arbitrary coin denominations can fail with greedy algorithms because choosing the largest coin first may not lead to the fewest coins overall.
Click to reveal answer
intermediate
What is 'optimal substructure' in the context of greedy algorithms?
It means the optimal solution to the problem contains optimal solutions to its smaller subproblems.
Click to reveal answer
Which property must a problem have for a greedy algorithm to guarantee an optimal solution?
ABrute force
BDivide and conquer
CGreedy choice property
DBacktracking
✗ Incorrect
The greedy choice property ensures that making the best local choice leads to a global optimum.
When does a greedy algorithm typically fail?
AWhen the problem lacks optimal substructure
BWhen the problem has a greedy choice property
CWhen the problem is linear
DWhen the problem is sorted
✗ Incorrect
Without optimal substructure, local optimal choices may not lead to a global optimum.
Which of these problems is a classic example where greedy algorithms work well?
ATraveling salesman problem
BActivity selection problem
CKnapsack problem (0/1)
DCoin change with arbitrary coins
✗ Incorrect
Activity selection problem has greedy choice property and optimal substructure, so greedy works.
What does 'optimal substructure' mean?
AProblem can be solved by brute force
BSolution is always unique
CProblem has no subproblems
DOptimal solution contains optimal solutions to subproblems
✗ Incorrect
Optimal substructure means the best solution includes best solutions to smaller parts.
Why might greedy fail in the coin change problem with coins {1, 3, 4} to make 6?
AGreedy picks 4 then 1+1, total 3 coins, but optimal is 3+3, total 2 coins
BGreedy always works for coin change
CGreedy picks 1+1+1+1+1+1, total 6 coins
DGreedy picks 3+4, which is 7 coins
✗ Incorrect
Greedy picks largest coin first (4), then two 1s, total 3 coins; optimal is two 3s, total 2 coins.
Explain in your own words why greedy algorithms work for some problems but fail for others.
Think about when choosing the best option now leads to the best overall solution.
You got /4 concepts.
Describe the difference between greedy algorithms and dynamic programming in terms of problem properties.
Consider how each method builds solutions and handles subproblems.
You got /4 concepts.
Practice
(1/5)
1. What is the main reason a greedy algorithm works correctly for some problems?
easy
A. Because it makes the best choice at each step hoping for a global optimum
B. Because it tries all possible solutions and picks the best one
C. Because it uses recursion to explore all paths
D. Because it sorts the input data before processing
Solution
Step 1: Understand greedy choice property
A greedy algorithm picks the best option available at each step without reconsidering previous choices.
Step 2: Connect greedy choice to global optimum
This local best choice leads to a global optimum only if the problem has the greedy choice property and optimal substructure.
Final Answer:
Because it makes the best choice at each step hoping for a global optimum -> Option A
Quick Check:
Greedy = local best choice [OK]
Hint: Greedy picks best now, not all possibilities [OK]
Common Mistakes:
Thinking greedy tries all solutions
Confusing greedy with backtracking
Assuming sorting alone makes greedy work
2. Which of the following is the correct syntax to select the next item in a greedy algorithm loop in C++?
easy
A. for (auto item : items) { choose item; }
B. for (int i = 0 i < n; i++) { choose item[i]; }
C. while (i <= n) { choose item[i]; i++; }
D. do { choose item[i]; i--; } while (i > 0);
Solution
Step 1: Identify correct C++ loop syntax for iteration
The range-based for loop for (auto item : items) is modern and correct for iterating over a container.
Step 2: Check other options for correctness
for (int i = 0 i < n; i++) { choose item[i]; } is missing semicolons and proper syntax. while (i <= n) { choose item[i]; i++; } uses while but lacks initialization shown. do { choose item[i]; i--; } while (i > 0); decrements i incorrectly.
Final Answer:
for (auto item : items) { choose item; } -> Option A
Quick Check:
Range-based for loop is correct syntax [OK]
Hint: Use range-based for loops for clean iteration [OK]
Common Mistakes:
Missing semicolons in for loop
Using wrong loop conditions
Decrementing index when should increment
3. Consider the following C++ code snippet for selecting intervals greedily by earliest finish time:
struct Interval {
int start, end;
};
bool compare(Interval a, Interval b) {
return a.end < b.end;
}
int main() {
std::vector<Interval> intervals = {{1,4}, {3,5}, {0,6}, {5,7}, {8,9}};
std::sort(intervals.begin(), intervals.end(), compare);
int count = 0, last_end = -1;
for (auto interval : intervals) {
if (interval.start >= last_end) {
count++;
last_end = interval.end;
}
}
std::cout << count << std::endl;
return 0;
}
What is the output of this program?
medium
A. 5
B. 4
C. 3
D. 2
Solution
Step 1: Sort intervals by end time
Sorted intervals by end: {1,4}, {3,5}, {0,6}, {5,7}, {8,9}
Hint: Sort by finish time, pick non-overlapping intervals [OK]
Common Mistakes:
Counting overlapping intervals
Not sorting intervals correctly
Updating last_end incorrectly
4. The following code attempts to solve the coin change problem using a greedy approach:
int coins[] = {25, 10, 5, 1};
int amount = 30;
int count = 0;
for (int i = 0; i < 4; i++) {
while (amount >= coins[i]) {
amount -= coins[i];
count++;
}
}
std::cout << count << std::endl;
What is the main issue with this greedy approach?
medium
A. It always gives the minimum number of coins
B. It may fail for some coin sets where greedy is not optimal
C. It causes a syntax error due to missing semicolons
D. It runs infinitely because amount never decreases
Solution
Step 1: Understand greedy coin change approach
The code picks largest coin repeatedly until amount is reduced to zero.
Step 2: Identify greedy failure cases
Greedy works for US coins but fails for some coin sets where smaller coins combined give fewer coins than greedy picks.
Final Answer:
It may fail for some coin sets where greedy is not optimal -> Option B
Quick Check:
Greedy coin change can fail [OK]
Hint: Greedy coin change fails on non-canonical coin sets [OK]
Common Mistakes:
Assuming greedy always gives minimum coins
Confusing syntax errors with logic errors
Ignoring infinite loop possibility
5. You want to select activities to attend from a list with start and end times. The greedy algorithm picks the earliest finishing activity first. However, if activities have the same end time, it picks the one with the earliest start time. Why might this tie-break rule cause the greedy algorithm to fail in some cases?
hard
A. Because tie-break rules do not affect greedy correctness
B. Because earliest start time always leads to the best solution
C. Because sorting by end time is not needed in greedy algorithms
D. Because picking earliest start time among ties may block more future activities
Solution
Step 1: Understand tie-breaking in activity selection
Greedy sorts by earliest finish time. Ties in end time use earliest start as tie-breaker.
Step 2: Analyze effect on greedy selection
Picking the earliest start time among tied end times may block more future activities, reducing the total number of activities selected.
Step 3: Confirm impact on optimality
This tie-break rule can cause the greedy algorithm to fail to find the maximum set of non-overlapping activities.
Final Answer:
Because picking earliest start time among ties may block more future activities -> Option D
Quick Check:
Tie-break can affect future selections [OK]
Hint: Tie-breaks can affect greedy correctness when ends tie [OK]
Common Mistakes:
Thinking tie-breaks do not affect optimality
Assuming all tie-breaks are harmless
Ignoring impact of start times on future choices
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.