Topic outline

  • Estructuras de Datos (2012)

    estructuras.jpg

         

    Profesores

    Mario Aldea Rivas

    Pablo Sánchez Barreiro

    Departamento 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.

  • Programa

    programa

     

     

    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.

  • Bibliografía

    bibliografia

      

     

        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.

  • Materiales de Clase

    materiales

     

     

    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

      

    6. Tipos Abstractos de Datos Jerárquicos

  • Prácticas

    practicas

     

     

    Práctica 1. Introducción

    • PR-F-001. Práctica 1. Computando bajo el frío.

      • PR-F-002. Algoritmos de ordenación (Wikipedia).

      • PR-F-003. Solución Práctica 1.

      

    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-F-011. Código fuente enumerado DiaSemana (estático).

      • PR-F-012. Código fuente enumerado DiaSemana (objetos Java 5).

      • PR-F-013. Tutorial Java sobre enumerados.

      • PR-F-014. Definición de enumerados en Java.

      • PR-F-015. Solución Práctica 3 (objetos).

      

    Práctica 4. Polimorfismo y enlazado dinámico

    • PR-F-016. Práctica 4. Una clase para ordenarlos a todos.

      • PR-F-017. Cómo crear objetos de tipos parametrizados (Java).

      • PR-F-018. Solución Práctica 4.

      

    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-F-023. Bolsas que crean árboles en lugar de destruirlos.

    • PR-F-024. Clase RBTree.

      

    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.

      • PR-F-028. Código fuente realización Práctica 10.1.

      • PR-F-029. Código fuente realización Práctica 10.2.

      • PR-F-030. Código con ejemplos de errores comunes.

      • PR-F-031. Runner modificado.

       

       

       

       

       

  • Ejercicios

    ejercicios

     

     

    Práctica 1. Introducción

      

    Práctica 2. Complejidad algorítmica

      

    Práctica 3. Tipos enumerados

      

    Práctica 4. Polimorfismo y enlazado dinámico

      

    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.

       

       

       

       

       

  • Otros Recursos

    otros_recursos

     

     

    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-035Especificación algebraica lista inserción cabeza.

    • OR-F-036Especificació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

    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

    • OR-F-060. Implementación y ejemplos árboles.

    • OR-F-061. Akinator (árboles de decisión).

    Lecturas (muy) avanzadas

    • OR-F-062. Binary Space Partition (BSP) (Wikipedia).

       

       

       

       

       

       

  • Pruebas de Evaluación

    evaluacion

      

     

        Ejemplos de exámenes    

     

    • PE-F-001. Prueba teórica febrero 2012.
    • PE-F-002. Prueba teórica febrero 2012 (Solución).

      

      

      

        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

    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

    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

    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

    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.

  • Guía de Aprendizaje

    guia

     

     

  • Sobre el Profesor

    profesor

     

     

    mario_aldea-rivas.jpg    

    Mario Aldea Rivas

     

    Departamento de Matemáticas, Estadística y Computación

    UNIVERSIDAD DE CANTABRIA
     
    Más información

     

    pablo_sanchez.jpg    

    Pablo Sánchez Barreiro

     

    Departamento de Matemáticas, Estadística y Computación

    UNIVERSIDAD DE CANTABRIA
     
    Más información