Algoritmos Computacionales – Sara Baase, Allen Van Gelder – 3ra Edición

Algoritmos Computacionales

Por: /

Descripción

Este libro fue escrito para un curso completo sobre algoritmos; cuenta con suficiente material como para adoptar diversas orientaciones.

El objetivo del mismo incluye tres aspectos. Pretende enseñar algoritmos que se aplicarán en la resolución de problemas reales que se presentan a menudo en aplicaciones para computadora, enseñar principios y técnicas básicos de complejidad computacional $comportamiento de peor caso y caso promedio, consumo de espacio y cotas inferiores de la complejidad de un problema$, e introducir las áreas de los problemas NP-completos y los algoritmos paralelos.

Otra de las metas del libro, no menos importante que enseñar los temas que contiene, es desarrollar en el lector el hábito de siempre responder a un algoritmo nuevo con las preguntas: ¿Qué tan bueno es? ¿Hay una manera mejor? Por ello, en lugar de presentar una serie de algoritmos completos, «sacados de la manga», con su análisis, el libro normalmente comenta primero un problema, considera una o más estrategias para resolverlo $como podría hacer el lector que enfrenta el problema por primera vez$ y luego comienza a desarrollar un algoritmo, lo analiza y lo modifica o lo rechaza hasta obtener un resultado satisfactorio. $Los enfoques alternativos que finalmente se rechazan también se examinan en los ejercicios; para el lector es útil saber por qué se les rechazó.$

Preguntas del tipo de ¿Cómo puede hacerse esto de forma más eficiente? ¿Qué estructura de datos sería útil en este caso? ¿En qué operaciones debemos concentrarnos para analizar este algoritmo? ¿Qué valor inicial debe asignarse a esta variable $o estructura de datos$?, aparecen a menudo en todo el texto. Por lo general damos la respuesta inmediatamente después de la pregunta, pero sugerimos a los lectores hacer una pausa antes de continuar la lectura y tratar de idear su propia respuesta. El aprendizaje no es un proceso pasivo.

Tenemos la esperanza de que los lectores también aprendan a visualizar cómo se comporta en la realidad un algoritmo con diversas entradas; es decir, ¿Qué ramas sigue? ¿Qué patrón de crecimiento y encogimiento siguen las pilas? ¿Cómo afecta al comportamiento presentar las entradas en diferentes formas $por ejemplo, enumerando los vértices o aristas de un grafo en distintos órdenes$? Tales preguntas se plantean en algunos de los ejercicios, pero no hacemos hincapié en ellas en el texto porque requieren un estudio minucioso de los pormenores de un gran número de ejemplos.

1 Análisis de algoritmos y problemas: principios y ejemplos

1.1 Introducción

1.2 Java como lenguaje algorítmico

1.3 Antecedentes matemáticos

1.4 Análisis de algoritmos y problemas

1.5 Clasificación de funciones por su tasa de crecimiento asintótica

1.6 Búsqueda en un arreglo ordenado

2 Abstracción de datos y estructuras de datos básicas

2.1 Introducción

2.2 Especificación de TDA y técnicas de diseño

2.3 TDA elementales: listas y árboles

2.4 Pilas y colas

2.5 TDA para conjuntos dinámicos

3 Recursión e inducción

3.1 Introducción

3.2 Procedimientos recursivos

3.3 ¿Qué es una demostración?

3.4 Demostraciones por inducción

3.5 Cómo demostrar que un procedimiento es correcto

3.6 Ecuaciones de recurrencia

3.7 Árboles de recursión

4 Ordenamiento

4.1 Introducción

4.2 Ordenamiento por inserción

4.3 Divide y vencerás

4.4 Quicksort

4.5 Fusión de sucesiones ordenadas

4.6 Mergesort

4.7 Cotas inferiores para ordenar comparando claves

4.8 Heapsort

4.9 Comparación de cuatro algoritmos para ordenar

4.10 Shellsort

4.11 Ordenamiento por base

5 Selección y argumentos de adversario

5.1 Introducción

5.2 Determinación de max y min

5.3 Cómo hallar la segunda llave más grande

5.4 El problema de selección

5.5 Una cota inferior para la determinación de la mediana

5.6 Diseño contra un adversario

6 Conjuntos dinámicos y búsquedas

6.1 Introducción

6.2 Doblado de arreglos

6.3 Análisis de tiempo amortizado

6.4 Árboles rojinegros

6.5 Hashing (dispersión)

6.6 Relaciones de equivalencia dinámica y programas Unión-Hallar

6.7 Colas de prioridad con operación de decrementar clave

7 Grafos y recorridos de grafos

7.1 Introducción

7.2 Definiciones y representaciones

7.3 Recorrido de grafos

7.4 Búsqueda de primero en profundidad en grafos dirigidos

7.5 Componentes fuertemente conectados de un grafo dirigido

7.6 Búsqueda de primero en profundidad en grafos no dirigidos

7.7 Componentes biconectados de un grafo no dirigido

8 Problemas de optimización de grafos y algoritmos codiciosos

8.1 Introducción

8.2 Algoritmo de árbol abarcante mínimo de Prim

8.3 Caminos más cortos de origen único

8.4 Algoritmo de árbol abarcante mínimo de Kruskal

9 Cierre transitivo, caminos más cortos de todos los pares

9.1 Introducción

9.2 Cierre transitivo de una relación binaria

9.3 Algoritmo de Warshall para cierre transitivo

9.4 Caminos más cortos de todos los pares en grafos

9.5 Cálculo del cierre transitivo con operaciones de matrices

9.6 Multiplicación de matrices de bits: algoritmo de Kronrod

10 Programación dinámica

10.1 Introducción

10.2 Grafos de subproblema y su recorrido

10.3 Multiplicación de una sucesión de matrices

10.4 Construcción de árboles de búsqueda binaria óptimos

10.5 División de sucesiones de palabras en líneas

10.6 Desarrollo de un algoritmo de programación dinámica

11 Cotejo de cadenas

11.1 Introducción

11.2 Una solución directa

11.3 El algoritmo Knuth-Morris-Pratt

11.4 El algoritmo Boyer-Moore

11.5 Cotejo aproximado de cadenas

12 Polinomios y matrices

12.1 Introducción

12.2 Evaluación de funciones polinómicas

12.3 Multiplicación de vectores y matrices

12.4 La transformada rápida de Fourier y convolución

13 Problemas NP-completos

13.1 Introducción

13.2 P y NP

13.3 Problemas NP-completos

13.4 Algoritmos de aproximación

13.5 Llenado de cajones

13.6 Los problemas de la mochila y de la sumatoria de subconjunto

13.7 Coloreado de grafos

13.8 El problema del vendedor viajero

13.9 Computación por ADN

14 Algoritmos paralelos

14.1 Introducción

14.2 Paralelismo, la PRAM y otros modelos

14.3 Algunos algoritmos de PRAM sencillos

14.4 Manejo de conflictos de escritura

14.5 Fusión y ordenamiento

14.6 Determinación de componentes conectados

14.7 Una cota inferior para la suma de n enteros

A Ejemplos y técnicas en Java

A.1 Introducción

A.2 Un programa principal en Java

A.3 Una biblioteca de entrada sencilla

A.4 Documentación de clases de Java

A.5 Orden genérico y la interfaz "Comparable"

A.6 Las subclases extienden la capacidad de su superclase

A.7 Copiado a través de la interfaz "Clonable"

Consulta los datos bibliográficos principales de esta edición para identificar correctamente el recurso, revisar su autoría y verificar detalles como ISBN, tema, subtema, archivo e idioma.

¿Qué piensas de este libro?

3 comentarios
Avatar
3 COMENTARIOS
  1. Frank
    Frank

    Muchas gracias, excelente web para ayudar a los ingenieros sin recursos, enhorabuena.

  2. gerbacio
    gerbacio

    Maravilloso libro. Temas interesantes sobre complejidad algorítmica

  3. GERBACIO
    GERBACIO

    GERBACIO