Año académico:

Anuncio
Asignatura:
Código:
Año académico:
Centro:
Departamento:
Área:
Estructuras de datos y algoritmos
040002103
2007/2008
Escuela Politécnica Superior
Lenguajes y Computación
Lenguajes y Sistemas Informáticos
Titulación:
Ciclo:
Cuatrimestre:
Créditos teóricos:
Ingeniería Técnica en Informática de Sistemas
Primero
Curso:
Primero
Carácter:
4,5
Créditos prácticos:
Segundo
Troncal
4,5
Profesorado: Antonio Leopoldo Corral Liria y Francisco Guil Reyes
Objetivos Generales:
• Valorar la importancia de la programación con Tipos Abstractos de Datos (TAD) como base del
diseño modular, diferenciando los conceptos de especificación e implementación de un TAD.
• Estudiar y realizar las implementaciones de los TAD a partir de su especificación, utilizando el
paradigma de la POO y, en concreto, el lenguaje de programación C++ y las STL.
• Conocer las estructuras de datos fundamentales y los algoritmos principales que se utilizan para su
manipulación. Todo ello, extendiendo los conocimientos adquiridos en la asignatura de
Metodología de la Programación cursada en primer curso.
• Tener la capacidad de elección de la estructura de datos adecuada para cada tipo de problema, y los
algoritmos más eficientes que la gestionan.
• Saber decidir entre dos o más algoritmos similares aplicados a una misma estructura de datos sobre
la base de la eficiencia de cada una de ellos.
• Aprender a combinar diferentes estructuras de datos para resolver problemas complejos.
Conocimientos Previos Recomendados:
Haber cursado y superado las asignaturas troncales de primer curso: Introducción a la Programación y
Metodología de la Programación
Contenidos teóricos (Temporización):
TEMA 1 Tipos Abstractos de Datos (3 horas)
1.1 Estructuras de datos
1.2 Tipos Abstractos de Datos (TAD)
1.3 Especificación algebraica de un TAD
1.4 TAD genéricos
1.5 Paso de la especificación a la implementación de TAD
1.6 Implementación de TAD: La librería estándar de plantillas (STL)
TEMA 2 Contenedores e Iteradotes (3 horas)
2.1 Contenedor simple
2.2 Tablas
2.3 Contenedores asociativos
2.4 Iteradores
TEMA 3 TAD Lineales (9 horas)
3.1 Análisis de algoritmos aplicado a las estructuras de datos
3.2 Concepto y especificación de estructura lineal
3.3 El TAD snack (pila)
3.4 El TAD Queue (cola)
3.5 El TAD Vector (vector)
3.6 El TAD List (lista)
3.7 El TAD Sequence (secuencia)
TEMA 4 El TAD Tree (12 horas)
4.1 Conceptos y terminología básica. TAD Tree
4.2 Árbol binario (BinaryTree). Especificación e implementación
4.3 Recorridos sobre árboles binarios
4.4 Árboles binarios de búsqueda (BinarySearchTree)
4.5 TAD PriorityQueue (cola de prioridad) y montículos (Heaps)
4.6 Árboles binarios de búsqueda equilibrados: AVLTree y Red-Black Tree (RBTree)
4.7 Árboles de búsqueda multicamino: B Tree
TEMA 5 El TAD Graph (12 horas)
5.1 Conceptos y terminología básica. TAD Graph
5.2 Especificación e implementación de grafos
5.3 Recorridos sobre grafos
5.4 Conectividad
5.5 Ordenación topológica
5.6 Caminos de coste mínimo sobre grafos
5.7 Árbol de recubrimiento de coste mínimo
TEMA 6 El TAD Dictionary (6 horas)
6.1 Conceptos y terminología básica. TAD Dictionary
6.2 Especificación e implementación
6.3 Tabla dispersa
6.4 Funciones de dispersión
6.5 Resolución de colisiones
6.6 Aspectos de la implementación
6.7 Contenedores asociativos: set y map
Contenidos prácticos (Temporización):
Práctica I. Aspectos generales de programación en C++ (6 horas)
Práctica II. TAD lineales (9 horas)
Práctica III. TAD Tree (12 horas)
Práctica IV. TAD Graph (12 horas)
Práctica V. TAD Dictionary. Tablas Hash (6 horas)
Bibliografía:
Bibliografía Básica
Zenón José Hernández Figueroa y otros. Fundamentos de estructuras de datos. Soluciones en Ada, Java
y C++. Thomson. 2005.
Larry R. Nyhoff. TADs, estructuras de datos y resolución de problemas con C++. Pearson-PrenticeHall. 2005.
Luis Joyanes Aguilar, Lucas Sánchez García, Ignacio Zahonero Martínez. Estructuras de datos en C++.
McGraw-Hill. 2007.
Elliot B. Koffman, Paul A.T. Wolfgang. Objects, abstraction, data structures and design using C++.
John Wiley & Sons, Inc. 2003.
Bibliografía Complementaria
Osvaldo Cairó, Silvia Guardati. Estructuras de datos. McGraw-Hill. 2006.
Román Martínez, Elda Quiroga. Estructuras de datos. Referencia práctica con orientación a objetos.
Thomson-Learning. 2002.
Narciso Martí Oliet, Yolanda Ortega Mallén, José A. Verdejo López. Estructuras de datos y métodos
algorítmicos. Ejercicios resueltos. Pearson-Prentice-Hall. 2004.
Luis Joyanes Aguilar, Matilde Fernández Azuela, Lucas Sánchez García, Ignacio Zahonero Martínez.
Estructuras de datos en C (Serie Schaum). McGraw-Hill. 2005.
John Lewis, Joseph Chase. Estructuras de datos con Java. Diseño de estructuras y algoritmos. PearsonAddison-Wesley. 2006.
Adam Drozdek. Data structures and algorithms in C++. Thomson. 2005.
Michael T. Goodrich, Roberto Tamassia, David M. Mount. Data structures and algorithms in C++. John
Wiley & Sons, Inc. 2003.
Mark Allen Weiss. Data structures and problem solving using C++. Addison-Wesley. 2000.
Fco. Javier Ceballos. Programación orientada a objetos con C++. Ra-Ma. 2003.
Metodología:
Clases teóricas: Clase magistral apoyada por un entorno multimedia para realizar presentaciones (método
de trabajo para grandes grupos).
También se destinarán algunas horas para resolver problemas propuestos (clases de problemas).
Clases prácticas: Clases de laboratorio apoyadas por un entorno multimedia para aclarar y fortalecer los
conocimientos de los alumnos (método de trabajo para grupos limitados).
Plan de acción tutorial:
Un buen sistema docente es aquel en el que la enseñanza está basada en una estrecha relación tutor-alumno.
La finalidad de las tutorías es proporcionar al alumno un medio de contactar directo e individualizado con
el profesor. Las tutorías serán horas extraordinarias (6 semanales) fijadas al principio de curso en un horario
en el que la mayoría de los alumnos puedan asistir, y de carácter no optativo. En este tiempo, el alumno
puede aclarar las dudas que le han surgido durante el estudio, profundizar en aquellos puntos que tengan
especial interés etc.
Evaluación:
Convocatoria de Febrero
Para aprobar la asignatura en esta convocatoria, el alumno deberá aprobar la parte teórica y cada una de las
pruebas prácticas de forma independiente. El alumno deberá también asistir obligatoriamente a las clases de
laboratorio. Las prácticas serán individuales o en parejas como máximo. Durante el cuatrimestre se
realizarán varias pruebas prácticas usando el lenguaje de programación C++. Una vez finalizada cada
práctica, se citarán rigurosamente a los grupos para que dichos miembros defiendan la práctica ante el
profesor en horas de tutorías o en las clases de prácticas (al final de las sesiones).
Calificación Final: Examen teórico-práctico (evaluado sobre 10 puntos), que constituye el 100% de la nota
final, ya que dicha prueba consta de una parte teórica y una parte práctica (ejercicios teóricos y de
implementación). Cada parte debe de aprobarse separadamente.
Pruebas de prácticas: Será necesario superar las pruebas de prácticas para poder aprobar la asignatura.
Resto de convocatorias
Para aprobar la asignatura en estas convocatorias, se realizará un único examen escrito teórico-práctico con
una valoración máxima de 10 puntos. A los alumnos que hubieran superado las prácticas se les conservarán
para sucesivas convocatorias.
Observaciones:
Descargar