Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de la información
Jordi Àlvarez Canal (coordinador)
Xavier Burgués Illa
Juan Manuel Dodero Beardo
Xavier Franch i Gutiérrez
Elena García Barriocanal
Julià Minguillón Alfonso
Miguel Ángel Sicilia Urbán
Con la colaboración de
Esteve Mariné Gallisà
XP06/75001/00574
© FUOC • XP06/75001/00574 Estructura de la información
Jordi Àlvarez Canal Xavier Burgués Illa Juan Manuel Dodero Beardo Xavier Franch i Gutiérrez
Licenciado en Informática. Ha Ingeniero informático, profesor Doctor Ingeniero en Informática por Profesor titular de universidad en
sido profesor asociado del del Departamento de Lenguajes y la Universidad Carlos III de Madrid. el Departamento de Lenguajes
Departamento de Lenguajes y Sistemas Informáticos de la Profesor del Departamento de y Sistemas Informáticos de
Sistemas Informáticos de la UPC, Universidad Politécnica de Lenguajes y Sistemas de la la Universidad Politécnica de
donde ha impartido asignaturas Cataluña. Imparte asignaturas de Universidad Pontificia de Salamanca Cataluña. En estos años ha
relacionadas con la programación; bases de datos y de programación en Madrid (1995-1999). Ingeniero impartido docencia en asignaturas
profesor de los Estudios de en la Facultad de Informática de I+D en Intelligent Software de estructuras de datos, iniciación a
Informática de la UOC en el Área de Barcelona y es consultor de la Components, S. A. (2000-2002). la programación e ingeniería del
de la Programación e Ingeniería del Universitat Oberta de Catalunya. Profesor del Departamento de software. Ha escrito varios libros
Software. Ha hecho investigación Informática de la Universidad Carlos y otras publicaciones docentes
en el ámbito de la inteligencia III de Madrid (1999-2006). sobre estos temas. Su actividad
artificial y la ingeniería del software, investigadora gira en torno a la
con artículos y presentaciones a selección de componentes software,
nivel nacional e internacional. la ingeniería de requisitos y las líneas
Actualmente se dedica de producto, principalmente. En
profesionalmente al desarrollo estos y otros temas, ha publicado
de software y es consultor cerca del centenar de artículos en
de la UOC. revistas, actas de congresos y libros.
Elena García Barriocanal Julià Minguillón Alfonso Miguel Ángel Sicilia Urbán Esteve Mariné Gallisà
Ingeniero en Informática por la Ingeniero en Informática por Ingeniero en Informática por la Ingeniero técnico industrial por la
Universidad Pontificia de Salamanca la Universidad Autónoma de Universidad Pontificia de Salamanca Universidad Politécnica de Cataluña.
y doctora por la Universidad de Barcelona. Máster en Combinatoria y doctor ingeniero en Informática Licenciado en Derecho por la
Alcalá. Miembro del grupo y Comunicación Digital por por la Universidad Carlos III UNED. Ingeniero técnico e
de investigación Information la Universidad Autónoma de de Madrid. Actualmente es ingeniero en Informática por la
Engineering de la Universidad Barcelona. Doctor ingeniero en profesor del Dpto. de CC. de la UOC. Funcionario de carrera de
de Alcalá, es profesora desde Informática por la Uni-versidad Computación de la Universidad de la Administración local. Desde el
el año 2000 en el Departamento de Autónoma de Barcelona. Alcalá. Coordinador del grupo año 2001, colaborador y consultor
Ciencias de la Computación de Director adjunto del Internet de investigación Information de los Estudios de Informática y
la misma universidad. Trabaja en Interdisciplinary Institute (IN3) de la Engineering en la Universidad de Multimedia de la UOC.
líneas de investigación relacionadas Universitat Oberta de Catalunya. Alcalá, desde el cual dirige diversos
con la web semántica y el Profesor de los Estudios de proyectos de financiación europea
e-learning, interesándose Informática, Multimedia y y nacional. Es editor en jefe de
especialmente por aspectos Telecomunicación de la Universitat International Journal Metadata,
relacionados con la interacción y Oberta de Catalunya. Profesor Semantics and Ontologies y
diseño de interfaces, líneas en las asociado del Departamento de participa en el comité científico de
que tiene numerosas publicaciones. Ingeniería y Comunicaciones de otras revistas internacionales.
la Universidad Autónoma de
Barcelona. Investigador del IN3
en las áreas de Networking
Technologies y E-learning.
Director del grupo de investigación
PERSONAL para la introducción
de aspectos de personalización del
proceso de aprendizaje en entornos
virtuales mediante itinerarios
basados en objetos de aprendizaje
reutilizables.
Ninguna parte de esta publicación, incluyendo el diseño general y de la cubierta, puede ser copiada,
reproducida, almacenada o transmitida de ninguna manera ni por ningún medio, tanto si es eléctrico, como
químico, mecánico, óptico, de grabación, de fotocopia, o por otros métodos, sin la autorización
previa por escrito de los titulares del copyright.
© FUOC • XP06/75001/00574 3 Estructura de la información
Introducción
Ahora bien, hasta aquí, en estas asignaturas habéis resuelto problemas en su to-
talidad, habéis construido algoritmos que definieran el problema en todo su al-
cance y hasta el más mínimo detalle, a partir sólo de aquello que el lenguaje os
proporcionaba, fuera el que fuera: C o Java (si bien probablemente en ocasiones
habréis utilizado algunas de las clases que se incluían en el propio lenguaje,
como la clase java.util.Vector).
Muchas veces nos encontraremos con situaciones concretas que, con pe-
queñas variaciones, se presentan repetidamente en muchas de las aplicaciones
que se construyen. Redefinir cada vez desde cero los algoritmos necesarios
para tratar estas situaciones se puede tolerar en aplicaciones de pequeño ta-
maño (a pesar de que no es deseable), pero es totalmente inadmisible para
aplicaciones de gran tamaño en las que no nos podemos permitir malgastar
recursos en volver a tratar problemas que ya se han solucionado previamente
(aunque sea con pequeñas variaciones).
Existen distintos modos de incrementar la reutilización en el desarrollo del Tal como ya sabéis de Programación
orientada a objetos, existen
software. Uno de los más usados y también eficaces consiste en lo siguiente: paradigmas, como la orientación a objetos
(OO), que potencian por sí mismas la
reutilización del software.
El origen de una biblioteca utilizada para desarrollar una aplicación puede ser
muy variado: se puede tratar tanto de una biblioteca construida por el mismo
equipo de desarrollo, como de una comprada a otra empresa que no tiene
nada que ver con el desarrollo de la aplicación.
Elementos que acompañarán los TAD que estudiamos a lo largo del curso son la
especificación –en la que tiene un papel importante la técnica del diseño por
contrato– y el estudio de los recursos utilizados para cada una de las implemen-
taciones vistas, tanto por lo que se refiere al espacio que ocupan (el espacio ne-
cesario para almacenar la colección de elementos), como por lo referente al
tiempo (necesario para hacer los cálculos para proporcionar las diferentes fun-
cionalidades de los TAD).
El lenguaje Java nos acompañará también a lo largo de todos los módulos. Ya Adicionalmente, el texto se
acompaña de una serie de ejemplos
en lenguaje Java.
en el módulo “Tipos abstractos de datos” veremos con ejemplos cómo trasla- Todos los ejemplos están
completamente implementados
damos todas estas nociones al terreno de la programación con Java. La asigna- y los tenéis disponibles como recurso
electrónico.
tura dispone de una biblioteca de colecciones especialmente diseñada para
ello. Esta biblioteca se ha diseñado con un objetivo claramente didáctico,
además de contener la definición e implementación en lenguaje Java de todos
los TAD, así como las implementaciones vistas en estos apuntes.
Objetivos
3. Conocer y saber usar las estructuras básicas vistas en este curso para repre-
sentar colecciones de elementos.
6. Saber elegir las colecciones adecuadas para proporcionar una solución bas-
tante eficiente a un problema, eligiendo también las implementaciones
más adecuadas para la solución planteada.
Contenidos
Módulo didáctico 1
Tipos abstractos de datos
Jordi Álvarez Canal
1. Contenedores
2. Diseño por contrato
3. Desarrollo de una colección de ejemplo
4. Tipos genéricos o paramétricos
5. Biblioteca de colecciones de la asignatura
6. Presentación del resto de módulos
Módulo didáctico 2
Complejidad algorítmica
Julià Minguillón i Alfonso
1. Introducción a la complejidad algorítmica
2. Notación asintótica de la complejidad algorítmica
3. Complejidad algorítmica de los tipos abstractos de datos
Módulo didáctico 3
Contenedores secuenciales
Jordi Álvarez Canal
1. Pilas
2. Colas
3. Representaciones encadenadas
4. Listas
5. Representaciones con vector: redimensionamiento
6. Los contenedores secuenciales en la Java Collections Framework
Módulo didáctico 4
Árboles
Xavier Burguès i Illa
1. Árboles generales y binarios. Definiciones y conceptos relacionados
2. Recursividad
3. Árboles generales
4. Árboles binarios
5. Recorridos
6. Ejemplo de uso: un sistema de ficheros
Módulo didáctico 5
Colas con prioridad
Elena García Barriocanal; Miguel Ángel Sicilia Urbán
1. El concepto de cola con prioridad
2. Funcionamiento de las colas con prioridad
© FUOC • XP06/75001/00574 8 Estructura de la información
Módulo didáctico 6
El TAD Tabla
Xavier Franch
1. Presentación del TAD Tabla
2. Implementación por dispersión del TAD Tabla
3. El TAD Conjunto
4. Ejemplo de aplicación: una tabla de símbolos para un lenguaje modular
5. Las tablas y los conjuntos en la Java Collections Framework
Módulo didáctico 7
Árboles de búsqueda
Juan Manuel Dodero Beardo
1. Los árboles de búsqueda
2. Implementación de colecciones ordenadas mediante árboles binarios de
búsqueda
3. Árboles multicamino y árboles B
4. Los árboles de búsqueda en la Java Collections Framework
Módulo didáctico 8
Grafos
Miguel Ángel Sicilia Urbán; Elena García Barriocanal
1. El concepto de grafo
2. El tipo abstracto de datos Grafo
3. Interfaces Java para grafos dirigidos y no dirigidos
4. Implementaciones de grafos
5. Ejemplo de uso: TAD Academia
Módulo didáctico 9
Diseño de estructuras de datos
Jordi Álvarez Canal
1. Diseño de nuevos TAD utilizando una biblioteca de colecciones
2. Diseño de bibliotecas de colecciones
3. Bibliotecas de colecciones existentes
© FUOC • XP06/75001/00574 9 Estructura de la información
Bibliografía
Weiss, M. A. (2003). Data structures & problem solving using Java (2.ª ed.).
Upper Saddle River: Addison Wesley. Disponible en línea en:
<www.cs.fiu.edu/~weiss>.
Sahni, S. (2004). Data structures, algorithms, and applications in Java (2.ª ed.).
Summit: McGraw-Hill.