Weitere ähnliche Inhalte
Ähnlich wie estructuras de datos (20)
estructuras de datos
- 2. A mis padres, por todo lo que me han dado
A Cristina, por lo que nos espera juntos
A Miguel Angel, presente en mis recuerdos
- 3. Índice 7
__________________________________________________________________________________
Índice
Presentación ...........................................................................................................11
Prólogo ....................................................................................................................13
Capítulo 1 Especificación de tipos abstractos de datos
Presentación...............................................................................................................19
1.1 Introducción a los tipos abstractos de datos .........................................................19
1.2 Modelo de un tipo abstracto de datos..................................................................25
1.2.1 Signaturas y términos...............................................................................26
1.2.2 Modelos asociados a una signatura...........................................................29
1.2.3 Evaluación de un término dentro de un álgebra .........................................32
1.2.4 Ecuaciones y especificaciones algebraicas................................................34
1.2.5 Modelo inicial de una especificación..........................................................37
1.2.6 Otros modelos posibles ...........................................................................43
1.3 Construcción sistemática de especificaciones......................................................45
1.3.1 Introducción al uso de especificaciones ....................................................45
1.3.2 Clasificación de las operaciones de una especificación...............................46
1.3.3 Método general de construcción de especificaciones................................47
1.4 Ecuaciones condicionales, símbolos auxiliares y errores.......................................48
1.4.1 Ecuaciones condicionales........................................................................48
1.4.2 Tipos y operaciones auxiliares ..................................................................50
1.4.3 Tratamiento de errores.............................................................................51
1.5 Estudio de casos ...............................................................................................53
1.5.1 Especificación de algunos tipos de datos clásicos......................................54
1.5.2 Especificación de una tabla de símbolos ...................................................60
1.5.3 Especificación de un sistema de reservas de vuelos ..................................63
1.6 Estructuración de especificaciones.....................................................................66
1.6.1 Uso de especificaciones ..........................................................................66
1.6.2 Ocultación de símbolos............................................................................67
1.6.3 Renombramiento de símbolos..................................................................68
1.6.4 Parametrización e instanciación ................................................................69
1.6.5 Combinación de los mecanismos..............................................................75
1.7 Ejecución de especificaciones............................................................................76
1.7.1 La deducción ecuacional..........................................................................77
1.7.2 La reescritura...........................................................................................78
Ejercicios ....................................................................................................................80
© Los autores, 2002; © Edicions UPC, 2002.
- 4. 8 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
Capítulo 2 Implementación de tipos abstractos de datos
Presentación...............................................................................................................89
2.1 El lenguaje de implementación ...........................................................................89
2.1.1 Representación de tipos..........................................................................91
2.1.2 Sentencias..............................................................................................93
2.1.3 Funciones y acciones ..............................................................................95
2.1.4 Ejemplo: una implementación para los conjuntos.......................................97
2.2 Corrección de una implementación .....................................................................98
2.3 Estudio de la eficiencia de las implementaciones................................................108
2.3.1 Notaciones asintóticas ...........................................................................111
2.3.2 Órdenes de magnitud más habituales .....................................................116
2.3.3 Análisis asintótico de la eficiencia temporal ..............................................118
2.3.4 Análisis asintótico de la eficiencia espacial ...............................................121
2.4 Conflicto entre eficiencia y modularidad.............................................................124
2.4.1 Falta de funcionalidad en la signatura ......................................................125
2.4.2 Tipos abstractos de datos recorribles ......................................................128
2.4.3 Tipos abstractos de datos abiertos..........................................................136
Ejercicios ..................................................................................................................148
Capítulo 3 Secuencias
Presentación.............................................................................................................151
3.1 Pilas................................................................................................................151
3.1.1 Especificación.......................................................................................153
3.1.2 Implementación.....................................................................................154
3.2 Colas...............................................................................................................158
3.2.1 Especificación.......................................................................................158
3.2.2 Implementación.....................................................................................159
3.3 Listas ..............................................................................................................162
3.3.1 Especificación de las listas con punto de interés......................................162
3.3.2 Implementación de las listas con punto de interés....................................166
3.3.3 Implementación de estructuras de datos con punteros.............................173
3.3.4 Transparencia de la representación usando punteros ..............................178
3.3.5 Implementaciones encadenadas y TAD abiertos ......................................186
Ejercicios ..................................................................................................................189
Capítulo 4 Árboles
Presentación.............................................................................................................195
4.1 Modelo y especificación ...................................................................................196
4.1.1 Modelo de árbol general.........................................................................196
4.1.2 Modelo de árbol binario..........................................................................201
4.1.3 Modelo de árbol con punto de interés.....................................................202
© Los autores, 2002; © Edicions UPC, 2002.
- 5. Índice 9
__________________________________________________________________________________
4.2 Implementación ...............................................................................................204
4.2.1 Implementación de los árboles binarios ...................................................204
4.2.2 Implementación de los árboles generales................................................213
4.2.3 Variaciones en los otros modelos de árboles............................................218
4.2.4 Estudio de eficiencia espacial.................................................................218
4.3 Recorridos.......................................................................................................219
4.3.1 Recorridos en profundidad de los árboles binarios...................................220
4.3.2 Árboles binarios enhebrados..................................................................224
4.3.3 Recorrido por niveles de los árboles binarios ...........................................228
4.4 Colas prioritarias...............................................................................................231
4.4.1 Implementación por árboles parcialmente ordenados y casi completos......233
4.4.2 Aplicación: un algoritmo de ordenación...................................................238
Ejercicios ..................................................................................................................243
Capítulo 5 Tablas
Presentación.............................................................................................................249
5.1 Especificación .................................................................................................250
5.1.1 Funciones totales..................................................................................250
5.1.2 Conjuntos.............................................................................................252
5.1.3 Tablas y conjuntos recorribles.................................................................252
5.2 Implementación ...............................................................................................254
5.2.1 Implementación por listas desordenadas.................................................254
5.2.2 Implementación por listas ordenadas.......................................................255
5.2.3 Implementación por vectores de acceso directo.......................................257
5.2.4 Implementación por tablas de dispersión.................................................258
5.3 Funciones de dispersión..................................................................................259
5.3.1 Funciones de traducción de cadenas a enteros.......................................260
5.3.2 Funciones de restricción de un entero en un intervalo .............................263
5.3.3 Funciones de traducción de cadenas a enteros en un intervalo ................265
5.3.4 Caracterización e implementación de las funciones de dispersión.............266
5.4 Organizaciones de las tablas de dispersión........................................................270
5.4.1 Tablas de dispersión encadenadas .........................................................270
5.4.2 Tablas de dispersión de direccionamiento abierto ....................................278
5.4.3 Caracterización e implementación de los métodos de redispersión ...........285
5.4.4 Variantes de las tablas de dispersión de direccionamiento abierto .............288
5.4.5 Tablas dedispersión coalescentes ..........................................................289
5.4.6 Evaluación de las diferentes organizaciones............................................291
5.4.7 Elección de una organización de dispersión............................................292
5.4.8 Las organizaciones de dispersión en tablas recorribles y tablas abiertas.....295
5.4.9 Inconvenientes de la dispersión .............................................................296
5.5 Árboles binarios de búsqueda ..........................................................................297
5.6 Árboles AVL ....................................................................................................303
Ejercicios ..................................................................................................................315
© Los autores, 2002; © Edicions UPC, 2002.
- 6. 10 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
Capítulo 6 Relaciones binarias y grafos
Presentación.............................................................................................................319
6.1 Relaciones binarias ..........................................................................................320
6.1.1 Especificación.......................................................................................320
6.1.2 Implementación.....................................................................................324
6.2 Relaciones de equivalencia ..............................................................................332
6.2.1 Implementaciones lineales .....................................................................335
6.2.2 Implementación arborescente ................................................................340
6.2.3 Compresión de caminos.........................................................................342
6.3 Grafos .............................................................................................................346
6.3.1 Modelo y especificación.........................................................................348
6.3.2 Implementación.....................................................................................352
6.4 Recorridos de grafos........................................................................................360
6.4.1 Recorrido en profundidad ......................................................................361
6.4.2 Recorrido en anchura.............................................................................364
6.4.3 Recorrido en ordenación topológica .......................................................365
6.5 Búsqueda de caminos mínimos ........................................................................369
6.5.1 Camino más corto de un nodo al resto.....................................................370
6.5.2 Camino más corto entre todo par de nodos..............................................376
6.6 Árboles de expansión minimales.......................................................................379
6.6.1 Algoritmo de Prim ..................................................................................381
6.6.2 Algoritmo de Kruskal..............................................................................384
Ejercicios ..................................................................................................................387
Capítulo 7 Uso y diseño de tipos abstractos de datos
Presentación.............................................................................................................397
7.1 Uso de tipos abstractos de datos existentes ......................................................398
7.1.1 Un evaluador de expresiones.................................................................399
7.1.2 Un gestor de memoria dinámica ..............................................................405
7.1.3 Un planificador de soluciones.................................................................412
7.2 Diseño de nuevos tipos abstractos de datos......................................................420
7.2.1 Una tabla de símbolos............................................................................420
7.2.2 Una cola compartida...............................................................................423
7.2.3 Una emisora de televisión.......................................................................430
Ejercicios ..................................................................................................................439
Bibliografía ............................................................................................................453
Índice temático .....................................................................................................455
Índice de universos ..............................................................................................461
© Los autores, 2002; © Edicions UPC, 2002.
- 7. Presentación 11
__________________________________________________________________________________
Presentación
Cuando me piden que escriba el prólogo de un libro, me da un poco de vergüenza, ya que
se trata de una de mis asignaturas pendientes: he tenido hijos y he plantado árboles, y
también he escrito muchas líneas, pero nunca un libro. Así que hacer de prologuista sin
haber sido autor me provoca un cierto sentimiento de jubilación anticipada. En este caso, no
obstante, este sentimiento se confunde con una fuerte sensación de orgullo y satisfacción,
provocada por el excelente trabajo de alguien que, en parte, me permito considerar discípulo
mío en el sentido ancestral de la palabra. Xavier Franch, autor de este libro, ha sido alumno
mío durante sus estudios en la Facultat d'Informàtica de Barcelona, colaborador becario
mientras era estudiante, después alumno de doctorado y compañero de departamento y,
para terminar, siempre hemos trabajado juntos en proyectos de investigación y he dirigido su
tesis doctoral. Tengo motivos, pues, para sentir esta satisfacción.
El texto en cuestión, además de actualizar el contenido de las materias ya clásicas de
estructuras de datos, se adapta perfectamente al temario de una asignatura de los planes de
estudio vigentes en la Facultat d'Informàtica de Barcelona, lo cual justificaría de por sí su
existencia. Pero, además, por su actualización del tema puede servir, total o parcialmente,
para otros estudios de informática o para cualquier asignatura sobre estructuras de datos de
otros planes de estudios en la Universitat Politècnica de Catalunya o en otras universidades.
Y, como valor añadido, es destacable la experiencia del autor en la docencia de la asignatura
“Estructuras de Datos y Algoritmos”, de los nuevos planes estudio vigentes en la Facultat
d'Informàtica de Barcelona.
La notación empleada tanto en las especificaciones como en las implementaciones de las
estructuras de datos es Merlí, lenguaje emblemático del proyecto Excalibur y notación que,
desde hace ya muchos años, ha caracterizado las diversas enseñanzas algorítmicas en
nuestra facultad.
Por todo lo dicho es obvio que no soy nada imparcial a la hora de juzgar el trabajo del profesor
Xavier Franch, pero también tengo claro que la parcialidad es una pequeña licencia que, en
una presentación, nos podemos permitir.
© Los autores, 2002; © Edicions UPC, 2002.
- 8. 12 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
Como ya he dicho, un excelente texto, que pone al día un tema clásico en informática. Mi
enhorabuena al autor. Y también al lector, que encontrará una muestra de aquello que el
profesor Turski decía hace muchos años: “no hay nada más práctico que una buena teoría”.
Sobre todo si se explica desde un conocimiento sólido de la práctica.
Pere Botella i López
Catedrático del Departamento de Lenguajes y Sistemas Informáticos (U.P.C.)
Decano de la Facultat d'Informàtica de Barcelona (U.P.C.)
© Los autores, 2002; © Edicions UPC, 2002.
- 9. Prólogo 13
__________________________________________________________________________________
Prólogo
El estudio de las estructuras de datos es casi tan antiguo como el nacimiento de la
programación, y se convirtió en un tema capital en este ámbito desde finales de la década de
los 60. Como es lógico, una de las consecuencias de este estudio es la aparición de una
serie de libros de gran interés sobre el tema, algunos de ellos ciertamente excelentes y que
se han convertido en piedras angulares dentro de la ciencia de la programación (citemos, por
ejemplo, los textos de D.E. Knuth; de A.V. Aho, J. Hopcroft y J.D. Ullman; de E. Horowitz y
D. Sahni; de N. Wirth; y, recientemente, de T.H. Cormen, C.E. Leiserson i R.L. Rivest).
Ahora bien, el progreso en el campo de la programación ha dado como resultado la aparición
de nuevos conceptos, algunos de los cuales no se han consolidado hasta la segunda mitad
de la década de los 80. Muchos de estos conceptos están íntimamente interrelacionados
con el ámbito de las estructuras de datos, y ésta es la razón por la cual los libros antes citados
han quedado actualmente un poco desfasados en lo que respecta al método de desarrollo
de programas que siguen, incluso en sus reediciones más recientes.
En este contexto, he confeccionado el libro "Estructuras de datos. Especificación, diseño e
implementación", que trata el estudio de las estructuras de datos dentro del marco de los
tipos abstractos de datos. La adopción de este enfoque se inscribe en una metodología de
desarrollo modular de programas, que abunda en diferentes propiedades interesantes en la
producción industrial de aplicaciones (corrección, mantenimiento, etc.), y permite enfatizar
diversos aspectos importantes hoy en día: la necesidad de especificar el software, la
separación entre la especificación y la implementación, la construcción de bibliotecas de
componentes, la reusabilidad del software, etc. Diversos autores han explorado esta
metodología (sobre todo, desde las aportaciones de B. Liskov y J.V. Guttag), pero sin
aplicarla en el contexto de las estructuras de datos.
Destinatario
El libro ha sido concebido sobre todo como un texto de ayuda para alumnos de una
asignatura típica de estructura de datos en un primer ciclo de ingeniería en informática;
también se puede considerar adecuado para cualquier otra titulación técnica superior o
media con contenido informático. A tal efecto, cubre el temario habitual de esta asignatura en
tono autoexplicativo, y se ilustra con numerosas figuras, especificaciones y programas.
© Los autores, 2002; © Edicions UPC, 2002.
- 10. 14 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
Dependiendo de los objetivos de la asignatura, el formalismo asociado al estudio de estos
temas puede ser más o menos acusado; sea como sea, el libro puede usarse como texto
básico de consulta.
Ahora bien, los temas que aparecen en el libro se han desarrollado con más profundidad que
la estrictamente requerida por el alumno y, por ello, hay más posibles destinatarios. Por un
lado, el mismo profesor de la asignatura, porque puede encontrar en un único volumen los
aspectos de especificación y de diseño que no acostumbran a aparecer en los libros de
estructuras de datos; además, la inclusión de especificaciones y de programas libera al
docente de la necesidad de detallarlos en sus clases. Por otro lado, cualquier informático
que quiera profundizar en el estudio de las estructuras de datos más allá de su aspecto
puramente de programación, puede encontrar aquí una primera referencia.
Contenido
En el primer capítulo se introduce el concepto de tipo abstracto de datos. Después de
analizar su repercusión en el diseño de programas, nos centramos en el estudio de su
especificación formal, que es la descripción exacta de su comportamiento. De entre las
diferentes opciones existentes de especificación formal, se sigue la llamada especificación
ecuacional interpretada con semántica inicial. El capítulo muestra un método general para
construir especificaciones para los tipos, les otorga un significado matemático (como
álgebras heterogéneas) y también estudia su estructuración, y aquí destaca la posibilidad de
definir tipos genéricos, profusamente utilizados a lo largo del libro.
En el segundo capítulo se estudian diversos aspectos sobre la implementación de los tipos
de datos. El proceso de implementación se lleva a cabo cuando existe una especificación
para el tipo; la segunda sección insiste precisamente en la relación formal entre los dos
conceptos, especificación e implementación. También se introduce un punto clave en el
análisis de los algoritmos y las estructuras de datos que se desarrollarán posteriormente: el
estudio de su eficiencia a través de las denominadas notaciones asintóticas. Por último, se
muestran algunas situaciones de la programación con tipos abstractos de datos que pueden
causar problemas de eficiencia, y se formulan algunos patrones de comportamiento para
solucionar estos problemas.
Las diversas familias de estructuras de datos se introducen en los cuatro capítulos
siguientes: se estudian las secuencias; los árboles; las tablas y los conjuntos; y las relaciones
binarias y los grafos. Para todas ellas se sigue el mismo método: descripción informal,
formulación de un modelo, especificación algebraica del tipo e implementaciones más
habituales. Por lo que se refiere a estas últimas, se detalla la representación del tipo y la
codificación de las operaciones (hasta el último detalle y buscando la máxima legibilidad
posible mediante el uso de funciones auxiliares, diseño descendente, comentarios, etc.),
siempre en el caso de implementación en memoria interna; a continuación, se estudia su
eficiencia tanto temporal como espacial y se proponen varios ejercicios.
© Los autores, 2002; © Edicions UPC, 2002.
- 11. Prólogo 15
__________________________________________________________________________________
Por último, el capítulo final muestra la integración del concepto de tipo abstracto de datos
dentro del desarrollo modular de programas, y lo hace bajo dos vertientes: el uso de los tipos
abstractos previamente introducidos y el diseño de nuevos tipos de datos. El estudio se
hace a partir de seis ejemplos escogidos cuidadosamente, que muestran la confrontación de
los criterios de modularidad y eficiencia en el diseño de programas.
Para leer el texto, son necesarios unos conocimientos fundamentales en los campos de las
matemáticas, de la lógica y de la programación. De las matemáticas, los conceptos básicos de
conjunto, producto cartesiano, relación, función y otros similares. De la lógica, el concepto
de predicado, los operadores booleanos y las cuantificaciones universal y existencial. De la
programación, la habilidad de codificar usando un lenguaje imperativo cualquiera (Pascal, C,
Ada o similares) que conlleva el conocimiento de los constructores de tipos de datos (tuplas
y vectores), de las estructuras de control de flujo (asignaciones, secuencias, alternativas y
bucles) y de los mecanismos de encapsulamiento de código (acciones y funciones).
Es importante destacar algunos puntos que el libro no trata, si bien por su temática se podría
haber considerado la posibilidad de incluirlos. Primero, no aparecen algunas estructuras de
datos especialmente eficientes que, por su complejidad, superan el nivel de una asignatura
de primer ciclo de ingeniería; por ejemplo, diversas variantes de montículos y de árboles de
búsqueda (Fibonnaci Heaps, Red-Black Trees, Splay Trees, etc.) y de dispersión (Perfect
Hashing, principalmente). También se excluyen algunas otras estructuras que se aplican
principalmente a la memoria secundaria, como pueden ser las diversas variantes de árboles B
y también los esquemas de dispersión incremental (Extendible Hashing, Linear Hashing,
etc.). Tampoco se tratan en el libro algunos temas característicos de la programación, como
pueden ser el estudio de diversas familias de algoritmos (Greedy Algorithms, Dynamic
Programming, etc.) de los cuales constan algunos casos particulares en el capítulo de grafos;
o como las técnicas de derivación y de verificación formal de programas, si bien se usan
algunos elementos (invariantes de bucles, precondiciones y postcondiciones de funciones,
etc.). Hay diversos libros de gran interés que sí tratan en profundidad estos temas, cuyas
referencias aparecen convenientemente en este texto. Por último, no se utilizan los
conceptos propios de la programación orientada a objetos (básicamente, herencia y
vinculación dinámica) para estructurar los tipos de datos formando jerarquías; se ha preferido
el enfoque tradicional para simplificar el volúmen de la obra y no vernos obligados a introducir
la problemática inherente a este paradigma de la programación.
Bibliografía
Las referencias bibliográficas del libro se pueden dividir en dos grandes apartados. Por un
lado se citan todos aquellos artículos que son de utilidad para temas muy concretos, cuya
referencia aparece integrada en el texto en el mismo lugar en que se aplican. Por el otro, hay
diversos textos de interés general que cubren uno o más capítulos del libro y que aparecen
dentro del apartado de bibliografía; estos libros han de considerarse como los más
destacables en la confección de esta obra y no excluye que haya otros, igualmente buenos,
© Los autores, 2002; © Edicions UPC, 2002.
- 12. 16 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
que no se citan, bien porque su temática es muy similar a alguno de los que sí aparecen, bien
porque el desarrollo de los temas es diferente al que se sigue aquí.
Lenguaje
En cualquier texto sobre programación, es fundamental la elección del lenguaje utilizado
como vehículo para codificar (y, en este libro, también para especificar) los esquemas que se
introducen. En vez de especificar y programar usando algun lenguaje existente, he preferido
emplear la notación Merlí, diseñada por diversos miembros del Departament de Llenguatges
i Sistemes Informàtics (antiguamente, Departament de Programació) de la Universitat
Politècnica de Catalunya. Esta notación ha sido utilizada desde principios de los años 80 por
los profesores del departamento en la impartición de las asignaturas de programación de los
primeros niveles de las titulaciones en informática y ha demostrado su validez como
herramienta para el aprendizaje de la programación. Las razones de esta elección son
básicamente dos: por un lado, disponer de una notación abstracta que permita expresar
fácilmente los diferentes esquemas que se introducen sin ningún tipo de restricción
impuesta por el lenguaje; por otro, usar una sintaxis muy parecida tanto para especificar como
para implementar los tipos de datos (el hecho de que el mismo lenguaje se pueda usar
desde estos dos niveles diferentes refuerza la relación entre la especificación y la
implementación de los tipos de datos, que es uno de los objetivos del texto). El
inconveniente principal es la necesidad de traducir las especificaciones y los programas que
aparecen en este texto a los lenguajes que el lector tenga a su disposición; ahora bien, este
inconveniente no parece muy importante, dado que Merlí es fácilmente traducible a
cualquier lenguaje comercial (a algunos mejor que a otros, eso sí), y que podría haber
aparecido el mismo problema fuera cual fuera el lenguaje de trabajo elegido.
Terminología
Dado que, hoy en día, el idioma dominante en el ámbito de la informática es el inglés, he
hecho constar las acepciones inglesas junto a aquellos vocablos que denotan conceptos
básicos y universalmente aceptados; de esta manera, el lector puede relacionar rápidamente
estos conceptos dentro de su conocimiento de la materia o, en el caso de que sea el primer
libro que lee sobre estructuras de datos, adquirir el vocabulario básico para la lectura
posterior de textos ingleses. Los términos ingleses se escriben siempre en singular
independientemente del género con el que se usen en castellano.
Por el mismo motivo, se utilizan de manera consciente varios anglicismos usuales en el
ámbito de la programación para traducir algunos términos ingleses. Dichos anglicismos se
limitan a lo estrictamente imprescindible, pero he creído conveniente seguir la terminología
técnica habitual en vez de introducir vocablos más correctos desde el punto de vista
linguístico pero no tan profusamente usados.
© Los autores, 2002; © Edicions UPC, 2002.
- 13. Prólogo 17
__________________________________________________________________________________
Agradecimientos
Este libro es el resultado de una experiencia personal de varios años de docencia en las
asignaturas de estructuras de datos en los planes de licenciatura e ingeniería de la Facultat
d'Informàtica de Barcelona de la Universitat Politècnica de Catalunya, por lo que refleja un
gran número de comentarios y aportaciones de todos los profesores que, a lo largo de este
período, han sido compañeros de asignatura. Quizás el ejemplo más paradigmático sea la
colección de ejercicios propuestos en el texto, muchos de ellos provinentes de las listas de
ejercicios y exámenes de las asignaturas citadas. Para ellos mi más sincero agradecimiento.
En particular, quiero citar al profesor Ricardo Peña por su ayuda durante el primer año que
impartí la asignatura "Estructuras de la Información"; a los profesores y profesoras M.T. Abad,
J.L. Balcázar, J. Larrosa, J. Marco, C. Martínez, P. Meseguer, T. Moreno, P. Nivela, R.
Nieuwenhuis y F. Orejas por la revisión de secciones, versiones preliminares y capítulos
enteros del texto y por la detección de errores; y, sobre todo, al profesor Xavier Burgués por
todos los años de continuos intercambios de opinión, sugerencias y críticas. A todos ellos,
gracias.
Contacto
El lector interesado puede contactar con el autor en la dirección electrónica
franch@lsi.upc.es, o bien dirigiéndose al departamento de Llenguatges i Sistemes
Informàtics de la Universitat Politècnica de Catalunya. En especial, el autor agradecerá la
notificación de cualquier errata detectada en el texto, así como toda sugerencia o crítica a la
obra. También existe una página web con información sobre el libro, que se intenta mantener
actualizada, cuya dirección es http://www-lsi.upc.es/~franch/publis/libro-eds.html.
Barcelona, 10 de Junio de 1996 (primera edición)
12 de Noviembre de 2001 (última edición)
© Los autores, 2002; © Edicions UPC, 2002.
- 14. Bibliografía 453
__________________________________________________________________________________
Bibliografía
[ADJ78] J.A. Goguen, J.W. Thatcher, E.G. Wagner. "An Initial Algebra Approach to the
Specification, Correctness and Implementation of Abstract Data Types". En
Current Trends in Programming Methodology, Vol. IV, Prentice Hall, 1978.
[AHU83] A.V. Aho, J.E. Hopcroft, J.D. Ullman. Data Structures and Algorithms. Addison-
Wesley, 1983.
[Bal93] J.L. Balcázar. Programación Metódica. McGraw-Hill, 1993.
[BrB97] G. Brassard, P. Bratley. Fundamentos de Algoritmia. Ed. Prentice Hall, 1997.
[CLR90] T.H. Cormen, C.E. Leiserson, R.L. Rivest. Introduction to Algorithms. The MIT
Press, 1990.
[EhM85] H. Ehrig, B. Mahr. Fundamentals of Algebraic Specification, Vol. 1. EATCS
Monographs on Theoretical Computer Science, Springer-Verlag, 1985.
[EhM90] H. Ehrig, B. Mahr. Fundamentals of Algebraic Specification, Vol. 2. EATCS
Monographs on Theoretical Computer Science, Springer-Verlag, 1990.
[GoB91] G.H. Gonnet, R. Baeza-Yates. Handbook of Algorithms and Data Structures.
Addison-Wesley, 2ª edición,1991.
[HoS94] E. Horowitz, S. Sahni. Fundamentals of Data Structures in Pascal. Computer
Science Press, 4ª edición,1994.
[Knu68] D.E. Knuth. The Art of Computer Programming, Vol. 1. Addison-Wesley, 1968.
[Knu73] D.E. Knuth. The Art of Computer Programming, Vol. 3. Addison-Wesley, 1973.
[LiG86] B.H. Liskov, J.V. Guttag. Abstraction and Specification in Program Development.
The MIT Press, 1986.
[Mar86] J.J. Martin. Data Types and Data Structures. Prentice-Hall, 1986.
[Meh84] K. Mehlhorn. Data Structures and Algorithms, vols. 1 y 2. Springer-Verlag, 1984.
[Peñ98] R. Peña. Diseño de Programas (2ª edición). Prentice Hall, 1998.
[Tar83] R.E. Tarjan. Data Structures and Network Algorithms. Regional Conference Series
in Applied Mathematics (SIAM), Philadelphia, Pennsylvania, 1983.
[TeA86] A.M. Tenenbaum, M.J. Augenstein. Data Structures using PASCAL. Prentice-Hall,
2ª edición, 1986.
[vAP89] J.J. van Amstel, J.A.A.M. Poirters. The Design of Data Structures and Algorithms.
Prentice Hall and Academic Service, 1989.
[Wir86] N. Wirth. Algorithms and Data Structures. Prentice-Hall, 1986.
© Los autores, 2002; © Edicions UPC, 2002.
- 15. Índice temático 455
__________________________________________________________________________________
2-3, B, B*, B+...........................303
AVL.........................................303
binario..............................196, 201
de búsqueda....................221, 297
casi-completo...................213, 233
cerrado por prefijo ....................196
compacto.................................196
completo .................................213
enhebrado...............................224
Índice temático de Fibonacci ............................303
equilibrado...............................303
etiquetado...............................196
A de expansión ...................379, 380
de expansión de coste mínimo..380
Abstracción ....................................20,23 general....................................196
Acción (en Merlí)..................................95 libre.........................................380
Acoplamiento de estructuras de datos.138 n-ario.......................................196
Adyacencia........................................350 parcialmente ordenado.............233
Álgebra con punto de interés.........196, 202
cociente de términos..................40 quadtree..................................246
de términos................................31 con raíz....................................380
inicial .........................................40 Arco..................................................346
objeto matemático ................25, 30 Aridad
respecto una signatura ...............30 de un árbol...............................199
Algoritmo de un símbolo............................28
Brent.......................................288 Arista ..........................................v. arco
compleción (Knuth-Bendix) ........79 Ascendente (en un árbol)...................199
Dijkstra.....................................370 Atajo .................................................138
Floyd.......................................376 Axioma (especificación ecuacional) .......34
Kruskal.............................333, 384
ordenación por inserción ..........122
ordenación por montículo.........238 B
Prim.........................................381
voraz .......................................381 Basura...............................................178
Altura (de un árbol).............................198 Biblioteca de módulos reusables...24, 125
Antecesor (en un grafo)......................361 Bosque.............................................200
Apiñamiento ..............................282, 290 Búsqueda
primario....................................283 auto-organizativa......................255
Apuntador...........................................98 de caminos mínimos.................369
de sitio libre................................98 dicotómica (binaria)...................256
externo....................................139 por interpolación ......................256
Árbol ...............................................195 lineal........................................256
© Los autores, 2002; © Edicions UPC, 2002.
- 16. 456 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
con movimiento al inicio ............255 Coste ...................................v. eficiencia
por transposición......................255 Cuadrado (método)............................263
Cubeta..............................................258
Cursor.................................................98
C
Cadena ...............................v. secuencia D
predicado cadena.....................171
de reubicación .........................282 Deducción ecuacional..........................77
Camino Desbordamiento
en un árbol...............................198 en el cálculo.............................262
de un clave (de dispersión) .......278 en una tabla .............................274
en un grafo ..............................350 Descendiente
mínimo ....................................369 en un árbol...............................199
Campo (de tupla)..................................91 en un grafo ..............................361
Categoría ............................................74 Desequilibrio .....................................305
Ciclo ...............................................351 DD...................................305, 308
Clave ...............................................249 DI.....................................307, 310
indefinida.................................249 Digrafo ............................v. grafo dirigido
invasora...................................278 Diseño
Colisión.............................................258 descendente.............................22
Cola de estructuras de datos ............397
circular.....................................159 modular (con TAD) ......................22
compartida...............................423 Dispersión
prioritaria ..........................231, 237 concepto.................................258
TAD.........................................158 función ............................258, 259
Complejidad..........................v. eficiencia incremental..............................274
Componente (fuertemente) conexo....350 organizaciones.........................270
Compresión de caminos.....................342 perfecta...................................260
Conexión (en un grafo).......................350 valor de dispersión ...................258
Congruencia induida por las ecuaciones39 División (método)...............................263
Conjunto
de base .....................................30
TAD.........................................252 E
Constante
orden de magnitud ...................116 Ecuación.............................................34
valor ..........................................30 condicional ................................49
Constructor de tipo impurificadora.............................46
por enumeración........................91 parte derecha/izquierda..............35
puntero ...................................173 de recurrencia ..........................119
tupla..........................................91 Eficiencia.....................................23, 108
vector........................................91 amortizada ...............................345
© Los autores, 2002; © Edicions UPC, 2002.
- 17. Índice temático 457
__________________________________________________________________________________
en el caso peor..................110, 113 en Merlí .....................................95
Elemento parcial ..............................249, 250
definido...................................249 de redispersión........................278
distinguido...............................162 de representación....................100
fantasma (centinela)..................170 TAD.........................................249
Encadenamiento ...............................168 total .................................249, 250
Enlace.......................v. encadenamiento universal..................................263
Ensayo..............................................278 Funtor.................................................75
Enriquecimiento ..................................67
Especificación .....................................20
algebraica (ecuacional)..........25, 34 G
método de construcción.............47
parametrizada (genérica).............69 Género .........................................v. tipo
pre-post.....................................97 Grado v. aridad
Esquemas de programación ...............131 Grafo.................................................320
de búsqueda....................131, 163 acíclico ....................................351
de recorrido......................131, 163 bipartito ...................................346
Estructura de datos..............................25 completo .................................348
funcional..................................249 denso......................................348
lineal........................................151 dirigido ....................................346
de partición..............................332 disperso ..................................348
Etiqueta.....................................196, 346 etiquetado...............................346
de coste nulo...........................369 no dirigido................................346
Evaluador de expresiones..................399 no etiquetado ..........................346
Extremidad (de un camino) .................350 TAD.........................................346
F H
Factor Hermano (en un árbol)........................199
de carga (árbol).........................219 Hijo (en un árbol)................................199
de carga (tabla).........................292 derecho, izquierdo...................202
de equilibrio.............................304 izquierdo, hermano derecho.....214
Forma Hoja ...............................................198
de un árbol...............................196
normal .......................................78
Función I
de abstracción..........................100
de Ackerman............................345 Identificador.......................................249
de asignación de variables ..........33 Implementación ...................................20
de evaluación de términos ..........33 corrección..................................98
de dispersión ...................258, 259 eficiencia .................................108
© Los autores, 2002; © Edicions UPC, 2002.
- 18. 458 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
lenguaje de implementación .......98 Morfismo .............................................32
universo de implementación..89, 90 Multilista (de grado dos)......................324
Índice Multilista de adyacencia ......................358
a tabla......................................249
a vector......................................91
Instancia..............................................69 N
parcial........................................73
Invariante Nivel (en un árbol) ..............................198
de un bucle................................93 Nodo .................................195, 197, 346
de una representación..............100 Notación asintótica
Invasor ...........................v. clave invasora O .............................................112
Isomorfismo.........................................32 Ω .............................................112
Iterador..............................................128 Θ .............................................113
Notación infix.....................................400
Notació postfix (polaca).......................399
L NULO................................................174
liberar_espacio ..................................174
Lista O
de adyacencia..........................355
auto-organizativa......................255 Obsolescencia (de atajos)...................142
circular.....................................186 obtener_espacio ...............................174
doblemente encadenada..........187 Ocultación de símbolos........................67
encadenada.............................143 Operación ...........................................30
ordenada.................................161 auxiliar (oculta, privada) ...............50
con punto de interés ................162 consultora..................................46
constructora...............................46
constructora generadora.............46
M modificadora ..............................46
Orden de magnitud ............................113
Marca ................................................143
Matriz
de adyacencia..........................352 P
dispersa...................................324
Memoria dinámica.......................174, 405 Padre (en un árbol).............................199
MFSet...............................................332 Parámetro
Modelo de entrada y/o de salida ..............95
de un TAD............................25, 43 formal ........................................69
inicial .........................................37 real............................................70
Módulo................................................23 Parametrización ...................................69
Montículo ..................................212, 235 Paso de parámetros .............................70
de Fibonacci ............................370 Pila
© Los autores, 2002; © Edicions UPC, 2002.
- 19. Índice temático 459
__________________________________________________________________________________
de sitios libres...................146, 169 canónico..............................41, 46
TAD.........................................151 de clase (de equivalencia).........340
Plegamiento-desplegamiento.............263 Representación de tipo ..................90, 91
Posición encadenada.....................166, 168
de elemento ............................138 circular.....................................186
de vector ...................................91 doblemente.............................187
Postcondición .....................................97 secuencial........................154, 166
Precondición.......................................97 Reubicación...............................143, 145
Prioridad............................................231 Reusabilidad..................................41, 46
Programación dinámica.......................376 Robin Hood (método).........................289
Profundidad (en un árbol) .............v. nivel Rotación............................................306
Puntero.............................................173
Punto de acceso (en iterador).............128
S
R S-aplicación.........................................32
S-conjunto ..........................................27
Raíz...........................................195, 198 Secuencia.........................................151
Rama.................................................199 Semántica de un TAD...........................43
Recolección de basura.......................178 de comportamiento ....................44
Recorrido final ...........................................43
en anchura........219, 228, 361, 364 inicial .........................................43
inorden....................................220 laxa............................................44
por niveles .......................219, 228 SIG-álgebra..........................................30
en ordenación topológica..360, 365 Signatura.............................................26
postorden................................220 Símbolo
preorden .................................220 de constante..............................28
en profundidad ........................360 de operación..............................28
en profundidad hacia atrás ........362 Sinónimo...........................................258
Redispersión.....................................278 Sistema de reescritura..........................78
Reescritura ..................................78, 247 Canónico...................................79
Referencia colgada ............................177 Confluente ................................79
Regla de escritura ................................78 Noetheriano...............................79
Relación Subárbol....................................195, 199
binaria (TAD).............................319 Subcamino........................................350
binaria etiquetada.....................319 Subciclo............................................351
de equivalencia (TAD) .......320, 332 Subgrafo...........................................350
etiquetada ...............................320 Suma ponderada ...............................261
de igualdad..............................100
m:n .................................v. binaria
Renombramiento de símbolos..............68
Representante
© Los autores, 2002; © Edicions UPC, 2002.
- 20. 460 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
T local...........................................95
Vector .................................................91
Tabla Vértice ..............................................346
de dispersión...........................258 intermedio (en un camino).........350
de símbolos .......................60, 420
TAD.........................................249
TAD ................v. Tipo Abstracto de Datos Z
Teorema ecuacional .............................77
Teoría ecuacional.................................77 Zona de excedentes..........................274
Término...............................................28 Zona principal ....................................274
sobre SIG...................................28
Tipo
auxiliar (oculto, privado)...............50
de datos...............................19, 25
de interés ..................................66
Tipo Abstracto de Datos (TAD) ..............19
abierto.....................................146
parcialmente abierto .................139
recorrible .................................128
recorrible ordenadamente.........128
totalmente abierto ...........v. abierto
Tupla...................................................91
variante......................................91
U
Union-find set....................................332
Universo..............................................26
de caracterización.......................69
de definición (de especificación) .35
genérico (parametrizado) ............70
de implementación ...............89, 90
Uso ...............................................45, 66
V
Valor de dispersión.............................258
Variable ...............................................29
de control (bucle) .......................93
global ........................................95
© Los autores, 2002; © Edicions UPC, 2002.
- 21. Índice de universos 461
__________________________________________________________________________________
COORDENADAS .................................69
DIGRAFO_ETIQ .................................349
DIGRAFO_ETIQ_LISTAS....................355
DIGRAFO_ETIQ_MATRIZ....................353
DIGRAFO_ETIQ_MULTILISTAS...........359
Índice de universos
DIVISION............................................268
DOS_ENTEROS ............................69, 72
ALFABETO..........................................57
ELEM ..................................................70
ARBOL_BINARIO...............................203
ELEM_= ..............................................71
ARBOL_BINARIO_DE_BUSQUEDA.....30
ELEM_< ..............................................76
ARBOL_BINARIO_ENC_1_VECTOR..210
ELEM_<_= ........................................130
ARBOL_BINARIO_ENC_PUNTEROS.205
ELEM_DISP_CONV...........................266
ARBOL_GENERAL............................201
ELEM_2_ESP_= ...............................280
ARBOL_GENERAL_POR_BINARIO ...216
ELEM_ESP .......................................251
BOOL ............................................26, 35
ELEM_ESP_<_=_+ ...........................369
CADENA........................................57, 76
ELEM_ORDENADO...........................332
CJT......................................................70
ENTERO..............................................42
CJT_∈ .................................................71
FUNCIONES_F ..................................266
CJT_∈_ACOTADO.............................127
FUNCIONES_G..................................267
CJT_∈_ACOTADO_IND......................137
FUNCION_TOTAL ..............................251
CJT_∈_ACOT._IND_PARC_ABIERTO 141
FUNCION_TOTAL_RECO._ORD ........253
CJT_∈_ACOTADO_POR_VECT...99, 127
LISTA_INTERES ................................165
CJT_∈_ACOTADO_RECORRIBLE .....129
LISTA_INTERES_ENC................172, 182
CJT_∈_ACOT._REC._POR_VECT.....133
LISTA_INTERES_ENC_PUNT.....176, 184
CJT_∈_ACOTADO_REC._ORD..........131
LISTA_INTERES_SEC .......................166
CJT_∈_ACOT._REC._ORD_VECT_1.134
MULTILISTA_TODO_CIRCULAR.........328
CJT_∈_ACOT._REC._ORD_VECT_2.135
NAT..........................................27, 45, 52
CJT_RECORRIBLE............................253
PAR.....................................................72
CLAVE_DISPERSION ........................268
PILA ..................................................153
CLAVE_DISPERSION_LINEAL...........286
PILA_SEC .........................................155
CLAVE_REDISPERSIÓN....................280
RACIONALES ................................69, 75
COLA ................................................159
REDISPERSION_DOBLE...................287
COLA_CIRCULAR..............................161
REDISPERSION_LINEAL...................286
COLA_PRIORITARIA..........................232
REDISP_LIN._SUMA_POND_Y_DIV...286
COLA_PRIOR._POR_MONTICULO....236
REDISP_DOB._SUMA_POND_Y_DIV 287
COMPOSICION_F_Y_G......................268
RELACION.........................................322
CONJUNTO .......................................252
© Los autores, 2002; © Edicions UPC, 2002.
- 22. 462 Estructuras de datos. Especificación, diseño e implementación
__________________________________________________________________________________
RELACION_DE_EQUIVALENCIA........335
RELACION_DE_EQUIV._ARB............343
RELACION_DE_EQUIV._LINEAL .......338
RELACION_ETIQUETADA..................323
SUMA_POND ....................................267
SUMA_POND_Y_DIV.........................269
TABLA_DIRECTA ...............................276
TABLA_IND_PUNTEROS...................272
TABLA_ABIERTA ...............................280
VAL_NAT.............................................73
VECTOR............................................157
© Los autores, 2002; © Edicions UPC, 2002.