PONTIFICIA UNIVERSIDAD CATÓLICA MADRE Y MAESTRA FACULTAD DE CIENCIAS DE LA INGENIERIA DEPARTAMENTO DE INGENIERÍA EN SISTEMAS Y COMPUTACIÓN PROGRAMA DE ASIGNATURA Asignatura: Código: Estructuras de Datos Régimen: ISC-213-T Año/Período: 2do Año/ 3er Período Horas de Clases Área a la que pertenece: Lógica y algoritmia DISTRIBUCION DE HORAS DE CLASES Teóricas Prácticas Total General Horas % Materia Horas % Materia Horas % Materia 42 60% 28 40% 70 100% T P C 3 2 4 I-DESCRIPCIÓN GENERAL El estudio de las Estructuras de Datos está dirigido a que los estudiantes conozcan las características, ventajas y desventajas en su aplicación, para poder seleccionar las más adecuadas en la resolución de problemas computacionales. Específicamente en esta asignatura se analizan con mayor profundidad los tipos de datos abstractos (TDA), sus modelos matemáticos y representación en memoria. Se introduce a los estudiantes en el análisis de la complejidad algorítmica para el cálculo del tiempo de ejecución de los programas; se consolidan los conocimientos de las estructuras de datos lineales (específicamente Colas de Prioridad) y se inician los estudios de las estructuras de datos jerárquicas, conjuntos, grafos y tablas hash. La asignatura está enfocada a la aplicación de estas estructuras en la solución de problemas concretos; debe permitir que los estudiantes puedan tratar con problemas de gran escala y debe motivar a la investigación de los temas necesarios para resolver los problemas. Las prácticas de laboratorio se desarrollan sobre la base del diseño de aplicaciones utilizando el lenguaje de programación objeto de estudio. II-OBJETIVOS Objetivos Generales: Objetivos Específicos: 1. Proveer a los estudiantes del conocimiento acerca de las diferentes estructuras de datos de datos así como la terminología básica. 2. Que los estudiantes sean capaces de resolver problemas de la vida real utilizando una correcta estructura de datos teniendo en cuenta la eficiencia de la solución presentada. Que los estudiantes sean capaces de: 1. Reconocer las diferentes estructuras de datos de datos e identificar las bases de la eficiencia de cada una de ellas. 2. Identificar los criterios de evaluación de algoritmos y estructuras de 3. 4. 5. 6. datos y aplicarlos en la evaluación y selección de algoritmos y estructuras de datos para la resolución de un problema concreto. Juzgar la conveniencia del uso de una determinada estructura de datos para una situación determinada. Decidir entre dos o más soluciones algorítmicas similares sobre la base de la eficiencia de cada una de ellas. Combinar diferentes estructuras de datos para resolver problemas complejos. Implementar las operaciones básicas de un TAD mediante un lenguaje de programación. III-INTERRELACIÓN CON OTRAS ASIGNATURAS Prerrequisitos: ISC-212 Asignaturas que se aconseja debe haber cursado: ISC-219 MAT-111 IV-PROFESORADO Profesor responsable: Rodrigo Orizondo Claustro de profesores: V-METODOLOGÍA El curso será impartido a través de cátedras, desarrollo de prácticas y exposiciones que indicará el profesor. El proceso de aprendizaje será controlado a través de las prácticas, tareas y exámenes desarrollados durante el curso. Se aplica como metodología de Aprendizaje basado en Problemas. La distribución porcentual de los puntos asociados a las evaluaciones debe estar distribuido en: 70%(Eval. Parciales)+30%(Eval. Final). Las evaluaciones que cubran el 50% de los puntos de la asignatura deben realizarse previo a las fechas de retiro parcial y total. Los exámenes parciales tendrán una duración de 3-2 horas, deben ser confeccionados abordando contenidos teóricos y/o prácticos. Las tareas serán orientadas con 15 días de anticipación a la fecha de entrega programada y su evaluación estará dividida en dos partes: la entrega formal del trabajo y la exposición oral en el curso de las soluciones encontradas, valorando su eficiencia y claridad. La evaluación final (30%) deberá ser evaluada a través del desarrollo de un Proyecto Final Integrador, que involucre las asignaturas que el estudiante ha cursado, para lograr una vinculación y aplicación de los conocimientos adquiridos. El trabajo debe ser individual o como máximo grupos de 2 estudiantes; debe incluir la entrega de un documento (en el formato definido para la carrera) que describa el trabajo realizado y los ficheros de código fuente; la exposición de los trabajos debe realizarse a puertas abiertas con estudiantes y profesores del departamento como invitados. VI-PERFIL DEL EGRESADO Esta asignatura aporta al egresado los conocimientos teóricos y prácticos para la solución óptima de problemas utilizando una adecuada estructura de datos. Al finalizar la asignatura los estudiantes serán capaces de desempeñarse en roles involucrados al análisis, diseño e implementación de problemas reales que impliquen el desarrollo de software utilizando estructuras de datos avanzadas y orientación a objetos. Los estudiantes además podrán participar en actividades relacionadas con la optimización de procesos. Competencias logradas: - Capacidad de análisis y síntesis. - Capacidad de organización y planificación. - Capacidad de aplicar los conocimientos en la práctica. - Capacidad para trabajar en equipo. - Habilidad para trabajar de forma autónoma. - Capacidad para diseñar y debatir diferentes soluciones de un mismo problema. VII-CONTENIDO DE LA TEORÍA Lenguaje de programación propuesto: Java Tema 1. Complejidad Algorítmica. 1. Conceptos básicos. 2. Medidas de comportamiento asintótico. 3. Reglas prácticas para hallar el coste 4. Útiles matemáticos. Tema 2. Estructuras de datos jerárquicas. Árboles. 1. Fundamentos teóricos. 2. Terminología y representación de árboles. 3. Árboles binarios. Estructura de un árbol binario. 4. Árboles de expresión. Aplicaciones. 5. Recorridos de un árbol. 6. Árbol binario de búsqueda. Operaciones básicas. 7. Implementación mediante almacenamiento secuencial y por referencias. Análisis comparativo de eficiencia. 8. Árboles balanceados. Árboles AVL. Aplicaciones. 9. Árboles Rojo-Negro. Árboles 2-3-4. Árboles B. Aplicaciones. Tema 3. Colas de prioridades. 1. Conceptos y operaciones básicas 2. Montículos máximos y mínimos. 3. Ejercicios de aplicación sobre árboles. Tema 4. Conjuntos. 1. Definición del TDA. 2. Terminología y operaciones básicas. 3. Implementaciones sobre arreglos, vectores y listas enlazadas. Tema 5. Tablas Hash. 1. Transformación de claves (hashing). 2. Diccionarios. Implementaciones sobre Tablas hash abiertas y cerradas. 3. Implementación sobre árboles. 4. Ejemplos prácticos de aplicación del hashing. Tema 6. Grafos. 1. Grafos Orientados a. Concepto. Terminología básica. Representación gráfica. b. Recorridos y Operaciones fundamentales. c. Implementaciones basadas en matrices de adyacencias y listas de adyacencias. Análisis de la eficiencia. 2. Grafos no orientados. a. Concepto. Terminología básica. Representación gráfica. b. Recorridos y Operaciones fundamentales. c. Implementaciones basadas en matrices de adyacencias y listas de adyacencias. Análisis de la eficiencia. 3. Cálculo de spanning tree de costos mínimos. 4. Algoritmos avanzados sobre grafos: Warshall, Dijkstra, Floyd, Prim, Kruskal, búsqueda en anchura, búsqueda en profundidad, etc. 5. Ejemplos de aplicación: ordenación topológica, camino crítico, etc. VIII-GUIA DE LAS PRÁCTICAS Las clases de laboratorio tienen como objetivo central la adquisición de habilidades prácticas. Es importante tener en cuenta los objetivos y distribución de contenidos de la teoría, para planificar los laboratorios. Guía para los laboratorios: 1. Calculo del tiempo de ejecución de algoritmos. Análisis de eficiencia. 2. Resolución de problemas que apliquen las estructuras de datos jerárquicas. Árboles Binarios de Búsquedas, Árboles de Expresión, etc. 3. Resolución de problemas reales aplicando el concepto de Colas de Prioridades. 4. Implementación de Conjuntos. 5. Aplicación de Tablas Hash. 6. Grafos Orientados. 7. Grafos no Orientados. IX-EVALUACIÓN Normas de evaluación: Guía de Evaluaciones: La calificación final de cada estudiante será calculada sumando las calificaciones obtenidas en las prácticas, tareas, evaluaciones diarias, parciales y examen final. Los aspectos a evaluar en cada caso estarán regidos por: 1. La eficiencia de la solución presentada. 2. El cumplimiento del procedimiento establecido. 3. La entrega en el marco de tiempo fijado. 4. La presentación, claridad y organización a la entrega. 1ra Tarea 2da Tarea 3ra Tarea 4ta Tarea 5ta Tarea Resolución de problemas que apliquen las estructuras de datos jerárquicas. Árboles Binarios de Búsquedas y Árboles de Expresión. Resolución de problemas reales aplicando el concepto de Colas de Prioridades. Resolución de problemas aplicando el uso de Tablas Hash. Resolución de problemas aplicando Teoría de Grafos. Resolución de problemas que requieran algún Proyecto Final X-BIBLIOGRAFÍA Bibliografía Básica: Introduction to algorithms / Thomas H. Cormen [et al.]. (Cambridge : MIT Press, 3ra Ed. 2009) Método de Ordenación y almacenamiento en Ficheros. Evaluar eficiencia. Desarrollar una aplicación que aborde los contenidos estudiados en clase. El tema debe estar relacionado con las asignaturas que el estudiante ha cursado y/o aportes a la sociedad. Requerimientos mínimos: Utilización del paradigma de POO, almacenamiento en ficheros y una de las estructuras de datos estudiadas. Biblioteca Internet Bibliografía de Prácticas: Biblioteca Internet Bibliografía Complementaria: Estructuras de Datos y Algoritmos / Aho, A. V.; Hopcroft, J. E.; Ullman, J. D. (Addison Wesley Iberoamericana) Data Structures, Algorithms and Program Style Using C. James F. Korsh / Leonard J. Garrett Pws Pub Co (1988) Biblioteca Internet