Ver Mensaje Individual
  #15 (permalink)  
Antiguo 08/07/2016, 15:37
enrieto
 
Fecha de Ingreso: abril-2016
Mensajes: 31
Antigüedad: 8 años, 1 mes
Puntos: 5
Respuesta: ¿Se puede optimizar el siguiente codigo?

Hola; lamento que mi comentario te haya desmoralizado; releyendo veo que quedó bastante rudo, pero no fue intencional.
Como comentaste que estás empezando, permitime sugerirte que aproveches este mismo programa como incentivo y caso de estudio para el tema "ordenación y búsqueda", que creo que te va a resultar interesante.
Por ejemplo, yo te había sugerido (Thug Life mode) ordenar primero y "bsearch" después. Una búsqueda binaria sobre la segunda lista en memoria seguramente va a mejorar mucho. Te dejo un link básico, que tiene un ejemplo:
http://pubs.opengroup.org/onlinepubs/009695399/functions/bsearch.html
(básico, no trivial, claro; a partir de ahí podés buscar otros ejemplos y explicaciones).
Y como comentario medio irresponsable, porque no me puse a analizar tu código como si fuera para entregar mañana, se me ocurren un par de cosas mucho menos relevantes que hacer una búsqueda binaria antes que n x n secuenciales, como que me parece que sólo necesitas cargar en memoria y ordenar el segundo archivo, y el primero podés ir leyéndolo línea por línea así como está.
Otra cosa que puede mejorar los tempos un poquito más es tratar de evitar los realloc, lo más posible. Por ejemplo, quizá puedas leer las líneas del segundo archivo y ponerlas en un array de tamaño predeterminado; la cantidad de líneas la podés obtener dividiendo el largo del archivo por la longitud de cada línea. Ese arrya de cadenas pude ocupar un poco más de memoria, pero por un lado estarías cargando en memoria un solo archivo y no dos, y por el otro, la diferencia vale la pena en términos de "performance".

Si se tratara de mis prioridades y mis tiempos, yo dedicaría: dos días al tema "ordenación y búsqueda" (lecturas, desarrollo de ejemplos, comparaciones); un día para acomodar mi programa a lo nuevo que haya aprendido; un día para corregir y optimizar; 2 horas más para anotar y comentar mis conclusiones. Y con eso, y un par de oportunidades donde aplicar lo aprendido, ya me quedaría en paz con el tema hasta la próxima oportunidad.