Anda di halaman 1dari 4

Algoritmos y Estructuras de Datos

BIBLIOGRAF

IA COMENTADA
Libros disponibles en la Biblioteca Central de Leioa
[1] Gregory L. Heileman. Estructuras de datos, algoritmos y programacion orientada a objetos.
McGraw-Hill, 1998. 305 paginas.
El unico inconveniente de este texto es que la mayor parte de los ejemplos estan escritos
en C++, un lenguaje orientado a objetos. Sin embargo, las explicaciones introductorias
de cada captulo son perfectamente validas, ya que en general se abstraen del lenguaje de
programacion. Por otra parte, el texto esta en castellano, lo cual facilita su lectura. El
libro tiene una presentacion magnca, con una clara separacion entre texto y ejemplos.
Hay que destacar la gran cantidad de ejercicios que se incluyen al nal de cada captulo, y
especialmeente las notas nales que recomiendan y comentan bibliografa para profundizar
en los conocimientos adquiridos. Por todo ello recomendamos este libro como texto basico,
y nos detendremos especialmente en la descripcion de sus contenidos.
El libro se divide en tres partes. La primera de ellas, titulada Fundamentos, se re-
comienda en su totalidad. Consta de cuatro captulos: el primero dene el concepto de
Tipo Abstracto de Datos, describe el pseudocodigo con el que se especicaran los algorit-
mos en el resto del libro, hace un repaso de los algoritmos recursivos y dene la notacion
asintotica con la que se evaluara la eciencia de los algoritmos; el segundo captulo aborda el
analisis de la complejidad temporal de algoritmos, explora supercialmente algunas tecnicas
de dise no, entre las que se incluye Divide y Venceras, y presenta varios metodos de orde-
nacion, incluido el quicksort; el captulo 3 es un repaso rapido e informal de la sintaxis del
lenguaje C, con muchos ejemplos; nalmente, el captulo 4 introduce los conceptos funda-
mentales de la programacion orientada a objetos, y hace un repaso somero de la sintaxis
del lenguaje C++ (que el alumno, obviamente, podra saltarse).
La segunda parte del libro se titula Estructuras de datos basicas, y corresponde casi com-
pletamente a la ultima parte de la asignatura Algoritmos y Estructuras de Datos. Com-
prende los captulos 5, 6, 7, 8 y 9, de los cuales solo los tres primeros tienen interes para
el alumno. El captulo 5 dene el TAD Lista y estudia las distintas representaciones en
memoria, as como las correspondientes implementaciones de las operaciones de acceso. El
mismo tipo de estudio se repite para los TAD Pila y Cola en el captulo 6. En cuanto al
captulo 7, antes de leerlo conviene revisar la parte del apendice B donde se denen los con-
ceptos fundamentales sobre arboles; por lo demas, este captulo se dedica al estudio de un
tipo especial de arboles, los arboles binarios de b usqueda, que tienen una gran importancia
desde el punto de vista practico. Los captulos 8 y 9, dedicados al estudio de estructuras
de datos mas complejas: las tablas hash y las colas de prioridad, respectivamente, quedan
fuera del temario de la asignatura.
De la ultima parte del libro, titulada Estructuras de datos avanzadas, solo interesa al
alumno el ultimo de los cinco captulos que la componen. Se trata del captulo 14, dedicado
al TAD Grafo: denicion, representacion en memoria y operaciones basicas: b usqueda en
profundidad y b usqueda en anchura. El captulo naliza con la formulacion de dos de
los problemas mas comunes sobre grafos: la b usqueda de caminos mnimos (algoritmo de
Dijkstra) y los arboles de recubrimiento mnimos (algoritmos de Prim y Kruskal).
[2] Alfred V. Aho, John E. Hopcroft, Jerey D. Ullman. Estructuras de datos y algoritmos.
Addison-Wesley Iberoamericana, 1988. 438 paginas.
Se trata de un texto clasico, conciso y claro, traducido bastante bien al castellano. Abarca
una gran variedad de temas sin entrar en profundidad en ninguno de ellos, pero s lo
suciente como para comprender las ideas fundamentales: conceptos basicos del dise no
de software incluido el de Tipo Abstracto de Dato (captulo 1), TAD fundamentales
(listas, pilas y colas; captulo 2) y TAD avanzados (arboles, conjuntos y grafos; captulos
3, 4, 5, 6 y 7), algoritmos de ordenacion (captulo 8), analisis de algoritmos (captulo 9),
principales tecnicas de dise no (captulo 10) y dos ejemplos relevantes de aplicacion de los
contenidos presentados en el libro: gestion de cheros (captulo 11) y administracion de
memoria (captulo 12). Cada captulo incluye un gran n umero de ejercicios as como una
serie de notas bibliogracas. En lugar de denir un lenguaje algortmico especco, los
autores han preferido escribir los ejemplos directamente en Pascal. Esto puede dicultar
en parte la comprension de los mimos, sobre todo por las limitaciones del propio lenguaje:
seguro que es posible encontrar implementaciones mas claras y/o mas ecientes en lenguaje
C. El libro recoge una gran parte de los contenidos de la asignatura, aunque en un orden
completamente distinto. El alumno debera empezar por el captulo 1 y seguir con los
captulos 9 y 8, as como el apartado 1 del captulo 10, dedicado a algoritmos Divide y
Venceras. Finalmente, los TAD basicos podra estudiarlos en el captulo 2 y los avanzados
en los captulos 3, 6 y 7.
[3] Niklaus Wirth. Algoritmos + Estructuras de Datos = Programas. Ediciones del Castillo, 1980.
382 paginas.
Uno de los clasicos de la programacion, Niklaus Wirth fue el creador del lenguaje Pascal
y mas tarde del Modula. El original en ingles de este texto data de 1976, y aunque el
mundo de la informatica ha sufrido varias revoluciones desde entonces, todava hoy se
sigue utilizando como referencia en cursos de introduccion a la programacion. Todos los
ejemplos del libro se expresan en lenguaje Pascal. Esto no debera suponer ning un problema
para el lector porque el primer captulo del libro va entrando poco a poco en el lenguaje, de
manera que el dominio del mismo se adquiere gradualmente. Ademas, uno de los apendices
del libro consiste precisamente en la especicacion del lenguaje a traves de un diagrama
sintactico. Sin embargo, dado que la asignatura Algoritmos y Estructuras de Datos utiliza
el lenguaje C en la parte practica, y un lenguaje algortmico muy proximo al lenguaje C en
los ejemplos y ejercicios de clase, el manejo del Pascal puede suponer un esfuerzo adicional.
En realidad, la principal objecion que se puede poner a este libro es que los cinco captulos
en que se estructura cubren solo una peque na parte de los contenidos de la asignatura. As,
el concepto de Tipo Abstracto de Datos, la programacion orientada a objetos o el analisis
de algoritmos no son tratados en absoluto; tampoco se habla de estructuras de datos
tan importantes como las pilas, las colas o los grafos. El primer captulo se dedica a la
denicion de tipos basicos, arrays, registros y cheros en lenguaje Pascal; simultaneamente
va introduciendo las nociones necesarias para construir algoritmos en Pascal: operadores,
estructuras de control, etc. Por tanto, este captulo no tiene interes para el alumno, como
tampoco lo tiene el captulo 5, que es un ejemplo de aplicacion: la construccion de un
compilador para un hipotetico lenguaje de programacion.
El interes del libro se concentra por tanto en los tres captulos centrales. El captulo 2
esta dedicado al estudio en profundidad de algoritmos de ordenacion sobre arrays y sobre
cheros. El captulo 3 estudia el concepto de recursividad y entre los algoritmos recursivos
aquellos que resultan de la tecnica de dise no conocida como Backtracking. El captulo 4
es particularmente interesante, ya que esta dedicado a las estructuras de datos dinamicas.
En primer lugar se presentan los conceptos de apuntador y de estructura recursiva, y
a continuacion se presentan varios tipos de estructuras dinamicas: listas, arboles arboles
binarios, arboles equilibrados y arboles multicamino y tablas hash, as como las operaciones
mas comunes sobre las mismas.
Existe una edicion posterior del mismo texto de la que se ha suprimido el captulo 5,
tambien traducida al espa nol y titulada Algoritmos y Estructuras de Datos (Prentice-
Hall Hispanoamericana, 1987). De hecho, la unica version actualmente disponible en las
libreras es una reimpresion de ese texto a cargo de Pearson Educacion. Sin embargo,
no recomendamos su compra por varias razones: (1) la traduccion (al mexicano) es muy
irregular, (2) la maquetacion y el formateo del texto son de baja calidad, especialmente
en lo que respecta a los algoritmos, (3) el lenguaje algortmico utilizado es Modula-2, que
aunque similar al Pascal, puede dicultar la lectura de los algoritmos, y (4) no aporta nada
con respecto a la edicion original.
[4] G. Brassard , P. Bratley. Fundamentos de algoritmia. Prentice-Hall, 1997. 579 paginas.
Este libro cubre solo una peque na parte del temario de la asignatura, pero lo hace muy
bien. Ademas la traduccion al castellano es mas que aceptable. En realidad, el libro esta
dedicado al estudio de las tecnicas de analisis y dise no de algoritmos lo que resumidamente
se conoce como Algortmica, tocando ademas otros temas mas avanzados, como la comple-
jidad computacional en el sentido matematico, los algoritmos probabilistas, los algoritmos
paralelos y los algoritmos aproximados. Al alumno de Algoritmos y Estructuras de Datos le
conciernen sobre todo los captulos 2, 3 y 4, dedicados al analisis de algoritmos, el captulo
7, donde se describe la tecnica de dise no Divide y Venceras, y ciertos apartados del captulo
9, que presenta algoritmos sobre grafos. En concreto, la parte de la asignatura dedicada
al estudio de la complejidad temporal de algoritmos recursivos esta basada completamente
en el captulo 4 de este libro.
[5] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. Introduction to algorithms. MIT
Press, 1990 (1
a
Edicion). 1028 paginas.
Esta referencia se propone al alumno como libro de consulta. Solo es posible encontrar la
version original en ingles, de modo que su lectura puede resultar difcil. Por que, entonces,
aparece en esta lista? Pues porque posiblemente estamos hablando de uno de los mejores
compendios de lo que se conoce como Ciencia de la Computacion que abarcara tanto
el dise no de estructuras de datos como el dise no y el analisis de algoritmos, a la vez
teorico y practico, riguroso y completo: cualquier problema algortmico que se le plantee
al alumno en su vida academica, o despues en su vida profesional, muy probablemente es
tratado en este texto. Tras una breve introduccion en la que se presenta el concepto de
algoritmo, el pseudocodigo que resulta especialmente sencillo y compacto, y las ideas
fundamentales sobre dise no y analisis de algoritmos, los contenidos del libro se estructuran
en siete secciones. Cada seccion, compuesta por varios captulos, va precedida de una
peque na introduccion que describe sus motivaciones y objetivos, as como los conocimientos
previos necesarios. Cada captulo incluye numerosos ejercicios; aimismo, al nal se propone
una lista de problemas y se indican las referencias bibliogracas mas relevantes para el
estudio en profundidad de los temas tratados.
La seccion 1 esta dedicada a conceptos matematicos fundamentales, necesarios para en-
tender el resto, como la notacion asintotica que especica el crecimiento de una funcion,
series, resolucion de recurrencias, conjuntos y probabilidad. La seccion 2 hace un estudio
exhaustivo de algoritmos de ordenacion sobre distintas estructuras de datos (montculos y
arrays, basicamente), haciendo especial enfasis como en el resto del texto en la eciencia
de los mismos. La seccion 3 estudia varias estructuras de datos escogidas especialmente
por su interes practico y reunidas todas ellas bajo la denominacion com un de conjuntos
dinamicos, ya que se trata de conjuntos de datos cuyo cardinal y topologa (o relaciones)
van cambiando. La diferencia entre unos conjuntos dinamicos y otros residira en las op-
eraciones que pueden efectuarse sobre ellos. As, se van estudiando pilas, colas, listas
ligadas, tablas hash, arboles binarios de b usqueda, arboles equilibrados, etc. La seccion
4 introduce dos tecnicas de dise no de algoritmos, ambas orientadas a problemas de opti-
mizacion: la programacion dinamica y los algoritmos voraces, acompa nando los esquemas
generales de resolucion con ejemplos analizados minuciosamente. Tambien presenta varios
metodos de analisis de algoritmos, todos ellos dentro del esquema conocido como analisis
amortizado, y los aplica a un caso concreto: la gestion de tablas dinamicas. La seccion
5 continua el estudio de conjuntos dinamicos comenzado en la seccion 3, con arboles B,
montculos binomiales, montculos Fibonacci y varias estructuras especcas para represen-
tar conjuntos disjuntos. La seccion 6 esta dedicada al estudio de la estructura de datos
Grafo, las alternativas de representacion en memoria, algoritmos basicos: b usqueda en pro-
fundidad y en anchura, y problemas computacionales importantes denidos en terminos de
grafos: arboles de recubrimiento mnimos, caminos mnimos y ujo maximo. Por ultimo,
la seccion 7 es un compendio de temas avanzados que extienden y complementan las sec-
ciones anteriores. En general, cada captulo re une algoritmos sobre un area de aplicacion
concreta: redes de ordenacion, circuitos combinacionales aritmeticos, algoritmos paralelos,
operaciones con matrices, transformada de Fourier, teora de n umeros, reconocimiento de
cadenas y geometra computacional; pero tambien se incluyen en esta seccion un captulo
sobre problemas NP-completos problemas no resolubles en tiempo polinomico y otro
relacionado con el anterior dedicado a algoritmos aproximados.
Que contenidos de este libro son relevantes para el alumno de Algoritmos y Estructuras de
Datos? Es difcil dar una respuesta, por el volumen de los contenidos y por su distribucion.
En realidad, debido a la calidad y el rigor del libro, cualquier consulta sobre contenidos de
la asignatura merece la pena: analisis de recurrencias, pilas, colas y listas, arboles, grafos,
etc. Finalmente, si alg un alumno esta interesado en adquirirlo, debe saber que ya esta
disponible en libreras especializadas una segunda edicion, ampliada y mejorada , de este
magnco texto a un precio no menos magnco.
Libros disponibles s olo en el despacho del profesor
[6] E. Horowitz, S. Sahni. Fundamentals of Data Structures in Pascal. Computer Science Press /
W.H. Freeman and Company, 1994. 609 paginas.
Este texto se adapta bastante bien a los objetivos, estructura y contenidos de la asignatura.
Aunque solo se dispone de la version original en ingles, esto nunca llega a verse como
un inconveniente, debido a la buena factura de la edicion. El contenido se organiza en
10 captulos de complejidad creciente. Dentro de cada captulo cada apartado tiene su
propia lista de ejercicios, y al nal se proponen ejercicios adicionales, normalmente de una
complejidad mayor. Por otra parte, las explicaciones se ilustran con gran cantidad de
guras y ejemplos (escritos en un Pascal muy sencillo), ambos claramente separados del
texto, lo cual facilita enormemente la lectura.
El captulo 1 presenta los conceptos de algoritmo y de Tipo Abstracto de Dato, y examina
los metodos de analisis de algoritmos, complejidad espacial y temporal, notacion asintotica,
perl de ejecucion, etc. con numerosos ejemplos. Los captulos 2, 3 y 4 presentan los TAD
b asicos: arrays, pilas, colas y listas, as como sus aplicaciones mas comunes. El captulo 5
introduce conceptos basicos sobre arboles y estudia el TAD Arbol Binario: representacion
en memoria y operaciones. Este captulo tambien introduce varias de las encarnaciones
mas habituales de los arboles binarios: montculos, arboles binarios de b usqueda, etc. as
como una de sus aplicaciones mas importantes: la representacion de conjuntos. El captulo
6 dene el TAD Grafo y estudia sus posibles representaciones en memoria, as como las
operaciones basicas. Finalmente estudia dos de los problemas tpicos sobre grafos: arboles
de recubrimiento de coste mnimo y camino de coste mnimo entre dos nodos. El captulo 7
es el ultimo que tiene interes para un alumno de la asignatura; esta dedicado a la ordenacion,
sobre todo a la ordenacion sobre estructuras de datos en memoria sobre listas o sobre
arrays, o sobre listas que son arrays pero tambien a la ordenacion sobre cheros. Los
captulos 8, 9 y 10 exploran en profundidad estructuras mas complejas que quedan fuera
del temario de la asignatura: tablas hash, montculos (montculos max-min, montculos
binomiales, montculos Fibonacci y otros) y estructuras avanzadas de b usqueda (arboles
equilibrados, tries y otros), respectivamente.
En resumen, los captulos del 1 al 7 de este libro resultan de gran utilidad para profundizar
en los contenidos de la asignatura. Dado que solo se dispone de una copia, se recomienda
como texto de apoyo y sera necesario solicitar su consulta al profesor.

Anda mungkin juga menyukai