Taller 5: Atención en centro de Urgencias
Objetivos
- Analizar y comprender las operaciones críticas de un cola de prioridad implementada mediante un Heap, así como su complejidad temporal.
- Analizar e implementar un algoritmo de Heapsort.
Descripción general
Triage (en francés) es un método por el cual se seleccionan y se clasifican a los pacientes en las salas de urgencia. Normalmente se les suele dar prioridad a los pacientes que tienen mayor urgencia de ser atendidos (debido a la gravedad del caso). Cada país suele tener sus propias categorías numéricas o por colores para expresar la urgencia de cada paciente. En este taller usaremos la clasificación australiana mostrada en la siguiente tabla:
Nivel | Descripción | Debe ser atendido antes de |
---|---|---|
1 | Resurrección | 0 minutos |
2 | Emergencia | 10 minutos |
3 | Urgente | 30 minutos |
4 | Menos urgente | 60 minutos |
5 | No urgente | 120 minutos |
El hospital cuenta con un sistema que le permite registrar los pacientes. Uno vez uno de estos llega al registro de urgencias, un empleado lo registra en el sistema y le asigna el nivel de triage que considere necesario. Luego, al momento de que haya un médico disponible, el empleado escoge al paciente que debe ser atendido con mayor prioridad gracias el sistema.
El sistema del paciente funciona bajo el siguiente modelo:
Figura 1: Modelo de datos de la central de pacientes
Instrucciones de desarrollo
Nota: Antes de iniciar, lea la sección 0. Envío de talleres: Términos y Condiciones, en esta sección se encuentran enumeradas las reglas y recomendaciones de desarrollo y envío de proyectos establecidas a lo largo del curso.
- Ingrese a la carpeta taller5 que se encuentra en el repositorio talleres-templates. En caso de no contar con el repositorio en su máquina local, descarguelo utilizando el comando
git clone [email protected]:talleres/talleres-templates.git
o descargelo desde aquí - En primer lugar, revise las clases del mundo y comprenda sus métodos y verifique los llamados que se le hacen desde estas a la interfaz MaxPQ.
- En segundo lugar, lea la documentación de la interfaz mencionada anteriormente y complete los TODO's de la clase MaxHeapPQ.
- En tercer lugar, pruebe las funcionalidades 1 y 2 desde la interfaz de comandos.
- Finalmente, realice los TODO's de la clase Heap y pruebe el funcionamiento de la opción 3 del Menú principal en la interfaz de comandos.
Reto (Opcional)
Un balanceador de carga es un dispositivo que distribuye la carga entre varias instancias computacionales de una aplicación. En un caso especifico, cada instancia puede estar corriendo sobre un servidor, y el balanceador de carga se encarga de distribuir las peticiones entrantes entre los diferentes servidores.
Hay varios algoritmos de balanceo de carga. Aquí presentamos dos entre ellos:
- Round Robin: Se pasa cada petición entrante al siguiente servidor en la cola, garantizando que se distribuye la carga de igual manera entre todos los servidores.
- Weighted Round Robin: A cada máquina se le asigna un peso específico y el número de peticiones que recibe es proporcional a este.
Usando una aplicación de comandos de linea y las estructuras vistas a este momento del curso, intente simular los dos algoritmos de balanceo de carga mencionados y comparemos. ¿En cuáles caso es mejor uno sobre el otro?
Preguntas
- Critique la siguiente idea. ¿Por qué no implementar una cola de prioridad que con el fin de encontrar la llave máxima en tiempo constante, lo que hace es guardar una referencia a esta en cada nueva inserción ?
- Suponga que su aplicación va a tener muchas operaciones de inserciones pero solo unas pocas eliminaciones. ¿Cuál implementación sería la ideal en este caso? ¿En el caso contrario?.
- ¿Cuál sería la modificación más simple que habría que hacer al código de MaxHeapPQ para que lo más importante sea retirar a la llave más pequeña?
Entrega para bonificación
Fecha límite de entrega: Ver
- Verifique que su aplicación cumple con las condiciones descritas en Envío talleres.
- Conteste las preguntas en el archivo
README.txt
. - Realice pruebas unitarias para el funcionamiento de la aplicación. Estas deben encontrarse en el paquete
taller.test
. Como como mínimo sus pruebas deberían validar los siguientes casos:- Eliminar el paciente de más urgencia no rompe la condición de heap.
- Agregar a un nuevo paciente con mayor prioridad efectivamente lo deja como raíz y mantiene la condición en el resto del árbol. -Ordenar un arreglo de pacientes que se encuentran previamente en desorden.
- Cargue el taller a su repositorio en Bitbucket. No olvide crear el archivo
calificacion.txt