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›Heaps y Colas de Prioridad
⛰️
AI Sketch • Intermedio⏱️ 18 min de lectura

Heaps y Colas de Prioridad

¿Qué es un montón?

Un montón es un árbol binario completo donde cada padre satisface la propiedad del montón, ya sea siempre más pequeño (montón mínimo) o siempre más grande (montón máximo) que sus hijos. "Completo" significa que todos los niveles están llenos excepto posiblemente el último, que se llena de izquierda a derecha.

       1            Min-heap
      / \
     3   5
    / \
   7   4

Como está completo, lo almacenamos en una matriz plana; no se necesitan punteros. Para el índice i: hijo izquierdo = 2i + 1, hijo derecho = 2i + 2, padre = (i - 1) // 2.

Montón mínimo frente a montón máximo

| Propiedad | Montón mínimo | Montón máximo | |----------|----------|----------| | Raíz | Elemento más pequeño | Elemento más grande | | ¿Padre ≤ hijos? | ✅ Sí | ❌ No (≥) | | Extracto da | Mínimo | Máximo |

El heapq de Python es un montón mínimo de forma predeterminada. Para un montón máximo, niegue los valores al insertar y niegue nuevamente al extraer.

Insertar y extraer: paso a paso

Insertar: presione hasta el final, luego haga burbujas (intercambie con el padre cuando sea más pequeño):

import heapq
h = [1, 3, 5, 7]
heapq.heappush(h, 2)  # h becomes [1, 2, 5, 7, 3]

Extraer mínimo: intercambie la raíz con el último elemento, haga estallar el último, luego tamice hacia abajo (intercambie con un elemento más pequeño):

smallest = heapq.heappop(h)  # returns 1

Ambas operaciones se ejecutan en O(log n) porque la altura del árbol es log n.

Diagrama que muestra el burbujeo del inserto y el tamizado del extracto en un montón mínimo
Inserte burbujas hacia arriba; extract-min se tamiza.
Lección 6 de 100% completado
←Árboles y Grafos Visualizados

Discusión

Iniciar sesión unirse a la discusión

Heapify - Construyendo un montón en O(n)

Llamar a heapq.heapify(arr) convierte una lista en un montón in situ en O(n), no en O(n log n). Funciona de abajo hacia arriba, filtrando cada nodo que no es hoja. Este es uno de los resultados de complejidad más sorprendentes en la informática.

🤯
Construir un montón es O (n), no O (n log n). La mayoría de los nodos están cerca del fondo y apenas necesitan filtrarse: las matemáticas funcionan en tiempo lineal.

La abstracción de la cola de prioridad

Una cola de prioridad le permite acceder siempre primero al elemento de mayor prioridad. Los montones son la implementación preferida porque tanto la inserción como la extracción son O (log n). Úselo cada vez que necesite "dame el mejor artículo hasta ahora".

Patrón: Problemas Top-K

"Encuentra los K elementos más grandes en una matriz sin clasificar".

Mantenga un mínimo montón de tamaño K. Para cada elemento, empújelo; si el montón excede K, extraiga el más pequeño. Lo que queda son los K más grandes.

import heapq
def top_k(nums, k):
    return heapq.nlargest(k, nums)

Tiempo: O(n log k) - mucho mejor que ordenar cuando k ≪ n.

🧠Verificación Rápida

Necesita las 5 puntuaciones más altas de 1 millón de entradas. ¿Qué tipo y tamaño de montón?

Patrón: fusionar K listas ordenadas

Empuje el encabezado de cada lista en un montón mínimo. Haga estallar el más pequeño y luego presione el siguiente elemento de esa misma lista. Repita hasta que se agoten todas las listas. Tiempo: O(N log K) donde N es el total de elementos.

Patrón: mediana del flujo de datos

Mantenga dos montones: un montón máximo para la mitad inferior y un montón mínimo para la mitad superior. Equilibre sus tamaños para que difieran como máximo en 1. La mediana siempre está en una o ambas raíces.

Lower half (max-heap): [1, 2, 3]  ← max = 3
Upper half (min-heap): [4, 5, 6]  ← min = 4
Median = (3 + 4) / 2 = 3.5
🧠Verificación Rápida

En el enfoque de la mediana de dos montones, ¿adónde va primero un nuevo elemento?

Problemas de programación

Hay muchas cosas que brillan en la programación: salas de reuniones (realizan un seguimiento de la hora de finalización más temprana), programación de tareas con tiempos de reutilización o colas de trabajos de CPU. La idea clave es que un montón rastrea eficientemente "lo que termina a continuación".

🤔
Think about it:Si necesita tanto el mínimo como el máximo de manera eficiente, un solo montón no servirá. ¿Qué combinación de estructura de datos usarías?

Cuándo utilizar montón frente a matriz ordenada frente a BST

| Necesidad | La mejor elección | Por qué | |------|-------------|-----| | Extracción mínima/máxima repetida | Montón | O(log n) insertar + extraer | | Datos estáticos, clasificación única | Matriz ordenada | O(n log n) una vez, O(1) acceso | | Consultas de rango + estadísticas de pedidos | BST equilibrada | O(log n) para todo | | Top-K de una secuencia | Montón de tamaño K | O(n Iniciar sesión k) total |

🧠Verificación Rápida

¿Qué operación es O(1) en un montón mínimo?

Hoja de trucos de complejidad

| Operación | Hora | |-----------|--------------| | Insertar | O(log n) | | Extraer mín./máx. | O(log n) | | Vistazo mínimo/máximo | O(1) | | Amontonar | O(n) | | Top-K de n artículos | O(n Iniciar sesión k) |

🤔
Think about it:¿Por qué no se puede realizar una búsqueda binaria en un montón aunque esté almacenado en una matriz? Piense en el orden de clasificación que realmente garantiza la propiedad del montón.

📚 Lecturas adicionales

  • NeetCode - Heap / Priority Queue - hoja de ruta de problemas visuales con problemas de montón agrupados
  • Manual de entrevistas técnicas - Heap - patrones y consejos concisos
  • Python heapq docs - referencia oficial del módulo con ejemplos