ScheffelaarGerman / EstrD2024s2

0 stars 0 forks source link

tp-2 hay demasiados recorridos en asignadosPorProyectos #15

Open SergioMartellotti opened 2 months ago

SergioMartellotti commented 2 months ago

Te recomiendo consultarlo en clase este punto.

SergioMartellotti commented 2 months ago

No es necesario hacer la lista de proyectos sin repetir. Estás sumando una tarea bastante cara a la solución.

Tenes que hacer una recursión sobre la lista de Roles de la Empresa y a ellos ir agregandolos en las tuplas.

SergioMartellotti commented 2 months ago

@ScheffelaarGerman por favor cuando resuelvas los issues al pushear poneme cuales resolves "resuelto #15" sería para este caso.

SergioMartellotti commented 2 months ago

Acá hay una cuestión y es que si de la Empresa sacas los proyectos sin repetir, cosa que no es nada barato, y a la subtarea le mandas eso más todos los Roles, terminas haciendo por cada proyecto un recorrido completo de la lista de Roles. Supongamos que tenes 1000 Roles y 10 Proyectos. Ya para sacar los proyectos sin repetir recorriste los 1000 Roles viendo y armando una lista de proyectos no repetidos. Esto, insisto, no es nada barato. Después te queda en cantidadEmpleadosEnProyecto contar por cada proyecto cuantos roles hay. Es decir recorrer 10 veces la lista de Roles preguntando si están o no están. Te queda algo así como 10 1000 = 10.000 preguntas? + proyectosSinDuplicados Lo que se busca es que a la Empresa le saques los Roles Que es algo de costo O(1). Y envíes a una subtarea los Roles. subtarea :: [Rol] -> [(Proyecto, Int)] subtarea [] = [] subtarea (r:rs) = entuplar r (subtarea rs) Acá haces una recursión sobre la lista de Roles. Y a cada uno lo mandas a una 2da subtarea que horriblemente voy a llamar "entuplar". entuplar :: Rol -> [(Proyecto, Int)] Entuplar trabaja armando la tupla y ubicando a cada Rol en alguna de las posiciones de la tupla, la que le corresponda En teoría en nuestro ejemplo son 10. entuplar :: Rol -> [(Proyecto, Int)] entuplar rol [] = [(proyectoRol rol, 1)] Te regalo el caso base, al que deberías llegar si el proyecto del rol, no está en ninguna posición de la tupla. En ese caso, se agrega una tupla a la lista de tuplas con el proyecto del Rol y un número 1 porque es el primero de ese proyecto. Te queda armar la recursión de entuplar, que tenes que hacer? ver si el proyecto del rol es alguno de los (proyecto, n) si está solo debes sumar 1 al n, sino seguir buscando. ¿Qué termina pasando? Solo recorremos 1 vez en la subtarea "subtarea" la lista de Roles, y por cada Rol buscas en la tupla, donde en el peor de los casos, vamos a tener 10 elementos o tuplas. Te queda algo así como 1000 10 = 10.000 preguntas? Similar al anterior pero te sacas de encima la búsqueda de eliminar los repetidos.