Saltar al contenido principal
Interactive Algorithm Education

Visualize & Master Algorithms & Data Structures

Explore classic & modern sorting algorithms, efficient searching techniques, and interactive data structure visualizations — all with real-time step-by-step animation, comparisons, swaps, and Big-O metrics.

Greedy Visualizer

Activity Selection

Paso 0 / 0
Speed 100ms
Step Progress 0 / 0
Selected 0
Rejected 0
Status Ready
Unconsidered
Considering
Selected
Rejected
Step Explanation

Select an algorithm and press Play to watch the greedy choices unfold.

—
Pseudocode
 

Selección de Actividades

Elementary (2/5) ~30 minutos Programación de intervalos 'Elección voraz: horario de finalización más temprano' Argumento de intercambio (optimalidad) Selección de no superposición Prereqs: Ordenamiento, Intuición voraz básica
Quick Reference

Activity Selection

Activity Selection picks the maximum number of non-overlapping activities given start and end times. The greedy strategy — always choose the activity that finishes earliest — is provably optimal.

Difficulty: Elementary (2/5) greedy

Complexity

Best Time
O(n log n)
Average Time
O(n log n)
Worst Time
O(n log n)
Space
O(n)

When to Use

For interval scheduling: meeting-room allocation, classroom scheduling, and resource booking with time conflicts.

Pros

  • Greedy choice is provably optimal
  • O(n log n) dominated by sorting
  • Simple and easy to reason about

Cons

  • Requires non-overlapping constraint
  • Only works for the interval-scheduling structure
  • Tie-breaking on equal end times needs care

History

The activity-selection problem is a canonical greedy algorithm taught since the 1970s and appears in every major algorithms textbook as the introductory greedy example.

Tienes una sala de reuniones y un conjunto de actividades, cada una con un tiempo de inicio y fin. ¿Cuál es el mayor número de actividades no superpuestas que puedes programar?

La respuesta: siempre reserva la actividad que finaliza más temprano, luego repite. Es una de las pruebas más limpias de que una regla voraz simple puede ser óptimamente probable — y la base para la programación de intervalos en todas partes.

Cómo Funciona

  1. Ordena actividades por tiempo de finalización, ascendente.
  2. Selecciona la actividad que finaliza primero.
  3. Escanea el resto en orden — mantiene cualquier actividad cuyo tiempo de inicio no sea más temprano que el final de la última actividad seleccionada.
  4. Listo: el conjunto seleccionado es maximal.

La elección voraz es deliberada: el finalizador más temprano deja más espacio después, así que ninguna otra actividad puede bloquearlo.

Un argumento de intercambio prueba la optimalidad: toma cualquier solución óptima e intercambia su primera actividad por la de finalización más temprana. El intercambio no puede superponerse con nada que el original pudiera, y el problema restante está igual — así que la primera elección voraz es segura.

Idea Clave

La estrategia voraz funciona aquí porque la restricción es puramente sobre superposición de tiempo — una vez que eliges un finalizador, el futuro depende solo del tiempo de finalización, no de cuál actividad era. Esa sola observación colapsa todo el espacio de búsqueda. Si una actividad posterior comenzó más temprano y finalizó más tarde, solo sería peor.

Ejemplo Trabajado

El visualizador usa actividades A(1–3), B(2–5), C(4–6), D(6–8), E(5–7):

PasoCandidata¿Comienza ≥ último fin?¿Elegida?
1A (1–3)— (primera)✓ A
2B (2–5)2 < 3✗
3C (4–6)4 ≥ 3✓ C
4E (5–7)5 < 6✗
5D (6–8)6 ≥ 6✓ D

Conjunto seleccionado: A, C, D — 3 actividades. Observa el visualizador recorriendo exactamente esto: cada candidata gris falla la verificación de tiempo de inicio contra el fin actual.

Casos Extremos y Trampas

  • Empates en tiempo de finalización — cualquier finalizador más temprano funciona; elige cualquiera.
  • Intervalos consecutivos — una actividad que finaliza en 6 y otra que comienza en 6 son compatibles (inicio ≥ fin).
  • Candidatas superpuestas — B y E ambas confligen con el fin de A; el escaneo simplemente las salta.
  • El ordenamiento importa — sin ordenar por tiempo de finalización, la regla voraz se rompe. Este es un preprocesamiento requerido, no una elección.

Comparación: Selección de Actividades vs Otros Problemas de Intervalos

ProblemaRegla voraz¿Óptimo?
Máx. no superpuestasFinalización más tempranaSí
Mín. salas (partición de intervalos)Ordenar por inicio + heapSí
Mín. puntos para cubrir intervalosVoraz por finSí
Programación de intervalos ponderadosFinalización más tempranaNo → usar DP

Aplicaciones

  • Programación de salas de reuniones — reservando una sola sala
  • Asignación de aulas — empaquetando conferencias en un solo salón
  • Segmentación de recursos de tiempo — programación de CPU/trabajos alrededor de fechas límite

Trayectoria de Práctica

  1. Ordena a mano las actividades del visualizador por tiempo de finalización y ejecuta el escaneo tú mismo.
  2. Explica por qué saltar B (2–5) en el paso 2 nunca puede costarte una solución.
  3. Construye dos actividades donde elegir el inicio más temprano (en lugar de finalización más temprana) falla.
  4. Extiende al problema de mín. salas y ve por qué un heap reemplaza el solo puntero.
  5. Prueba el argumento de intercambio para finalización-más-temprana con tus propias palabras.