Estructuras de Datos y Algoritmos (2010)
Topic outline
-
Profesores
Michael González Harbour
Departamento de Matemáticas, Estadística y Computación
El principal objetivo de este curso es conocer los fundamentos del diseño, análisis e implementación de estructuras de datos básicas y de sus algoritmos de manipulación, aplicando los principios de abstracción y descomposición orientada a objetos. Asimismo se pretende conocer las principales aplicaciones de las estructuras de datos básicas. El lenguaje de programación en el que se basa el curso es Java. El material se estructura en dos partes: en la primera se definen las principales estructuras de datos abstractas y se analizan desde la perspectiva del usuario; en la segunda parte se profundiza en las técnicas de implementación de estas estructuras de datos.
Palabras Clave de la Asignatura
Java, Estructuras de Datos, colas, pilas, árboles, Informática, algoritmos, Programación, listas, grafos
-
Datos identificativos de la Asignatura
-
Denominación: Estructuras de Datos y Algoritmos (2010)
-
Código:
-
Departamento: Departamento de Matemáticas, Estadística y Computación
-
Área de Conocimiento:
-
Tipo: Troncal
-
Curso y cuatrimestre: Segundo
-
Título: Grado en Ingeniería Informática
-
Centro: Facultad de Ciencias
-
Web:
-
Profesor responsable: Michael González Harbour
Programa de la asignatura
Objetivos de Estructuras de Datos y Algoritmos
- Conocer los fundamentos del diseño, análisis e implementación de estructuras de datos básicas
- Conocer los fundamentos del diseño, análisis e implementación de sus algoritmos de manipulación
- aplicando en ambos los principios de abstracción y descomposición orientada a objetos.
- Conocer las principales aplicaciones de las estructuras de datos básicas
Objetivos concretos: conocimientos
- Conocer las especificaciones abstractas de las principales estructuras de datos
- Conocer los principales algoritmos de manipulación de las estructuras de datos básicas
- Conocer las principales aplicaciones de las estructuras de datos básicas
- Conocer distintas técnicas de implementación de las estructuras de datos y sus propiedades
Objetivos concretos: Habilidades
- Ser capaz de aplicar los principios de abstracción a las estructuras de información
- Saber diseñar la estructura de datos más eficiente para un determinado problema, dados unos requisitos de coste temporal y espacial
- Ser capaz de implementar estructuras de datos básicas usando un lenguaje orientado a objetos
- Ser capaz de razonar sobre la eficiencia de las diferentes implementaciones de una estructura de datos
Programa
1. Introducción
- Estructuras de datos abstractas
- Eficiencia de las estructuras de datos
- Interfaces y herencia múltiple
- Estructuras de datos genéricas
- Colecciones
- Iteradores
- Relaciones de igualdad y orden
2. Estructuras de datos lineales
- Colecciones o bolsas
- Conjuntos
- Listas y vectores
- Pilas
- Colas
- Colas de prioridad
- Mapas
- Aplicaciones
3. Estructuras de datos jerárquicas
- Árboles
- Recorrido y ordenación de los nudos
- El ADT árbol
- Árboles binarios
- Búsquedas en árboles binarios
- Aplicaciones
4. Grafos y caminos
- Concepto de grafo
- Definiciones
- La interfaz de las aristas
- La interfaz de los grafos
- Recorridos y búsquedas
- El problema del camino mínimo con y sin pesos
- Grafos acíclicos
- Aplicaciones
5. Implementación de Listas, Colas y Pilas
- Introducción a la implementación de estructuras de datos
- Pilas, colas y vectores implementados mediante arrays
- Implementaciones con listas enlazadas simples
- Listas enlazadas con cursores
- Listas doblemente enlazadas
6. Implementación de mapas, árboles y grafos
- Mapas y conjuntos implementados mediante tablas de troceado
- Técnicas de troceado abierto
- Técnicas de troceado cerrado
- Implementaciones de árboles
- Implementaciones de árboles binarios
- Árboles binarios equilibrados y conjuntos ordenados
- Árboles AVL
- Árboles rojinegros
- B-árboles
- Implementación de colas de prioridad y conjuntos ordenados mediante montículos binarios
- Implementación de grafos
-
-
Bibliografía Básica
- Mark A. Weiss. “Estructuras de datos en Java” Addison Wesley, 2000.
Bibliografía Complementaria
- S. Zakhour, S. Hommel, J. Royal, I. Rabinovitch, T. Risser, M. Hoeber, “The Java Tutorial Fourth Edition”. Pearson Education, 2006
- The Java Tutorials. http://java.sun.com/docs/books/tutorial/
- Aho, A.V., J.E. Hopcroft, J.D. Ullman, Estructuras de datos y algoritmos, Addison-Wesley, 1988.
- Arnold, K., J. Gosling, D. Holmes, El Lenguaje de Programación Java, 3ª Ed., Addison-Wesley, 2001.
- David A. Watt, Deryck F. Brown, “Java Collections”. Wiley, 2001
- Frank M. Carrano and Janet J. Prichard, “Data Abstraction and Problem Solvig with Java”, Addison Wesley, 2001
- Michell Waite, “Data Structures & Algorithms in Java”, Waite Group Press, 1998
-
- PR-F-001. Práctica 1. Herencia múltiple e iteradores. Material suministrado: Figura.java. CuadrilateroCircunscrito.java.
- PR-F-002. Práctica 2. Eficiencia de algoritmos. Plantilla para el informe
- PR-F-003. Práctica 3. ADT conjuntos. Plantilla para el informe.
- PR-F-004. Práctica 4. ADT listas. Plantilla para el informe
- PR-F-005. Práctica 5. ADT cola de prioridad. Plantilla para el informe
- PR-F-006. Práctica 6. ADT Mapa. Plantilla para el informe
- PR-F-007. Práctica 7. ADT Árbol. Plantilla para el informe
- PR-F-008. Práctica 8. ADT grafo. Plantilla para el informe
- PR-F-009. Práctica 9. Implementación con punteros. Plantilla para el informe
- PR-F-010. Práctica opcional. Implementación con tablas Hash. Plantilla para el informe. Software suministrado: PruebaConjunto.java
-
- PR-F-001. Problema 1: Uso de bolsas. Código
- PR-F-002. Problema 2: Eficiencia de algoritmos. Código
- PR-F-003. Problema 3. Uso de conjuntos. Código
- PR-F-004. Problema 4. Uso de listas. Código
- PR-F-005. Problema 5. Uso de pilas. Código
- PR-F-006. Problema 6. Uso de colas. Código
- PR-F-007. Problema 7. Uso de Mapas. Código
- PR-F-008. Problema 8. Uso de árboles. Código
- PR-F-009. Problema 9. Uso de árboles binarios. Código
-
Curso 2006-2007
Curso 2007-2008
Curso 2008-2009
Criterios de Evaluación
PROCEDIMIENTO ORDINARIO: evaluación mixta, con un 40% de peso correspondiente al trabajo continuo en las prácticas de la asignatura y un 60% al examen final de cuestiones y problemas.
PROCEDIMIENTO EXTRAORDINARIO: previsto para la evaluación de Septiembre; se podrá admitir en la convocatoria de Junio en casos excepcionales y justificados (estudiantes a tiempo parcial, enfermedad, etc.) una evaluación única de las prácticas en el laboratorio, mediante un examen de prácticas. A este examen se podrá optar tras la entrega de los informes de las prácticas y ejercicios obligatorios de la asignatura. El examen final de cuestiones y problemas es el mismo que el del procedimiento ordinario. Los pesos de cada examen también (40% examen de prácticas, y 60% examen de cuestiones y problemas).
En ambos procedimientos es preciso superar por separado las prácticas y el examen de cuestiones y problemas.
Descripción de la evaluación continua: actividades que debe desarrollar el alumno y su valoración
La evaluación continua se realizará a través de la valoración de las prácticas y de la colección de ejercicios que deben ser resueltos por el alumno.
Criterios de evaluación de las prácticas:
a) Trabajo en el laboratorio
- Conocimientos: Conocimiento de los conceptos de algoritmos y del lenguaje Java
- Grado de Resolución: Grado de resolución de la práctica alcanzado durante las horas en el laboratorio.
b) Informes sobre las prácticas
- Especificación y diseño: Facilidad para especificar diseñar y comprender algoritmos.
- Estilo: Estilo de programación, claridad del código, documentación del código.
- Organización: Organización del informe, claridad en la exposición
- Fecha de entrega: Entrega del informe dentro del plazo marcado, con el objetivo de conseguir una evaluación realmente continuada.
El profesor de prácticas puede pedir que se muestre el correcto funcionamiento de la práctica en el laboratorio. Las prácticas cuyo informe se presente con retraso de hasta una semana tendrán un punto menos (sobre 10) y las de informes presentados con retraso entre una y dos semanas tendrán tres puntos menos. Las entregas pasadas dos semanas del plazo se calificarán con cero, pero su presentación es obligatoria.
Descripción del examen final (duración, se pueden llevar apuntes o no, tiene partes diferenciadas o no, se promedian teoría y problemas o no, etc).
El examen final escrito de cuestiones y problemas tiene como objetivo evaluar los conocimientos teóricos y prácticos para que lo que se plantearán una serie de preguntas y ejercicios de mediana complejidad. La duración será de 180 minutos, más un descanso en medio. Se podrán utilizar apuntes y bibliografía.
El examen de prácticas del procedimiento extraordinario es un examen en el laboratorio con el objetivo de evaluar la capacidad del alumno de llevar a la práctica sus conocimientos. Tendrá una duración de tres horas en las que se pedirá el diseño de una estructura de datos especificada por el profesor, de una aplicación sencilla que la utilice, y su codificación en lenguaje de programación, utilizando los equipos del laboratorio.
Observaciones
Para superar la asignatura es preciso superar tanto el examen como las prácticas. La nota final estará compuesta por:
- 60% examen escrito de cuestiones y problemas
- 40% nota de prácticas
En caso de que una de estas partes no se supere, la nota final será el mínimo de 4.5 y la media obtenida.
En caso de aprobar únicamente una de las dos partes en la convocatoria de junio, se guardaría la nota de esa parte para septiembre.
Software
Entorno de desarrollo Bluej, con compilador Java de Sun, versión 6 o superior, y sistema operativo Linux.
Editor de texto emacs.
-
- Aquí puede descargar la Guía de Aprendizaje en formato pdf.
-
Michael González Harbour
Catedrático de Universidad
Departamento de Matemáticas,
Estadística y Computación