AIUnlimited
🌳

Fundamentos de IA

🌱
AI Seeds

Empieza desde cero

🌿
AI Sprouts

Construye bases

🌳
AI Branches

Aplica en la práctica

🏕️
AI Canopy

Profundiza

🌲
AI Forest

Domina la IA

🔨

Maestría en IA

✏️
AI Sketch

Empieza desde cero

🪨
AI Chisel

Construye bases

⚒️
AI Craft

Aplica en la práctica

💎
AI Polish

Profundiza

🏆
AI Masterpiece

Domina la IA

📘

Práctica de IA

📖
Entendiendo modelos open-source

Fundamentos y recursos para modelos open-source

🎯
Del problema a la tarea del modelo

Convertir problemas de negocio en tareas de modelos

⚡
Ejecutando tu primer modelo

Mira tus primeros resultados en 30 minutos

🔧
Fine-tuning y evaluación

Ajusta modelos y evalúa el rendimiento

🚀
Sistemas de aplicación

Construye aplicaciones IA del mundo real

🎨
IA generativa

Explora modelos AIGC open-source

🤖
Agentes

Aprende frameworks Agent y herramientas MCP

📐
Fundamentos complementarios

Fundamentos LLM y evaluación

🎓

Claude Academia

🤖
Claude 101

Learn AI basics with Claude

💻
Claude Code 101

Code with Claude as your pair programmer

🤝
Introduction to Claude Cowork

Collaborate with Claude on complex projects

⚙️
Claude Platform 101

Build apps with the Claude API

Laboratorio

7 experimentos cargados
🧬Sandbox de Red Neuronal🤖¿IA o Humano?🥋Dojo de Prompt Engineering🏁Carrera de Algoritmos🧠Trivia de IA🏗️Lienzo de diseño de sistemas
🎯Entrevista simuladaEntrar al Laboratorio→
🚀

Desarrollo profesional

🚀
Plataforma de Entrevistas

Comienza tu camino

🌟
Dominio Conductual

Domina las habilidades blandas

💻
Entrevistas Técnicas

Supera la ronda de código

🤖
Entrevistas de IA y ML

Dominio en entrevistas de ML

🏆
Oferta y Más Allá

Consigue la mejor oferta

Empezar
AIUnlimited

Licencia MIT

沪ICP备18025655号-11

Aprender

  • Fundamentos de IA
  • Práctica de IA
  • Claude Academia
  • Laboratorio
  • Desarrollo profesional

Comunidad

  • Acerca de
  • Preguntas Frecuentes

Soporte

  • Términos de Servicio
  • Política de Privacidad
  • Contacto
Académicos de IA e Ingeniería›✏️ AI Sketch›Lecciones›Algoritmos Voraces
🏃
AI Sketch • Intermedio⏱️ 17 min de lectura

Algoritmos Voraces

¿Qué hace que un algoritmo sea codicioso?

Un algoritmo codicioso crea una solución paso a paso, eligiendo siempre la opción que luce mejor en este momento, sin reconsiderar elecciones pasadas. Sin retroceder, sin mirar hacia adelante.

Funciona cuando se cumplen dos propiedades:

  1. Propiedad de elección codiciosa: una elección óptima localmente conduce a una solución óptima global.
  2. Subestructura óptima: el problema restante después de cada elección es una instancia más pequeña del mismo problema.

Selección de actividad: el ejemplo clásico

Dado un conjunto de actividades con horas de inicio y finalización, seleccione el número máximo de actividades que no se superpongan.

Estrategia codiciosa: ordenar por hora de finalización, elija siempre la actividad que finalice antes.

def max_activities(intervals):
    intervals.sort(key=lambda x: x[1])
    count, end = 0, 0
    for s, e in intervals:
        if s >= end:
            count += 1
            end = e
    return count

¿Por qué funciona esto? Elegir la actividad que termine más temprano deja más espacio para actividades futuras. Ninguna otra opción puede hacerlo mejor.

Línea de tiempo que muestra la selección de actividades según la hora de finalización más temprana
Seleccionar por hora de finalización más temprana maximiza el número de actividades que no se superponen.

Codificación Huffman - Concepto

Cree un código binario óptimo sin prefijos fusionando repetidamente los dos símbolos de menor frecuencia. Esto es codicioso: en cada paso, fusiona el par más barato. El resultado es un árbol donde los símbolos frecuentes obtienen códigos cortos.

🤯
La codificación Huffman se utiliza en la compresión JPEG, MP3 y ZIP. David Huffman lo inventó cuando era estudiante en 1952: ¡era una tarea!

Juego de salto

Dada una matriz donde nums[i] es la longitud máxima de salto desde el índice i, determine si puede alcanzar el último índice.

Enfoque codicioso: realiza un seguimiento del índice más lejano alcanzable hasta el momento. Escanee de izquierda a derecha; si alguna vez se queda atrás, devuelva falso.

Lección 9 de 100% completado
←Recursión y Backtracking

Discusión

Iniciar sesión unirse a la discusión

def can_jump(nums):
    farthest = 0
    for i, jump in enumerate(nums):
        if i > farthest:
            return False
        farthest = max(farthest, i + jump)
    return True
🧠Verificación Rápida

En el juego de salto, ¿qué representa la variable codiciosa ”más lejos”?

Gasolinera

Recorre una ruta circular con gasolineras. En la estación i ganas gas[i] de combustible y gastas cost[i] para llegar a la siguiente estación. Encuentra la estación inicial que te permita completar el circuito, o regresa −1.

Visión codiciosa: si el gas total ≥ el costo total, existe una solución. Realizar un seguimiento de un superávit actual; cada vez que cae por debajo de cero, la respuesta debe comenzar después de ese punto.

Programador de tareas

Programe tareas con un tiempo de reutilización de n entre tareas idénticas. Codicioso: elige siempre la tarea restante más frecuente. La respuesta depende de la frecuencia máxima y de cuántas tareas la comparten.

Tasks: A A A B B C, cooldown = 2
Schedule: A B C A B _ A
Total = 7
🤔
Think about it:En el programador de tareas, ¿por qué elegir primero la tarea más frecuente minimiza los espacios inactivos? ¿Qué saldría mal si eligieras primero el menos frecuente?

Mochila fraccionaria frente a mochila 0/1

Mochila fraccionaria: puedes llevar fracciones de artículos. Trabajos codiciosos: ordene por valor por peso, tome primero la mejor proporción.

0/1 mochila: los artículos son de todo o nada. Greedy falla aquí porque saltarse un artículo pesado pero valioso podría ser peor que tomar dos más livianos. Esto requiere programación dinámica.

Items: (weight=3, value=4), (weight=2, value=3), (weight=2, value=3)
Capacity: 4

Greedy (best ratio first): takes item 1 (w=3, v=4) → 1 remaining → can't fit rest → value = 4
Optimal: takes items 2+3 (w=4, v=6) → value = 6 ✗ Greedy fails!
🧠Verificación Rápida

¿Por qué el enfoque codicioso falla en el problema de la mochila 0/1?

¿Cuándo funciona la avaricia?

✅ Funciona cuando puedes demostrar la propiedad de elección codiciosa:

  • Programación de intervalos, codificación Huffman, árboles de expansión mínima, algoritmo de Dijkstra, cambio de monedas con denominaciones estándar

❌ Falla cuando los óptimos locales no se combinan en óptimos globales:

  • 0/1 mochila, camino más largo en gráficos generales, viajante de comercio

Demostrando la codiciosa corrección: argumento de intercambio

La técnica estándar: asumir una solución óptima que no utiliza la elección codiciosa. Demuestre que puede intercambiar una de sus opciones por la opción codiciosa sin empeorar la solución. Esto demuestra que la avaricia es al menos igual de buena.

🧠Verificación Rápida

¿Para qué se utiliza el 'argumento de intercambio'?

Programación codiciosa versus dinámica

| Aspecto | Codicioso | Programación dinámica | |--------|--------|---------------------| | Opciones | Una mejor opción por paso | Explora todos los subproblemas | | ¿Revisita el pasado? | Nunca | Sí: almacena subresultados | | Velocidad | Generalmente más rápido | Depende del espacio de estados | | Corrección | Sólo si es demostrable | Siempre (si se formula correctamente) |

En caso de duda, comience con la avaricia; si no puede demostrar que funciona, cambie a DP.

🤯
El algoritmo de ruta más corta de Dijkstra es codicioso: siempre procesa el nodo no visitado más cercano. Funciona porque los pesos de los bordes no son negativos, lo que garantiza que la elección codiciosa sea segura.
🤔
Think about it:Te dan denominaciones de monedas [1, 3, 4] y necesitas hacer cambio por 6. El enfoque codicioso elige 4+1+1=3 monedas, pero lo óptimo es 3+3=2 monedas. ¿Qué pasa con estas denominaciones que rompe la propiedad de elección codiciosa?

📚 Lecturas adicionales

  • NeetCode - Lista de reproducción codiciosa - problemas codiciosos seleccionados con explicaciones
  • Manual de entrevistas técnicas - Greedy - cuándo usar patrones comunes y codiciosos
  • Algoritmos CP - Algoritmos codiciosos - teoría y pruebas más profundas