Descripción general |
Cuando se trabaja con datos, sobre todo en gran volumen, es fundamental que los algoritmos que se utilizan para manipularlos sean eficientes, tanto para minimizar el uso de recursos como, en ocasiones, para garantizar la propia viabilidad del procesado. En esta asignatura se tratan los fundamentos necesarios tanto para analizar la eficiencia de algoritmos existentes sobre un caso dado, permitiendo así elegir el más adecuado, como para diseñar nuevos algoritmos. Lo primero se enfoca mediante el análisis de coste espacial y temporal con la notación O grande. Lo segundo se trata a través de los diferentes paradigmas genérico de diseño de algoritmos, como algoritmos voraces, programación dinámica o divide y vencerás; amén de un tratamiento más específico para ámbitos típicos de interés para el científico o ingeniero de datos, como son la búsqueda, ordenación o exploración de grafos. Se ven también fundamentos de complejidad computacional y algoritmos aproximados para aquellos casos en los que una implementación eficiente no es viable.
Esta asignatura pone broche final al bloque de "Programación y Algoritmos" del Grado, y por ello deberían cursarse anteriormente las asignaturas de Fundamentos de Programación I e II, cuyos conceptos se utilizan aquí. Fuera del bloque, también son necesarios los conceptos de Matemática Discreta. A su vez, y dado que los algoritmos son piedra angular de cualquier procesado de datos, esta asignatura proporciona conceptos que se usarán en asignaturas posteriores, incluyendo las de Aprendizaje Automático, Recuperación de Información, Procesamiento de Imagen, Vídeo y Audio, Procesamiento del Lenguaje Escrito, Procesamiento Paralelo, así como otras posteriores en el plan de estudios. |