6 de abril - 12 de abril
Perfilado de sección
-
-
Algoritmos de búsqueda y sus complejidades algorítmicas
- Búsqueda lineal y heurísticas de optimización
- Búsqueda binaria
- Búsqueda por interpolación lineal
- [Holísticos] Jerarquía de memoria y sistema de archivos
-
La búsqueda es una de las operaciones más fundamentales y frecuentes en computación. Desde localizar un contacto en el teléfono hasta verificar si un DNI existe en una base de datos de millones de registros, buscar un elemento dentro de una colección es un problema que aparece en prácticamente todo programa.
En las semanas anteriores hemos utilizado búsquedas implícitas dentro de nuestros patrones de procesamiento de secuencias (por ejemplo, al recorrer una secuencia buscando un divisor o verificando una condición). Esta semana formalizamos la búsqueda como algoritmo explícito, lo encapsulamos en funciones (aplicando la modularización de la Semana 4) y analizamos rigurosamente su eficiencia.
-
Los problemas de esta semana ponen en práctica los algoritmos de búsqueda y la notación O grande presentados en la clase teórica. El eje temático es la implementación correcta, la optimización y la comparación experimental de distintas estrategias de búsqueda, midiendo tiempos de ejecución con el módulo time de Python y generando datos de prueba con el módulo random.
Los seis problemas están organizados en tres bloques con conexiones deliberadas: los Problemas 1 y 2 implementan y validan los algoritmos fundamentales (búsqueda lineal y búsqueda binaria); los Problemas 3 y 4 incorporan las optimizaciones de búsqueda lineal (Move-to-Front, Transposición) y la búsqueda por interpolación; el Problema 5 diseña un experimento comparativo completo con generación pseudoaleatoria de datos y medición de tiempos; el Problema 6 es un desafío de extracursado que analiza el impacto de la distribución de datos en la búsqueda por interpolación.
-
-
-
Los archivos de entrega (archivos .py o .zip) están designados por la secuencia de apellidos de los integrantes del grupo responsable en orden alfabético. Cada grupo debe descargar el archivo del grupo que le sigue en forma circular dentro de la carpeta de su curso, y publicar (sólo uno de sus miembros) en este foro un análisis del programa, realizado también en forma colaborativa con su propio grupo.
Deben reportar:
- Si el programa principal o función main() y las funciones tienen los docstrings (secciones declarativas) iniciales describiendo el análisis y el diseño correspondiente: objetivo del programa o contrato de la función (análisis) y reporte de variables (nombre, tipo y para qué se usa -diseño).
- Si las secciones de código del programa y de las funciones están documentadas con comentarios de encabezamiento de subsecciones que anuncian su objetivo o con comentarios de fin de línea explicando lo que resuelven instrucciones significativas o secuencias de instrucciones de estructuras de control. Se debe poder hacer un seguimiento o traza de ejecución de programas y funciones mediante la documentación interna (programación literaria).
- Si las funciones están al comienzo de la sección de código, antes del programa principal o función main(), y antes de cualquier otra función que las invoque.
- Si los nombres de variables son mnemónicos, es decir, claramente indicativos de los valores que representan.
- Si el programa es correcto y completo, es decir, si cumple todas las especificaciones del enunciado con eficacia.
- Si la interfaz del programa es amigable: los resultados deben estar bien presentados y descriptos.
- Si hay una evaluación de resultados, sea mediante documentación interna o impresión en pantalla.
- Si recomiendan una o más cambios para mejorar la legibilidad o la eficiencia del programa o funciones.
Estructurar el reporte enumerando cada uno de los aspectos en el mismo orden en que se presentan e indicando si el programa cumple con la convención y, en caso negativo, indicar los defectos.
En caso de no haber acuerdo en el grupo sobre el cumplimiento de algún aspecto del programa que se está analizando, personalizar las divergencias individualizando qué miembros del grupo corrector opinan en un sentido o en otro.
En caso de que recomienden cambios en el código en atención del punto 8, pueden describirlos como respuesta textual a ese punto o pueden adjuntar el programa revisado con comentarios agregados en forma localizada para indicar los cambios sugeridos.
El límite para completar esta actividad es el 24/4 a las 23:59.
-