Atributos
Sigla: 
CI-0116
Créditos: 
4
Horas: 
5
Clasificación: 
Curso propio
Énfasis y ciclo: 
Tronco común 2.I
Descripción: 

Existen diversas formas de solucionar computacionalmente un problema, lo que conduce al dilema de escoger la más adecuada. Hay diferentes aspectos que se pueden evaluar para hacer tal escogencia. En este curso se enseña a calcular la complejidad espacio-temporal de una solución, con el fin de resolver un problema eficientemente. También se enseñan modelos matemáticos, tipos de datos abstractos, estructuras de datos y algoritmos clásicos, haciendo especial énfasis en la complejidad espacio-temporal de las implementaciones.

Objetivo general: 

El objetivo general del curso es que el estudiante aprenda familias de algoritmos, tipos de datos abstractos y estructuras de datos asociados a modelos matemáticos, y analice su complejidad espacio-temporal para compararlos en términos de su eficiencia.

Objetivos específicos: 

Durante este curso el estudiante desarrollará habilidades para:

  1. Usar modelos matemáticos, tipos de datos abstractos, estructuras de datos y algoritmos clásicos para resolver problemas.
  2. Demostrar la correctitud de un algoritmo iterativo, aplicando las técnicas correspondientes
  3. Analizar el comportamiento asintótico del tiempo de ejecución y del espacio requerido por un algoritmo o una estructura de datos para determinar su eficiencia.
  4. Diseñar e implementar estructuras de datos y algoritmos eficientes, para hacer un uso apropiado de los recursos computacionales.
  5. Diseñar e implementar algoritmos eficientes para resolver problemas de optimización.
Contenidos: 
Objetivo específico Eje temático Desglose
1,4 Modelos matemáticos, tipos de datos abstractos y estructuras de datos. Definiciones, propiedades y diferencias entre ellos.
2 Demostración de la correctitud de algoritmos iterativos Invariante de un ciclo. Pasos de inicialización, mantenimiento y terminación.
3 Complejidad espaciotemporal de un algoritmo. Cálculo del orden de duración de algoritmos recursivos, iterativos y con llamados a métodos o funciones, en el peor caso, caso promedio y mejor caso. Resolución de relaciones de recurrencia.
1,3,4 Modelos y tipos de datos abstractos Listas, pilas, colas, árboles, conjuntos, diccionarios, colas de prioridad, relaciones y grafos. Operadores básicos, implementaciones, algoritmos asociados, aplicaciones, complejidad espacio-temporal de los algoritmos y sus implementaciones.
1,3,4 Estructuras de datos Arreglos, listas enlazadas, árboles parcialmente ordenados, árboles de búsqueda binaria, árboles balanceados, tablas de dispersión. Estructuras de datos para la implementación de árboles, grafos y relaciones. Complejidad espacio-temporal.
1,3,4 Algoritmos de ordenamiento Ordenamiento de burbuja, ordenamiento por selección, inserción, mezcla, montículos, residuos y ordenamiento rápido (quicksort), y su complejidad espacio-temporal.
1,3,5 Técnicas de resolución de problemas Divide y vencerás, búsqueda exhaustiva, programación dinámica, algoritmos ávidos, y su complejidad temporal.
1,3,4 Algoritmos para grafos Recorridos en anchura y en profundidad, árboles recubridores mínimos, rutas más cortas, y su complejidad espacio-temporal.
Bibliografía: 
  1. Cormen, T. H., Leiserson, C. E., Rivest, R. L. y Stein, C. Introduction to Algorithms, III ed. MIT Press, 2009.
  2. Aho, A. V., Ullman, J. D. y Hopcroft, J. E. Estructuras de Datos y Algoritmos. AddisonWesley Iberoamericana, 1988.
  3. Brassard, Gilles y Bratley, Paul. Fundamentos de Algoritmia. Prentice Hall. 1997.
  4. Heileman, Gregory. Estructuras de Datos, Algoritmos y Programación Orientada a Objetos. McGraw Hill. 1998.
  5. Sedgewick, Robert. Algoritmos en C++. Pearson Education. 1995
LIberación de responsabilidad: 

Este no es un documento oficial. Documentos oficiales se entregan en la secretaría de la escuela.