← Datos y decisiones ETAPA 02 · 26 MIN

Elige tu estructura de datos

Relaciona listas, diccionarios, conjuntos y colas con las operaciones que tu sistema realmente hace.

Abrir en el laboratorio ↗

AL TERMINAR, PODRÁS

  • Elegir una colección a partir de las operaciones necesarias
  • Distinguir orden, identidad y unicidad
  • Usar un deque para una carga de trabajo FIFO
Empieza por las operaciones que necesitas y elige la estructura que las abarata.

Descripción del diagrama: Agregar al final, sacar del frente → deque; Buscar un trabajo por ID → dict; Siempre el más urgente primero → heapq

Empieza por las operaciones

Una estructura de datos es un conjunto de compromisos (tradeoffs).

Una list (lista) sirve para recorrer en orden y acceder por índice. Un dictionary (diccionario) asocia claves con valores. Un set (conjunto) representa pertenencia sin duplicados.

La pregunta correcta no es cuál estructura es la más rápida en general, sino qué operaciones necesita tu carga de trabajo. Relay necesita recibir trabajos por un extremo y sacarlos por el otro, mientras que consultar un estado requiere encontrar un trabajo por su identificador. Son necesidades distintas y pueden justificar estructuras distintas.

Las colas tienen una dirección

FIFO significa first in, first out: el primero que entra es el primero que sale.

Quitar el índice cero de una lista de Python desplaza todos los elementos restantes, así que quitar repetidamente por el frente se vuelve costoso a medida que la cola crece. Un deque (cola de doble extremo) permite agregar y quitar eficientemente por ambos lados y expresa esa intención directamente. Una stack (pila), en cambio, saca el elemento agregado más recientemente.

Ninguna política es mejor en todos los casos: FIFO encaja con el orden de llegada normal, mientras que una pila sirve para exploraciones en profundidad e historiales de deshacer. Nombra la política para que los usuarios sepan qué orden esperar.

Python
from collections import deque

pending = deque(["email", "report"])
pending.append("thumbnail")
next_job = pending.popleft()
print(next_job)

Un hecho, varias vistas

Un diccionario indexado por ID de trabajo permite búsquedas rápidas en promedio, mientras una cola guarda los IDs en orden de procesamiento.

Esto duplica referencias a la identidad, no necesariamente el trabajo completo. Mantener varias vistas crea un invariante: cada ID en la cola debe corresponder a un trabajo existente. Decide qué pasa cuando una cancelación quita un trabajo de una vista pero no de la otra.

Un índice ahorra trabajo en las lecturas pero cuesta trabajo en las escrituras. Esa misma idea reaparece, a escala mucho mayor, en bases de datos, motores de búsqueda y cachés.

ERROR FRECUENTE

Mantener una cola y un diccionario de estados sin definir cómo se conservan coherentes puede producir trabajo perdido o duplicado.

INTÉNTALO TÚ

Elige estructuras para el orden de los trabajos pendientes, el estado por ID y la colección de IDs ya vistos. Explica la operación dominante de cada elección.

COMPROBACIÓN DE RECUERDO / APLICA LA IDEA

Decide en el laboratorio.

El checkpoint de dos preguntas, tus notas y tu progreso guardado están en el laboratorio. Gratis y sin cuenta.

Abrir en el laboratorio ↗

CONÉCTALO CON RELAY

Reemplaza la lista de Relay de la que se saca por el frente por un deque y agrega un diccionario para consultar estados. Documenta la regla de coherencia entre ambos.