Rodrigo A. Castro Campos >

1151042 - Algoritmos y Estructuras de Datos

Instructor: Rodrigo Alexander Castro Campos.
Trimestre: 2023-P.

Grupos: CSI01 y CSI02.
Horario: lunes, miércoles y viernes; CSI01 de 8:30 a 10:00 y CSI02 de 10:00 a 11:30.
Salón: Edificio T, Sala Byron.

Contenido oficial del curso:
  • Tipos de datos abstractos y estructuras dinámicas.
  • Recursividad y eficiencia.
  • Estructuras para listas.
  • Estructuras para árboles.
  • Estructuras para gráficas.
  • Algoritmos de búsqueda interna.
  • Algoritmos de ordenamiento interno.
Calificación:

Habrán diez tareas con un valor de 10 puntos cada una y tres exámenes. El curso se impartirá en el lenguaje C++. Las tareas consistirán en escribir programas para la plataforma omegaUp que resuelvan el problema de programación indicado para la evaluación. Sus datos deberán enviarse mediante este formulario antes de la entrega de la primera tarea. No se calificarán programas de ninguna otra forma. Cada tarea estará disponible con al menos una semana de anticipación con respecto a la fecha de entrega. Los exámenes serán escritos y consistirán en la implementación de subrutinas en lenguaje C o C++ que resuelvan el o los problemas especificados. Los exámenes se llevarán a cabo de manera presencial en tiempo de clase y tendrán una duración máxima de 15 minutos. La fecha de cada examen se anunciará con al menos una clase de anticipación. No habrá evaluación terminal.

Es requisito para aprobar el curso obtener un promedio de exámenes aprobatorio. Cumpliendo eso, la calificación final se obtiene de sumar los puntos provenientes de las tareas. La escala de calificación en acta es:
  • Al menos 60 puntos para acreditar con S.
  • Al menos 73 puntos para acreditar con B.
  • Al menos 87 puntos para acreditar con MB.

De acuerdo al Reglamento de Alumnos de la UAM, es falta de los alumnos en contra de la institución el suplantar o permitir ser suplantado en la realización de actividades académicas y se impondrá desde amonestación escrita hasta suspensión por dos trimestres. Los alumnos que incurran en esta falta no tendrán derecho a aprobar el curso.

Pueden consultar esta lista de problemas de "Programación Estructurada" para que practiquen.
Pueden consultar esta lista de problemas de "Algoritmos y Estructuras de Datos" para que practiquen.

Pueden consultar una lista de programas de ejemplo de los temas del curso.

Calendario: El siguiente calendario es tentativo y podrá cambiar a lo largo del curso.

Cuando exista más de una versión para una tarea, basta con que resuelvan una de ellas.
No se otorgarán puntos adicionales por resolver varias versiones.

  • 07/08: Presentación del curso. Introducción a omegaUp 1, 2. Prueba diagnóstica.
  • 09/08: Algoritmia y eficiencia. Problemas de ejemplo 1, 2.
  • 11/08: Introducción a C++. Problema de ejemplo. Tarea 1 para el 21/08. Envíos aceptados.
  • 14/08: La pila del proceso, paso por valor y por referencia.
  • 16/08: Recursión y sus aplicaciones. Problema de ejemplo.
  • 18/08: Apuntadores, direcciones de memoria y secuencias. Tarea 2 para el 28/08. Envíos aceptados.
  • 21/08: Algoritmos sobre secuencias.
  • 23/08: Búsqueda lineal y paso de predicados. Ejemplos previos al examen 1 y posibles soluciones.
  • 25/08: Búsqueda binaria en secuencias ordenadas. Problema de ejemplo. Tarea 3 para el 04/09. Envíos aceptados.
  • 28/08: Búsqueda binaria en la biblioteca de C++. Problema de ejemplo.
  • 30/08: Algoritmos de ordenamiento de secuencias. Tarea 4 para el 11/09. Envíos aceptados.
  • 01/09: Algoritmos de ordenamiento de secuencias.
  • 04/09: Predicados de ordenamiento. Examen 1.
  • 06/09: Predicados de ordenamiento. Regiones de memoria. Problema de ejemplo.
  • 08/09: Uso del almacenamiento libre.
  • 11/09: Arreglos como contenedores de tamaño fijo.
  • 13/09: Relocalización de arreglos dinámicos.
  • 15/09: Día de descanso obligatorio.
  • 18/09: Contenedores de C++ y semántica por valor. Tarea 5 para entrega el 29/09. Envíos aceptados.
  • 20/09: Estructuras de datos. Dobles colas. Tarea 6 para entrega el 02/10. Envíos aceptados.
  • 22/09: Iteradores. Pilas y colas. Ejemplos previos al examen 2 y posibles soluciones.
  • 25/09: Adaptadores para pilas y colas en C++. Introducción a listas enlazadas.
  • 27/09: Listas enlazadas nulo-terminadas y listas enlazadas circulares.
  • 29/09: Listas enlazadas de la biblioteca de C++. Examen 2. Tarea 7 para entrega el 09/10. Envíos aceptados.
  • 02/10: Colas de prioridad y montículos binarios. Tarea 8 para entrega el 23/10.
  • 04/10: Conjuntos ordenados y árboles binarios de búsqueda.
  • 06/10: Implementación de árboles binarios de búsqueda. Ejemplos previos al examen 3 y posibles soluciones.
  • 09/10: Árboles binarios de búsqueda balanceados.
  • 11/10: Árboles binarios de búsqueda en la biblioteca de C++. Tarea 9 para entrega el 23/10.
  • 13/10: Introducción a gráficas y sus aplicaciones.
  • 16/10: Representaciones de gráficas y recorridos. Examen 3. Tarea 10 para entrega el 23/10.
  • 18/10: Caminos más cortos y árboles abarcadores de costo mínimo.
  • Calificaciones finales.
Entornos de programación que pueden usar localmente:
Entornos de programación que pueden usar en línea:
Bibliografía:
  • Castro Campos. Notas de curso (se irán actualizando conforme avance el trimestre).
  • Aho A., Ullman J., Hopcroft J., "Estructuras de datos y algoritmos", Pearson.
  • Kernighan B., Ritchie D., "El lenguaje de programación C", Pearson.
  • Knuth D., "The Art of Computer Programming: Vol. 3 Sorting and Searching", Addison Wesley.
  • Llana L., et al., "Ejercicios de programación creativos y recreativos en C++", Prentice Hall, 2002.
  • Sedgewick R., "Algoritmos en C++", Pearson.
  • Stroustrup, B., "The C++ Programming Language", Addison-Wesley, 2013.
Enlaces de interés: