0
0
DSA Typescriptprogramming~3 mins

Greedy vs DP How to Know Which to Apply in DSA Typescript - Why the Distinction Matters

Choose your learning style9 modes available
The Big Idea

Can you tell when a quick choice is enough or when you need to think deeper to get the best answer?

The Scenario

Imagine you have a big jar of coins and you want to give exact change using the fewest coins possible. You try picking the biggest coin first every time, but sometimes this doesn't work and you end up with more coins than needed.

The Problem

Picking coins greedily (always the biggest coin first) can be fast but sometimes leads to wrong answers. Trying every possible combination manually is slow and confusing. Without a clear method, you waste time and make mistakes.

The Solution

Greedy and Dynamic Programming (DP) are smart ways to solve such problems. Greedy works when local best choices lead to global best. DP tries all options but remembers results to avoid repeating work. Knowing when to use each saves time and gets correct answers.

Before vs After
Before
function getChange(coins: number[], amount: number): number {
  let count = 0;
  while (amount > 0) {
    let coin = coins.reduce((max, c) => c <= amount ? Math.max(max, c) : max, 0);
    if (coin === 0) return -1;
    amount -= coin;
    count++;
  }
  return count;
}
After
function getChangeDP(coins: number[], amount: number): number {
  const dp = Array(amount + 1).fill(Infinity);
  dp[0] = 0;
  for (let i = 1; i <= amount; i++) {
    for (const coin of coins) {
      if (coin <= i) dp[i] = Math.min(dp[i], dp[i - coin] + 1);
    }
  }
  return dp[amount] === Infinity ? -1 : dp[amount];
}
What It Enables

It enables you to solve complex optimization problems efficiently and correctly by choosing the right approach.

Real Life Example

Choosing the best route for delivery trucks: Greedy might pick the closest next stop, but DP considers all routes to find the shortest total path.

Key Takeaways

Greedy is fast but only works if local choices lead to global best.

Dynamic Programming tries all options but remembers results to avoid repeated work.

Knowing when to use each saves time and ensures correct solutions.