Profesor | Ulises Rodríguez Domínguez | ma ju | 16 a 17:30 | |
Ayudante | Jesús Enrique Robles López | lu mi | 15 a 16 | |
Ayud. Lab. | Julio Vázquez Álvarez | lu mi | 16 a 18 | Laboratorio de Ciencias de la Computación 2 |
Estructuras de Datos
Semestre 25-01
Profesor: | Ulises Rodríguez Domínguez | Horario del curso: | Ma Jue 16:00 – 17:30 hrs. | |
( ulises.rodriguez.dominguez@ciencias.unam.mx ) | ||||
Ayudante: | Jesús Enrique Robles López | Horario de ayudantías: | Lu Mi 15:00 – 16:00 hrs. | |
( jesus.robleslopez@ciencias.unam.mx ) | ||||
Ayudante Lab.: | Julio Vázquez Álvarez | Horario de Lab.: | Lu Mi 16:00 – 18:00 hrs. | |
( julio.vazquez@ciencias.unam.mx ) |
Página del curso:
Se enviará un enlance a los(as) alumnos(as) inscritos(as).
Horas de oficina: agendar en caso requerido.
Temario:
Tipos de datos abstractos y conceptos de programación orientada a objetos (POO)
Tipos de datos abstractos (TDAs) y estructuras de datos
POO: clase, objeto, encapsulación, acoplamiento y cohesión.
Elementos de complejidad algorítmica
Análisis asintótico, notación O( ).
Recurrencias.
Elementos de corrección de algoritmos
Pruebas basadas en invariantes.
Pruebas basadas en un TDA.
Arreglos
Polinomios de direccionamiento, vectores de Iliffe.
Arreglos empacados.
Recursión
Estrategia divide y vencerás, solución de problemas mediante recursión.
Búsqueda con retroceso mínimo (backtracking).
Listas
TDA lista, operaciones y complejidad.
Variantes de una lista.
Pilas y colas
TDA pila, operaciones y complejidad.
TDA cola, operaciones y complejidad.
Árboles
Conceptos y TDA
Árboles binarios
Árboles de búsqueda binarios
Árboles de búsqueda balanceados
Árboles AVL.
Árboles rojinegros.
Funciones de dispersión (hash)
Motivación, diseño y manejo.
Heaps
Conceptos, TDA, operaciones y complejidad.
Algoritmos de ordenamiento
Inserción, selección, burbuja y análisis de complejidad.
Shellsort, Heapsort, Quicksort, Mergesort y análisis de complejidad.
Algoritmos en grafos
Representación y complejidad en el espacio.
Recorridos en amplitud (BFS) y a profundidad (DFS).
Algoritmos de Dijkstra y Floyd para las rutas más cortas.
Bibliografía:
Carrano, Frank M. y Janet J. Prichard, Data Abstraction and Problem Solving with Java, 2a ed., Addison Wesley, 2005.
Goldman Sally y Kenneth J. Goldman, A Practical Guide to Data Structures and Algorithms Using Java, Chapman & Hall - CRC Press, 2007.
Peláez, Canek, Estructuras de Datos con Java Moderno: Comportamiento + Objetos = Programas. Las Prensas de Ciencias, Facultad de Ciencias, UNAM, México, 2018.
Skiena, Steven S., The Algorithm Design Manual, 2a ed. Springer, 2008.
Brass, Peter, Advanced Data Structures, Cambridge University Press, 2008.
Preiss, Bruno R., Data Structures and Algorithms with Object-Oriented Design Patterns in Java, Wiley, 1999.
Evaluación:
Mini-cuestionarios | 10% |
Tareas | 20% |
Prácticas | 30% |
Proyecto final | 15% |
Exámenes parciales | 25% |
Políticas del curso:
Se utlizará Google Classroom como la plataforma para subir las sesiones del curso así como para entregar las tareas, prácticas y proyectos.
A menos que se indique lo contrario, todas las tareas y prácticas se llevarán a cabo de manera individual. Sin embargo es válido discutir acerca de las mismas con otros compañeros(as) sin que ello implique pedir o copiar respuestas.
Se considerará Java como lenguaje de programación para la primera parte del curso. Para la segunda parte del curso se podrá seguir utilizando Java pero se fomentará el uso de Python.
Deshonestidad académica: Si se detectan copias entre alumnos(as) la calificación se dividirá entre el número de alumnos(as) involucrados(as). Si se detectan copias de recursos en línea o elaboración de trabajos por parte de gente externa, la calificación del trabajo correspondiente será de cero.