Analisis de algoritmos - Considerar carga de datos

Analisis de algoritmos - Considerar carga de datos

de Gabriel Rode Docminguez -
Número de respuestas: 2

En el practico 2 nos piden analizar la solución al algoritmo de Gale-Shapley indicada en el libro.

El libro separa el algoritmo en 4 partes y para solucionar la 4ta parte (que referencia a como comparar en tiempo O(1)  la preferencia de una mujer frente a dos hombres m y m') nos plantea crear una matriz n x n donde se guardan las preferencias de las mujeres, permitiendo cumplir con la condición solicitada.

Pero esta solución me platea la siguiente duda: si bien es claro que se cumple la condición de comparar la preferencia de 1 mujer frente a 2 hombres en tiempo O(1), nos genera una demora (por fuera del algoritmo en si) que es cargar todos los datos en la matriz n x n, que según entiendo sería en tiempo n^2

No debemos considerar estos tiempos a la hora de analizar un algoritmo? 

O, dicho de otra manera, podemos plantear que un problema se soluciona utilizando una estructura dada sin preocuparnos mucho por la demora de dicha estructura? O como deberíamos manejar esto?


Gracias. 

En respuesta a Gabriel Rode Docminguez

Re: Analisis de algoritmos - Considerar carga de datos

de Pablo Michael Cardozo Lima -
Igual un profe sabe responder mejor a la duda, pero en realidad SÍ consideras el tiempo que llevaría setear o introducir esos datos.
Crear la matriz n*n y introducirle los datos de la lista de preferencias lleva O(n^2), y lo que el libro trata de probar es que una vez creada, el algoritmo G-S, con esa estructura, tarda O(n^2).
Como esa estructura se crea "antes" de empezar el algoritmo, el orden de ese proceso O(n^2), y el orden mientras aplicas el algoritmo también es O(n^2), por lo que por una propiedad que no recuerdo y esta en el libro, el orden total es O(n^2).
Por ultimo a modo de ejemplo, si creases una matriz cubica en una posible implementación, entonces el orden de todo el algoritmo seria O(n^3) (debido a la matriz cubica).
Si he entendido algo mal y alguien me corrige apreciaría el comentario
En respuesta a Gabriel Rode Docminguez

Re: Analisis de algoritmos - Considerar carga de datos

de Juan Pablo García Garland -
La respuesta va con spoilers. Quienes lean, si no pensaron el ejercicio dejen de leer :)
 
La implementación concreta efectivamente construye una matriz de tamaño n \times n . Es un buen argumento decir que  para ésta implementación particular el tiempo es  \Omega (n^2) en el peor caso (para cualquier entrada se da ese tiempo, de hecho). Pero, ¿se puede implementar el algoritmo sin crear las matrices?

Sí, se podrían usar otras estructuras. Lo importante que vean en este ejercicio es que esa discusión no importa. En tiempo, G-S es  \Omega (n^2) en peor caso por una cuestión fundamental del algoritmo, y no de una implementación concreta: la cantidad de proposiciones que se hacen.