Estructuras de Datos (2012)
Diagrama de temas
-
Profesores
Mario Aldea Rivas
Pablo Sánchez BarreiroDepartamento de Matemáticas, Estadística y Computación
La asignatura tiene como objetivo dar a conocer los fundamentos de análisis, diseño, implementación, verificación y pruebas de los tipos abstractos de datos básicos y más comúnmente utilizados en el desarrollo de aplicaciones informáticas. Además, el alumno/a aprenderá a usar dichos tipos abstractos de datos como base para la construcción de aplicaciones informáticas, sabiendo elegir según las particularidades de cada aplicación, aquél tipo abstracto de datos que resulte más adecuado, atendiendo principalmente a criterios de eficiencia espacial y temporal.
The goal of this subject is to make the student able to analyse, design, implement, verify and test basic abstract data types that are most frequently used for the development of software systems. Moreover, the student will learn how to use abstract data types as a cornerstone for the development of software systems, being able to select the abstract data type that is most suitable for an application according to its specific characteristics and considering as the temporal as the spatial efficiency.
Palabras Clave de la Asignatura
Queues, Tables, Tablas Hash, Hash, Estructuras de Datos, Algebraic Specifications, Colas, Pilas, Tablas de Dispersión, Lists, Stacks, Data Structures, Complexity, Complejidad Algorítmica, Trees, Abstract Data Types, Árboles, Tipos Abstractos de Datos, Especificaciones Algebraicas, Listas.
-
Datos identificativos de la Asignatura
-
Asignatura: Estructuras de Datos
-
Código: G651
-
Departamento / Área: Departamento de Matemáticas, Estadística y Computación
-
Título: Grado en Ingeniería Ingeniería Informática
-
Centro: Facultad de Ciencias
-
Créditos ECTS: 6
-
Idioma de impartición: Español
-
Profesores responsables: Mario Aldea Rivas y Pablo Sánchez Barreiro
Programa de la asignatura
1. Antecedentes
-
Tema 1.1. Modularidad e interfaces.
-
Tema 1.2. Relaciones de herencia: formas de implementar herencia múltiple.
-
Tema 1.3. Estructuras de datos genéricas.
-
Tema 1.4. Buenas prácticas de programación.
2. Complejidad algorítmica
-
Tema 2.1. Notación O(n).
-
Tema 2.2. Cálculo de complejidad en algoritmos iterativos.
-
Tema 2.3. Cálculo de complejidad en algoritmos recursivos.
3. Técnicas de implementación
-
Tema 3.1. Simples: vectores, enlazado mediante punteros y cursores.
-
Tema 3.2. Tabla hash: funciones de hashing. Técnicas de resolución de colisiones: abierto y cerrado. Implementación de tablas hash.
-
Tema 3.3. Estructuras arbóreas de búsqueda: árboles binarios y de búsqueda.
-
Tema 3.4. Árboles binarios equilibrados, árboles AVL y árboles rojinegros.
-
Tema 3.5. Implementación de árboles.
4. Concepto y especificación de Tipos Abstractos de Datos (TADs)
-
Tema 4.1. Concepto de Tipo Abstracto de Datos.
-
Tema 4.2. Especificación algebraica de Tipos Abstractos de Datos.
-
Tema 4.3. Implementación de Tipos Abstractos de Datos.
-
Tema 4.4. Relación especificación-implementación.
-
Tema 4.5. Maude: un entorno de reescritura lógica para la especificación de Tipos Abstractos de Datos.
5. Estructuras de datos lineales
-
Tema 5.1. Conjuntos, bolsas, listas y vectores.
-
Tema 5.2. Pilas, colas.
-
Tema 5.3. Tablas, aplicaciones o mapas.
-
Tema 5.4. Relaciones de orden: colas de prioridad.
-
Tema 5.5. Aplicaciones de las estructuras de datos lineales.
6. Estructuras de datos jerárquicas
-
Tema 6.1. El tipo abstracto de datos árbol.
-
Tema 6.2. Recorrido y ordenación de árboles.
-
Tema 6.3. Aplicaciones.
Programa de prácticas (2011-2012)
-
P.1. Introducción.
-
P.2. Complejidad algorítmica.
-
P.3. Tipos enumerados.
-
P.4. Polimorfismo y enlazado dinámico.
-
P.5. Listas e Iteradores.
-
P.6. Estructuras enlazadas.
-
P.7. Tablas de dispersión.
-
P.8. Árboles Binarios de Búsqueda.
-
P.9. Implementación de TADs.
-
P.10. Desarrollo de una mini aplicación utilizando TADs.
-
-
Básica
-
Ricardo Peña (2005): «Diseño de programas: formalismo y abstracción». Pearson Educacion. 3ª Ed. (Especificación Algebraica, Complejidad Algorítmica, TADs).
-
Bertrand Meyer (2000): «Construcción de software orientada a objetos». Prentice Hall. 2ª Ed. (Principios de Orientación a Objetos, TADs, Implementación de TADs).
-
Alfred V. Aho, Jeffrey D. Ullman & John E. Hopcroft (1988): «Estructuras de datos y algoritmos». Addison-Wesley.
Complementaria
-
Bertrand Meyer (2009): «Touch of class: learning to program well with objects and contracts». Springer. Septiembre. (Principios de Orientación a Objetos, TADs, Implementación de TADS).
-
Mark A. Weiss (2000): «Estructuras de datos en Java». Addison Wesley.
-
David A. Watt & Deryck F. Brown (2001): «Java collections». Wiley.
-
Frank M. Carrano & Janet J. Prichard (2001): «Data sbstraction and problem solving with Java». Addison Wesley.
-
Michell Waite (1998): «Data structures & algorithms in Java». Waite Group Press.
-
-
1. Programación imperativa
-
MC-F-001. Presentación del Tema 1.
-
MC-F-002. Diseño por contrato: desarrollo de software fiable.
-
MC-F-003. Lenguaje de pseudocódigo.
2. Fundamentos de complejidad algorítmica
-
MC-F-004. Presentación del Tema 2.
- MC-F-005. Procedimientos para calcular la complejidad de un algoritmo recursivo tipo divide y vencerás.
3. Técnicas de implementación
-
MC-F-006. Presentación del Tema 3. Parte 1: Lineales.
-
MC-F-007. Presentación del Tema 3. Parte 2: Tablas Hash.
-
MC-F-008. Presentación del Tema 3. Parte 3: Árboles.
-
MC-F-009. Presentación del Tema 3. Parte 4: Árboles binarios de búsqueda.
4. Concepto y especificación de Tipos Abstractos de Datos
-
MC-F-010. Presentación del Tema 4.
-
MC-F-011. Verificación de Propiedades de un Tipo Abstracto de Datos usando su Especificación Algebraica.
5. Tipos Abstractos de Datos Lineales
-
MC-F-012. Presentación del Tema 5.
6. Tipos Abstractos de Datos Jerárquicos
-
MC-F-013. Presentación del Tema 6.
-
-
Práctica 1. Introducción
-
PR-F-001. Práctica 1. Computando bajo el frío.
Práctica 2. Complejidad algorítmica
-
PR-F-004. Práctica 2. En fin Marcial, más corre el logaritmo que el lineal (actualizado).
Práctica 3. Tipos enumerados
-
PR-F-010. Práctica 3. Mis amigos los enumerados.
Práctica 4. Polimorfismo y enlazado dinámico
-
PR-F-016. Práctica 4. Una clase para ordenarlos a todos.
Práctica 5. Listas e iteradores
-
PR-F-019. Práctica 5. Lista implementada con Array. Iterador.
Práctica 6. Estructuras enlazadas
-
PR-F-020. Práctica 6. Listas doblemente enlazadas. Operaciones de acceso posicional.
Práctica 7. Tablas de dispersión
-
PR-F-021. Tabla de dispersión abierta. Operaciones básicas.
Práctica 8. Árboles binarios de búsqueda
-
PR-F-022. Árboles binarios de búsqueda. Operaciones básicas.
Práctica 9. Implementación de TADs
Práctica 10. Desarrollo de una mini aplicación utilizando TADs
-
PR-F-025. Práctica 10.0. Hogares inteligentes que no lo son tanto.
-
PR-F-026. Práctica 10.1. Directo al grano.
-
PR-F-027. Práctica 10.2. ¡¡Extra, Extra!! Un dispositivo ha cambiado su estado.
-
Página
-
Página
-
-
Práctica 1. Introducción
-
EP-F-001. Ejercicios del Tema 1.
Práctica 2. Complejidad algorítmica
Práctica 3. Tipos enumerados
-
EP-F-004. Ejercicios del Tema 3.
Práctica 4. Polimorfismo y enlazado dinámico
-
EP-F-005. Ejercicios del Tema 4.
Práctica 5. Listas e iteradores
-
EP-F-006. Ejercicios Clase Implementación TAD Cola.
-
EP-F-007. Solución ejercicios implementación.
-
EP-F-008. Ejercicios Clase usando TADs.
-
EP-F-009. Solución Ejerciciso usando TADs.
-
EP-F-010. Ejercicios Tema 5.
-
EP-F-011. Ejercicios Diseño Funciones Dispersión.
-
-
Tema 1. Programación imperativa
Ejemplos
-
OR-F-001. Módulo complejo (interfaz).
-
OR-F-002. Módulo complejo (implementación).
-
OR-F-003. Proyecto Java herencia múltiple.
- OR-F-004. Reutilización por composición.
Referencias
-
OR-F-005. «On the criteria to be used in decomposing systems into modules». (Parnas, 1972).
-
OR-F-006. Entrada Interesante sobre herencia en un Blog.
-
. Desastre Ariane 5 (vídeo).
- OR-F-008. «Design by contract: the lessons of Ariane». (Jezequel & Meyer, 2002).
Lecturas (muy) avanzadas
-
OR-F-009. «Doubts about the positive impact of static type systems on programming tasks in single developer projects - An empirical study». (Hanenberg).
-
OR-F-010. «An experiment about static and dynamic type systems». (Hanenberg).
-
OR-F-011. Disertación de Barbara Liskov sobre el «Poder de la abstracción».
-
OR-F-012. «Matters of (Meta-) modelling». (Khüne, 2006).
-
OR-F-013. «Can programming be liberated from the two-level style?: multi-level programming with DeepJava». (Khüne & Schreiber, 2007).
-
OR-F-014. «Object-oriented programming with flavors». (Moon, 1986).
-
OR-F-015. «A monotonic superclass linearization for Dylan». (Barrett et al).
-
OR-F-016. «Morphing: safely shaping a class in the image of others». (Huang et al).
- OR-F-017. «No silver bullet: essence and accidents of software engineering». (Brooks, 1987).
Herramientas
-
OR-F-018. «Contract4J: diseño por contrato para Java».
-
OR-F-019. ESC/Java2: verificación automática de programas (Wikipedia).
Tema 2. Fundamentos de complejidad algorítimica
Bibliografía y recursos
-
OR-F-020. «Fundamentos de algoritmia». (Brassard & Bratley).
-
OR-F-021. Gráficas con tasas de crecimiento.
-
OR-F-022. Lista de problemas NP completos (Wikipedia).
Tema 3. Técnicas de implementación
Ejemplos
-
OR-F-023. Clase lista enlazada (pseudocódigo).
-
OR-F-024. Ejemplo lista enlazada (Java).
-
OR-F-025. Ejemplo lista enlazada (C#).
- OR-F-026. Tabla Hash cerrada (orientada a objetos).
Recursos
-
OR-F-027. Implementación libre colecciones Java.
-
OR-F-028. Apuntes sobre Tablas Hash (Universidad de Granada).
-
OR-F-029. Animación sobre árboles binarios de búsqueda.
-
OR-F-030. Otra animación sobre árboles de búsqueda.
-
OR-F-031. Animación sobre árboles AVL.
-
OR-F-032. Animación sobre Árboles Rojinegros.
- OR-F-033. Clase magistral sobre árboles balanceados del MIT (Inglés).
Tema 4. Concepto y especificación de Tipos Abstractos de Datos
Ejemplos
-
OR-F-034. Especificación algebraica tipo Día-Semana.
-
OR-F-035. Especificación algebraica lista inserción cabeza.
- OR-F-036. Especificación algebraica conjunto.
Bibliografía y recursos
- OR-F-037. Algebraic implementation of abstract data types». (H. Ehrig, H.J. Kreowski, B. Mahr & P. Padawitz).
Lecturas (muy) avanzadas
-
OR-F-038. «The algebraic specification of abstract data types». (Guttag & Horning, 1976).
-
OR-F-039. «Limits of the "algebraic" specification of abstract data types». (Majster, 1977).
-
OR-F-040. «Formalizing design patterns: a case study for the iterator pattern». (Alfoudari & Steggles, 2002).
-
OR-F-041. «Abstract data types and software validation». (Guttag et al, 1978).
-
OR-F-042. «Formal specification and analysis of domain specific models using maude». (Rivera et al, 2011).
Tema 5. Tipos Abstractos de Datos Lineales
Especificaciones Algebraicas TADs Lineales
-
OR-F-043. Bolsas.
-
OR-F-044. Conjuntos.
-
OR-F-045. Secuencias.
-
OR-F-046. Secuencias sin repeticiones.
-
OR-F-047. Vector.
-
OR-F-048. Matriz.
-
OR-F-049. Pila (Stack).
-
OR-F-050. Cola (Queue).
-
OR-F-051. Secuencia ordenada.
-
OR-F-052. Secuencias sin repeticiones ordenada.
-
OR-F-053. Colas con prioridad.
- OR-F-054. Tabla (mapa, diccionario, aplicación).
TADs Lineales en lenguajes de programación actuales
Recursos
-
OR-F-058. «LZW data compression». (Nelson, 1989).
-
OR-F-059. Proyecto Java cálculo expresiones polaca inversa.
Tema 6. Tipos Abstractos de Datos Jerárquicos
Recursos
Lecturas (muy) avanzadas
-
OR-F-062. Binary Space Partition (BSP) (Wikipedia).
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
Página
-
-
Ejemplos de exámenes
Criterios de evaluación
MÉTODOS DE EVALUACIÓN "ESTRUCTURAS DE DATOS"
Descripción
Tipología
Evaluación final
Recuperación
%
Problemas y ejercicios
Trabajo
No
No
0%
-
Calificación mínima: 0,00.
-
Duración:
-
Fecha realización: A lo largo del curso.
-
Condiciones recuperación:
-
Observaciones: Problemas y ejercicios propuestos que podrán ser realizados de forma voluntaria por los alumnos/as. Su realización podrá suponer una mejora en la nota de prácticas.
Prácticas
Evaluación en laboratorio
No
Sí
5%
-
Calificación mínima: 0,00.
-
Duración: 2 horas por sesión.
-
Fecha realización: A lo largo del curso.
-
Condiciones recuperación: Entrega y presentación de las prácticas antes del Examen Final (la penalización por entrega fuera de plazo no es recuperable).
-
Observaciones: Se impondrá un plazo de entrega de los informes de las prácticas y supondrá una penalización en la nota de prácticas la entrega fuera de dicho plazo. El alumno/a deberá presentar al profesor las prácticas que éste le requiera.
Exámenes prácticos
Evaluación en laboratorio
No
Sí
45%
-
Calificación mínima: 4,50.
-
Duración: 2 horas por sesión.
-
Fecha realización: A lo largo del curso.
-
Condiciones recuperación: Examen Final de Prácticas.
-
Observaciones: Exámenes realizados en el laboratorio. Está permitido llevar apuntes. Se celebrarán aproximadamente en las semanas 8 y 15.
Examen final
Examen escrito
Sí
Sí
50%
-
Calificación mínima: 4,50.
-
Duración: 3,5 horas.
-
Fecha realización: junio y septiembre.
-
Condiciones recuperación: Examen de septiembre.
-
Observaciones: Compuesto por varias cuestiones y uno o más problemas. Las cuestiones son preguntas que pretenden evaluar los conocimientos teóricos del alumno/a. Los problemas pretenden evaluar los conocimientos aplicados del alumno/a. Se podrán utilizar apuntes y bibliografía. Para poder presentarse a este examen es obligatorio entregar y presentar las prácticas de la asignatura.
Examen final de prácticas
Evaluación en laboratorio
Sí
Sí
0%
-
Calificación mínima: 0,00.
-
Duración: 3 horas.
-
Fecha realización: junio y septiembre.
-
Condiciones recuperación: Examen Final de Prácticas en septiembre.
-
Observaciones: Examen en el laboratorio similar a los exámenes prácticos realizados durante el curso. Para poder presentarse a este examen es obligatorio entregar y presentar las prácticas de la asignatura.
TOTAL
100%
OBSERVACIONES:
-
La nota final de la asignatura se compone de:
-
Nota de Prácticas (5%).
-
Nota de los Exámenes Prácticos (45%).
- Nota del Examen Final (50%).
-
- Para aprobar la asignatura es necesario superar la nota mínima de los Exámenes Prácticos y del Examen Final. En caso de no superar alguna de esas notas mínimas, la nota final será el mínimo de 4,5 y la media obtenida.
-
Nota de prácticas. Se obtiene en base a:
-
Presentación de las prácticas: a lo largo del curso el profesor requerirá al alumno/a la presentación de alguna de las prácticas realizadas.
- Informes de prácticas: deberán entregarse dentro del plazo establecido. Una entrega fuera del plazo supondrá una penalización en la nota. También supondrá una penalización la entrega de una práctica con errores u omisiones graves.
-
-
Nota de los exámenes prácticos:
-
Durante el curso se realizarán varios de estos exámenes en el horario de prácticas. La nota de este apartado se calculará como la media (ponderada) de las notas de los exámenes realizados. Lo normal será que el peso de todos los exámenes sea el mismo, aunque podría darse el caso de primar unos sobre otros si se considera que hay razones para ello.
-
La nota de los exámenes prácticos podrá verse mejorada si el alumno/a realiza satisfactoriamente los problemas y ejercicios que podrían proponerse a lo largo del curso.
-
OBSERVACIONES para alumnos/as a tiempo parcial:
-
Aquellos alumnos/as que no puedan asistir con regularidad a clase y, por tanto, no puedan realizar alguno de los exámenes prácticos, podrán recuperar dichos exámenes en el Examen Final de Prácticas.
-
Para poder realizar los exámenes finales (escrito y de prácticas) será obligatorio que, con anterioridad, hayan entregado y presentado las prácticas.
-
Se espera de estos alumnos/as que vayan realizando las prácticas de la asignatura al ritmo que se van proponiendo y que las vayan entregando en los plazos que a tal efecto se establezcan. La entrega fuera de plazo de las prácticas les supondrá la misma penalización que a los alumnos/as que asisten habitualmente a las clases de la asignatura.
-
-
-
Mario Aldea Rivas
Departamento de Matemáticas, Estadística y Computación
UNIVERSIDAD DE CANTABRIA
Pablo Sánchez Barreiro
Departamento de Matemáticas, Estadística y Computación
UNIVERSIDAD DE CANTABRIA