Ejercicio 1 - PP 2021

Ejercicio 1 - PP 2021

de Favio Rafael Cardoso Sanchez -
Número de respuestas: 1

Hola! estaba tratando de hacer este ejercicio, y el desarrollo del algoritmo me quedó un tanto diferente

Para empezar no termino de entender porqué ordena las variables en el orden descrito en la linea 2 del algoritmo planteado como solución, en mi caso simplemente pedí que se ordenaran las variables en orden de la primera aparición, pues si los bloques tienen sus lineas consecutivas, me basta saber que variables tengo "detrás" si me detengo en la variable i, sabiendo que todos los bloques de las anteriores variables comienzan antes que el de la variable i.

Luego en la linea 14 toma la decisión de dejar la variable vi sin asignar si el conjunto C es vacío, esto me parece innecesario pues se sabe según la letra que la cantidad de celdas disponibles es suficiente para crear una asignación, por lo que siempre quedaría un espacio de memoria libre para asignarle a vi.

Relacionado con esto último es la ultima duda también, pues en la demostración de corrección pretende probar éste ultimo punto y también que dadas dos variables vi y vj que se solapan en sus bloques, entonces tienen asignadas celdas de memoria diferentes. Tiene sentido esto cuando estamos hablando de un Greedy Algorithm? no deberíamos centrarnos en probar que el algoritmo resuelve el problema utilizando la mínima cantidad de celdas de memoria disponible, utilizando algún argumento de tipo stay ahead o exchange?

Si pudiéramos hacerlo de esta forma, como lo harían?

Gracias y saludos!

En respuesta a Favio Rafael Cardoso Sanchez

Re: Ejercicio 1 - PP 2021

de Tatiana Rischewski Santomauro -

Hola,

No entiendo como la forma en la que ordenás las variables es diferente a la de la solución. En la solución se ordenan las variables de manera creciente según el número de la primera instrucción de sus bloques, es decir en el orden en el que aparecen por primera vez.

El if de la linea 14 no es necesario en el algoritmo, pero simplifica la demostración de terminación. En la parte (b) se prueba que nunca se cumple la condición del if al probar que nunca queda ninguna variable sin asignar.

Es correcto que para demostrar la corrección del algoritmo hay que probar que resuelve el problema utilizando la mínima cantidad de celdas de memoria disponible. En este caso, en la solución de la parte (a) se explica que la cantidad mínima de celdas d requeridas necesariamente debe cumplir que  d \geq \smash{\displaystyle\max \{d_i\}_{1 \leq i \leq n}} . Como el algoritmo planteado utiliza exactamente d celdas (el mínimo posible), entonces la solución retornada es óptima.

La técnica usada en la demostración es igual a la que se aplica en el libro en la parte “A Related Problem: Scheduling All Intervals” de la sección 4.1. Es posible escribir la demostración usando explícitamente un argumento de stay ahead. Para eso habría que modificar levemente el algoritmo para que solo se use una nueva celda si todas las anteriores están ocupadas. Luego en la demostración de corrección hay que probar que la cantidad de celdas que usa mi solución para asignar las primeras j variables no es mayor que la cantidad que usa una solución óptima para asignar las mismas variables. Como en particular se cumple para m, la asignación de mi algoritmo es óptima.

Saludos,
Tatiana