Your SlideShare is downloading. ×
estructuras de datos
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

estructuras de datos

742
views

Published on

estructura de datos es una materia muy importante en la vida de un programador.

estructura de datos es una materia muy importante en la vida de un programador.


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
742
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. POLITEXTXavier Franch GutiérrezEstructuras de datosEspecificación, diseño e implementación EDICIONS UPC
  • 2. A mis padres, por todo lo que me han dado A Cristina, por lo que nos espera juntosA Miguel Angel, presente en mis recuerdos
  • 3. Índice 7__________________________________________________________________________________ÍndicePresentación ...........................................................................................................11Prólogo ....................................................................................................................13Capítulo 1 Especificación de tipos abstractos de datosPresentación...............................................................................................................191.1 Introducción a los tipos abstractos de datos .........................................................191.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 ...........................................................................431.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................................471.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.............................................................................511.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 ..................................631.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..............................................................751.7 Ejecución de especificaciones............................................................................76 1.7.1 La deducción ecuacional..........................................................................77 1.7.2 La reescritura...........................................................................................78Ejercicios ....................................................................................................................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 datosPresentación...............................................................................................................892.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.......................................972.2 Corrección de una implementación .....................................................................982.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 ...............................................1212.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..........................................................136Ejercicios ..................................................................................................................148Capítulo 3 SecuenciasPresentación.............................................................................................................1513.1 Pilas................................................................................................................151 3.1.1 Especificación.......................................................................................153 3.1.2 Implementación.....................................................................................1543.2 Colas...............................................................................................................158 3.2.1 Especificación.......................................................................................158 3.2.2 Implementación.....................................................................................1593.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 ......................................186Ejercicios ..................................................................................................................189Capítulo 4 ÁrbolesPresentación.............................................................................................................1954.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.................................................................2184.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 ...........................................2284.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...................................................238Ejercicios ..................................................................................................................243Capítulo 5 TablasPresentación.............................................................................................................2495.1 Especificación .................................................................................................250 5.1.1 Funciones totales..................................................................................250 5.1.2 Conjuntos.............................................................................................252 5.1.3 Tablas y conjuntos recorribles.................................................................2525.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.................................................2585.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.............2665.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 .............................................................2965.5 Árboles binarios de búsqueda ..........................................................................2975.6 Árboles AVL ....................................................................................................303Ejercicios ..................................................................................................................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 grafosPresentación.............................................................................................................3196.1 Relaciones binarias ..........................................................................................320 6.1.1 Especificación.......................................................................................320 6.1.2 Implementación.....................................................................................3246.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.........................................................................3426.3 Grafos .............................................................................................................346 6.3.1 Modelo y especificación.........................................................................348 6.3.2 Implementación.....................................................................................3526.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 .......................................................3656.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..............................................3766.6 Árboles de expansión minimales.......................................................................379 6.6.1 Algoritmo de Prim ..................................................................................381 6.6.2 Algoritmo de Kruskal..............................................................................384Ejercicios ..................................................................................................................387Capítulo 7 Uso y diseño de tipos abstractos de datosPresentación.............................................................................................................3977.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.................................................................4127.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.......................................................................430Ejercicios ..................................................................................................................439Bibliografía ............................................................................................................453Índice temático .....................................................................................................455Índice de universos ..............................................................................................461 © Los autores, 2002; © Edicions UPC, 2002.
  • 7. Presentación 11__________________________________________________________________________________PresentaciónCuando me piden que escriba el prólogo de un libro, me da un poco de vergüenza, ya quese trata de una de mis asignaturas pendientes: he tenido hijos y he plantado árboles, ytambién he escrito muchas líneas, pero nunca un libro. Así que hacer de prologuista sinhaber sido autor me provoca un cierto sentimiento de jubilación anticipada. En este caso, noobstante, 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ípulomío en el sentido ancestral de la palabra. Xavier Franch, autor de este libro, ha sido alumnomío durante sus estudios en la Facultat dInformàtica de Barcelona, colaborador becariomientras 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 sutesis 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 deestructuras de datos, se adapta perfectamente al temario de una asignatura de los planes deestudio vigentes en la Facultat dInformàtica de Barcelona, lo cual justificaría de por sí suexistencia. 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 deotros 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 FacultatdInformàtica de Barcelona.La notación empleada tanto en las especificaciones como en las implementaciones de lasestructuras 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 ennuestra facultad.Por todo lo dicho es obvio que no soy nada imparcial a la hora de juzgar el trabajo del profesorXavier Franch, pero también tengo claro que la parcialidad es una pequeña licencia que, enuna 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. Mienhorabuena al autor. Y también al lector, que encontrará una muestra de aquello que elprofesor 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 dInformàtica de Barcelona (U.P.C.) © Los autores, 2002; © Edicions UPC, 2002.
  • 9. Prólogo 13__________________________________________________________________________________PrólogoEl estudio de las estructuras de datos es casi tan antiguo como el nacimiento de laprogramación, y se convirtió en un tema capital en este ámbito desde finales de la década delos 60. Como es lógico, una de las consecuencias de este estudio es la aparición de unaserie de libros de gran interés sobre el tema, algunos de ellos ciertamente excelentes y quese han convertido en piedras angulares dentro de la ciencia de la programación (citemos, porejemplo, los textos de D.E. Knuth; de A.V. Aho, J. Hopcroft y J.D. Ullman; de E. Horowitz yD. 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ónde nuevos conceptos, algunos de los cuales no se han consolidado hasta la segunda mitadde la década de los 80. Muchos de estos conceptos están íntimamente interrelacionadoscon el ámbito de las estructuras de datos, y ésta es la razón por la cual los libros antes citadoshan quedado actualmente un poco desfasados en lo que respecta al método de desarrollode programas que siguen, incluso en sus reediciones más recientes.En este contexto, he confeccionado el libro "Estructuras de datos. Especificación, diseño eimplementación", que trata el estudio de las estructuras de datos dentro del marco de lostipos abstractos de datos. La adopción de este enfoque se inscribe en una metodología dedesarrollo modular de programas, que abunda en diferentes propiedades interesantes en laproducción industrial de aplicaciones (corrección, mantenimiento, etc.), y permite enfatizardiversos aspectos importantes hoy en día: la necesidad de especificar el software, laseparación entre la especificación y la implementación, la construcción de bibliotecas decomponentes, la reusabilidad del software, etc. Diversos autores han explorado estametodología (sobre todo, desde las aportaciones de B. Liskov y J.V. Guttag), pero sinaplicarla en el contexto de las estructuras de datos.DestinatarioEl libro ha sido concebido sobre todo como un texto de ayuda para alumnos de unaasignatura 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 omedia con contenido informático. A tal efecto, cubre el temario habitual de esta asignatura entono 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 estostemas puede ser más o menos acusado; sea como sea, el libro puede usarse como textobásico de consulta.Ahora bien, los temas que aparecen en el libro se han desarrollado con más profundidad quela estrictamente requerida por el alumno y, por ello, hay más posibles destinatarios. Por unlado, el mismo profesor de la asignatura, porque puede encontrar en un único volumen losaspectos de especificación y de diseño que no acostumbran a aparecer en los libros deestructuras de datos; además, la inclusión de especificaciones y de programas libera aldocente de la necesidad de detallarlos en sus clases. Por otro lado, cualquier informáticoque quiera profundizar en el estudio de las estructuras de datos más allá de su aspectopuramente de programación, puede encontrar aquí una primera referencia.ContenidoEn el primer capítulo se introduce el concepto de tipo abstracto de datos. Después deanalizar su repercusión en el diseño de programas, nos centramos en el estudio de suespecificación formal, que es la descripción exacta de su comportamiento. De entre lasdiferentes opciones existentes de especificación formal, se sigue la llamada especificaciónecuacional interpretada con semántica inicial. El capítulo muestra un método general paraconstruir 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 dedefinir 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 tiposde datos. El proceso de implementación se lleva a cabo cuando existe una especificaciónpara el tipo; la segunda sección insiste precisamente en la relación formal entre los dosconceptos, especificación e implementación. También se introduce un punto clave en elanálisis de los algoritmos y las estructuras de datos que se desarrollarán posteriormente: elestudio de su eficiencia a través de las denominadas notaciones asintóticas. Por último, semuestran algunas situaciones de la programación con tipos abstractos de datos que puedencausar problemas de eficiencia, y se formulan algunos patrones de comportamiento parasolucionar estos problemas.Las diversas familias de estructuras de datos se introducen en los cuatro capítulossiguientes: se estudian las secuencias; los árboles; las tablas y los conjuntos; y las relacionesbinarias 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áshabituales. Por lo que se refiere a estas últimas, se detalla la representación del tipo y lacodificación de las operaciones (hasta el último detalle y buscando la máxima legibilidadposible 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 sueficiencia 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 datosdentro del desarrollo modular de programas, y lo hace bajo dos vertientes: el uso de los tiposabstractos previamente introducidos y el diseño de nuevos tipos de datos. El estudio sehace a partir de seis ejemplos escogidos cuidadosamente, que muestran la confrontación delos criterios de modularidad y eficiencia en el diseño de programas.Para leer el texto, son necesarios unos conocimientos fundamentales en los campos de lasmatemáticas, de la lógica y de la programación. De las matemáticas, los conceptos básicos deconjunto, producto cartesiano, relación, función y otros similares. De la lógica, el conceptode predicado, los operadores booleanos y las cuantificaciones universal y existencial. De laprogramació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 (tuplasy vectores), de las estructuras de control de flujo (asignaciones, secuencias, alternativas ybucles) 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íahaber considerado la posibilidad de incluirlos. Primero, no aparecen algunas estructuras dedatos especialmente eficientes que, por su complejidad, superan el nivel de una asignaturade primer ciclo de ingeniería; por ejemplo, diversas variantes de montículos y de árboles debúsqueda (Fibonnaci Heaps, Red-Black Trees, Splay Trees, etc.) y de dispersión (PerfectHashing, principalmente). También se excluyen algunas otras estructuras que se aplicanprincipalmente a la memoria secundaria, como pueden ser las diversas variantes de árboles By 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, comopueden ser el estudio de diversas familias de algoritmos (Greedy Algorithms, DynamicProgramming, 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 usanalgunos elementos (invariantes de bucles, precondiciones y postcondiciones de funciones,etc.). Hay diversos libros de gran interés que sí tratan en profundidad estos temas, cuyasreferencias aparecen convenientemente en este texto. Por último, no se utilizan losconceptos propios de la programación orientada a objetos (básicamente, herencia yvinculación dinámica) para estructurar los tipos de datos formando jerarquías; se ha preferidoel enfoque tradicional para simplificar el volúmen de la obra y no vernos obligados a introducirla problemática inherente a este paradigma de la programación.BibliografíaLas referencias bibliográficas del libro se pueden dividir en dos grandes apartados. Por unlado se citan todos aquellos artículos que son de utilidad para temas muy concretos, cuyareferencia aparece integrada en el texto en el mismo lugar en que se aplican. Por el otro, haydiversos textos de interés general que cubren uno o más capítulos del libro y que aparecendentro del apartado de bibliografía; estos libros han de considerarse como los másdestacables 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, bienporque el desarrollo de los temas es diferente al que se sigue aquí.LenguajeEn cualquier texto sobre programación, es fundamental la elección del lenguaje utilizadocomo vehículo para codificar (y, en este libro, también para especificar) los esquemas que seintroducen. En vez de especificar y programar usando algun lenguaje existente, he preferidoemplear la notación Merlí, diseñada por diversos miembros del Departament de Llenguatgesi Sistemes Informàtics (antiguamente, Departament de Programació) de la UniversitatPolitècnica de Catalunya. Esta notación ha sido utilizada desde principios de los años 80 porlos profesores del departamento en la impartición de las asignaturas de programación de losprimeros niveles de las titulaciones en informática y ha demostrado su validez comoherramienta para el aprendizaje de la programación. Las razones de esta elección sonbásicamente dos: por un lado, disponer de una notación abstracta que permita expresarfácilmente los diferentes esquemas que se introducen sin ningún tipo de restricciónimpuesta por el lenguaje; por otro, usar una sintaxis muy parecida tanto para especificar comopara implementar los tipos de datos (el hecho de que el mismo lenguaje se pueda usardesde estos dos niveles diferentes refuerza la relación entre la especificación y laimplementación de los tipos de datos, que es uno de los objetivos del texto). Elinconveniente principal es la necesidad de traducir las especificaciones y los programas queaparecen en este texto a los lenguajes que el lector tenga a su disposición; ahora bien, esteinconveniente no parece muy importante, dado que Merlí es fácilmente traducible acualquier lenguaje comercial (a algunos mejor que a otros, eso sí), y que podría haberaparecido el mismo problema fuera cual fuera el lenguaje de trabajo elegido.TerminologíaDado que, hoy en día, el idioma dominante en el ámbito de la informática es el inglés, hehecho constar las acepciones inglesas junto a aquellos vocablos que denotan conceptosbásicos y universalmente aceptados; de esta manera, el lector puede relacionar rápidamenteestos conceptos dentro de su conocimiento de la materia o, en el caso de que sea el primerlibro que lee sobre estructuras de datos, adquirir el vocabulario básico para la lecturaposterior de textos ingleses. Los términos ingleses se escriben siempre en singularindependientemente 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 selimitan a lo estrictamente imprescindible, pero he creído conveniente seguir la terminologíatécnica habitual en vez de introducir vocablos más correctos desde el punto de vistalinguístico pero no tan profusamente usados. © Los autores, 2002; © Edicions UPC, 2002.
  • 13. Prólogo 17__________________________________________________________________________________AgradecimientosEste libro es el resultado de una experiencia personal de varios años de docencia en lasasignaturas de estructuras de datos en los planes de licenciatura e ingeniería de la FacultatdInformàtica de Barcelona de la Universitat Politècnica de Catalunya, por lo que refleja ungran número de comentarios y aportaciones de todos los profesores que, a lo largo de esteperíodo, han sido compañeros de asignatura. Quizás el ejemplo más paradigmático sea lacolección de ejercicios propuestos en el texto, muchos de ellos provinentes de las listas deejercicios 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 queimpartí 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ítulosenteros del texto y por la detección de errores; y, sobre todo, al profesor Xavier Burgués portodos los años de continuos intercambios de opinión, sugerencias y críticas. A todos ellos,gracias.ContactoEl lector interesado puede contactar con el autor en la dirección electrónicafranch@lsi.upc.es, o bien dirigiéndose al departamento de Llenguatges i SistemesInformàtics de la Universitat Politècnica de Catalunya. En especial, el autor agradecerá lanotificación de cualquier errata detectada en el texto, así como toda sugerencia o crítica a laobra. También existe una página web con información sobre el libro, que se intenta manteneractualizada, 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...............................196A de expansión ...................379, 380 de expansión de coste mínimo..380Abstracción ....................................20,23 general....................................196Acción (en Merlí)..................................95 libre.........................................380Acoplamiento de estructuras de datos.138 n-ario.......................................196Adyacencia........................................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...............................199Algoritmo 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...............................................178Altura (de un árbol).............................198 Biblioteca de módulos reusables...24, 125Antecesor (en un grafo)......................361 Bosque.............................................200Apiñamiento ..............................282, 290 Búsqueda primario....................................283 auto-organizativa......................255Apuntador...........................................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.................................................98CCadena ...............................v. secuencia D predicado cadena.....................171 de reubicación .........................282 Deducción ecuacional..........................77Camino 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...............................199Campo (de tupla)..................................91 en un grafo ..............................361Categoría ............................................74 Desequilibrio .....................................305Ciclo ...............................................351 DD...................................305, 308Clave ...............................................249 DI.....................................307, 310 indefinida.................................249 Digrafo ............................v. grafo dirigido invasora...................................278 DiseñoColisión.............................................258 descendente.............................22Cola 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, 259Complejidad..........................v. eficiencia incremental..............................274Componente (fuertemente) conexo....350 organizaciones.........................270Compresión de caminos.....................342 perfecta...................................260Conexión (en un grafo).......................350 valor de dispersión ...................258Congruencia induida por las ecuaciones39 División (método)...............................263Conjunto de base .....................................30 TAD.........................................252 EConstante orden de magnitud ...................116 Ecuación.............................................34 valor ..........................................30 condicional ................................49Constructor 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í .....................................95Elemento parcial ..............................249, 250 definido...................................249 de redispersión........................278 distinguido...............................162 de representación....................100 fantasma (centinela)..................170 TAD.........................................249Encadenamiento ...............................168 total .................................249, 250Enlace.......................v. encadenamiento universal..................................263Ensayo..............................................278 Funtor.................................................75Enriquecimiento ..................................67Especificació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. aridadEsquemas de programación ...............131 Grafo.................................................320 de búsqueda....................131, 163 acíclico ....................................351 de recorrido......................131, 163 bipartito ...................................346Estructura de datos..............................25 completo .................................348 funcional..................................249 denso......................................348 lineal........................................151 dirigido ....................................346 de partición..............................332 disperso ..................................348Etiqueta.....................................196, 346 etiquetado...............................346 de coste nulo...........................369 no dirigido................................346Evaluador de expresiones..................399 no etiquetado ..........................346Extremidad (de un camino) .................350 TAD.........................................346F HFactor 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.....214Forma Hoja ...............................................198 de un árbol...............................196 normal .......................................78Funció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......................................91Instancia..............................................69 N parcial........................................73Invariante Nivel (en un árbol) ..............................198 de un bucle................................93 Nodo .................................195, 197, 346 de una representación..............100 Notación asintóticaInvasor ...........................v. clave invasora O .............................................112Isomorfismo.........................................32 Ω .............................................112Iterador..............................................128 Θ .............................................113 Notación infix.....................................400 Notació postfix (polaca).......................399L NULO................................................174liberar_espacio ..................................174Lista 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.............46M modificadora ..............................46 Orden de magnitud ............................113Marca ................................................143Matriz de adyacencia..........................352 P dispersa...................................324Memoria dinámica.......................174, 405 Padre (en un árbol).............................199MFSet...............................................332 ParámetroModelo de entrada y/o de salida ..............95 de un TAD............................25, 43 formal ........................................69 inicial .........................................37 real............................................70Módulo................................................23 Parametrización ...................................69Montí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).........340Plegamiento-desplegamiento.............263 Representación de tipo ..................90, 91Posición encadenada.....................166, 168 de elemento ............................138 circular.....................................186 de vector ...................................91 doblemente.............................187Postcondición .....................................97 secuencial........................154, 166Precondición.......................................97 Reubicación...............................143, 145Prioridad............................................231 Reusabilidad..................................41, 46Programación dinámica.......................376 Robin Hood (método).........................289Profundidad (en un árbol) .............v. nivel Rotación............................................306Puntero.............................................173Punto de acceso (en iterador).............128 SR S-aplicación.........................................32 S-conjunto ..........................................27Raíz...........................................195, 198 Secuencia.........................................151Rama.................................................199 Semántica de un TAD...........................43Recolección de basura.......................178 de comportamiento ....................44Recorrido 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...........................................258Redispersión.....................................278 Sistema de reescritura..........................78Reescritura ..................................78, 247 Canónico...................................79Referencia colgada ............................177 Confluente ................................79Regla de escritura ................................78 Noetheriano...............................79Relació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. binariaRenombramiento de símbolos..............68Representante © Los autores, 2002; © Edicions UPC, 2002.
  • 20. 460 Estructuras de datos. Especificación, diseño e implementación__________________________________________________________________________________T local...........................................95 Vector .................................................91Tabla Vértice ..............................................346 de dispersión...........................258 intermedio (en un camino).........350 de símbolos .......................60, 420 TAD.........................................249TAD ................v. Tipo Abstracto de Datos ZTeorema ecuacional .............................77Teoría ecuacional.................................77 Zona de excedentes..........................274Término...............................................28 Zona principal ....................................274 sobre SIG...................................28Tipo auxiliar (oculto, privado)...............50 de datos...............................19, 25 de interés ..................................66Tipo Abstracto de Datos (TAD) ..............19 abierto.....................................146 parcialmente abierto .................139 recorrible .................................128 recorrible ordenadamente.........128 totalmente abierto ...........v. abiertoTupla...................................................91 variante......................................91UUnion-find set....................................332Universo..............................................26 de caracterización.......................69 de definición (de especificación) .35 genérico (parametrizado) ............70 de implementación ...............89, 90Uso ...............................................45, 66VValor de dispersión.............................258Variable ...............................................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, 72ALFABETO..........................................57 ELEM ..................................................70ARBOL_BINARIO...............................203 ELEM_= ..............................................71ARBOL_BINARIO_DE_BUSQUEDA.....30 ELEM_< ..............................................76ARBOL_BINARIO_ENC_1_VECTOR..210 ELEM_<_= ........................................130ARBOL_BINARIO_ENC_PUNTEROS.205 ELEM_DISP_CONV...........................266ARBOL_GENERAL............................201 ELEM_2_ESP_= ...............................280ARBOL_GENERAL_POR_BINARIO ...216 ELEM_ESP .......................................251BOOL ............................................26, 35 ELEM_ESP_<_=_+ ...........................369CADENA........................................57, 76 ELEM_ORDENADO...........................332CJT......................................................70 ENTERO..............................................42CJT_∈ .................................................71 FUNCIONES_F ..................................266CJT_∈_ACOTADO.............................127 FUNCIONES_G..................................267CJT_∈_ACOTADO_IND......................137 FUNCION_TOTAL ..............................251CJT_∈_ACOT._IND_PARC_ABIERTO 141 FUNCION_TOTAL_RECO._ORD ........253CJT_∈_ACOTADO_POR_VECT...99, 127 LISTA_INTERES ................................165CJT_∈_ACOTADO_RECORRIBLE .....129 LISTA_INTERES_ENC................172, 182CJT_∈_ACOT._REC._POR_VECT.....133 LISTA_INTERES_ENC_PUNT.....176, 184CJT_∈_ACOTADO_REC._ORD..........131 LISTA_INTERES_SEC .......................166CJT_∈_ACOT._REC._ORD_VECT_1.134 MULTILISTA_TODO_CIRCULAR.........328CJT_∈_ACOT._REC._ORD_VECT_2.135 NAT..........................................27, 45, 52CJT_RECORRIBLE............................253 PAR.....................................................72CLAVE_DISPERSION ........................268 PILA ..................................................153CLAVE_DISPERSION_LINEAL...........286 PILA_SEC .........................................155CLAVE_REDISPERSIÓN....................280 RACIONALES ................................69, 75COLA ................................................159 REDISPERSION_DOBLE...................287COLA_CIRCULAR..............................161 REDISPERSION_LINEAL...................286COLA_PRIORITARIA..........................232 REDISP_LIN._SUMA_POND_Y_DIV...286COLA_PRIOR._POR_MONTICULO....236 REDISP_DOB._SUMA_POND_Y_DIV 287COMPOSICION_F_Y_G......................268 RELACION.........................................322CONJUNTO .......................................252 © Los autores, 2002; © Edicions UPC, 2002.
  • 22. 462 Estructuras de datos. Especificación, diseño e implementación__________________________________________________________________________________RELACION_DE_EQUIVALENCIA........335RELACION_DE_EQUIV._ARB............343RELACION_DE_EQUIV._LINEAL .......338RELACION_ETIQUETADA..................323SUMA_POND ....................................267SUMA_POND_Y_DIV.........................269TABLA_DIRECTA ...............................276TABLA_IND_PUNTEROS...................272TABLA_ABIERTA ...............................280VAL_NAT.............................................73VECTOR............................................157 © Los autores, 2002; © Edicions UPC, 2002.