TechLead
Avanzado
25 min
Guía completa

Algoritmos voraces

Enfoque voraz, problemas de optimización y cuándo usarlo

Algoritmos voraces

Los algoritmos voraces toman decisiones localmente óptimas esperando un óptimo global. Son más rápidos que DP pero no siempre dan la solución óptima.

Problema de selección de actividades

function activitySelection(activities) {
  // Sort by finish time
  activities.sort((a, b) => a.end - b.end);
  
  const selected = [activities[0]];
  let lastEnd = activities[0].end;
  
  for (let i = 1; i < activities.length; i++) {
    if (activities[i].start >= lastEnd) {
      selected.push(activities[i]);
      lastEnd = activities[i].end;
    }
  }
  return selected;
}

Cambio de monedas (voraz - no siempre óptimo)

function coinChangeGreedy(coins, amount) {
  coins.sort((a, b) => b - a); // Descending
  const result = [];
  
  for (const coin of coins) {
    while (amount >= coin) {
      result.push(coin);
      amount -= coin;
    }
  }
  return amount === 0 ? result : null;
}

// Works for standard coin systems (1, 5, 10, 25)
// May not work for arbitrary coin systems!

Mochila fraccionaria

function fractionalKnapsack(items, capacity) {
  // Sort by value/weight ratio

  

  items.sort((a, b) => (b.value / b.weight) - (a.value / a.weight));
  
  let totalValue = 0;
  
  for (const item of items) {
    if (capacity >= item.weight) {
      totalValue += item.value;
      capacity -= item.weight;
    } else {
      totalValue += item.value * (capacity / item.weight);
      break;
    }
  }
  return totalValue;
}

Voraz vs DP: Voraz: rápido, óptimo local | DP: más lento, óptimo global. Usa voraz cuando el problema tenga propiedad de elección voraz.