Libros de algoritmos sobre una variedad de temas.

11

Me encargaron construir una biblioteca de libros sobre algoritmos para nuestra pequeña empresa (unas 15 personas). El presupuesto es más de 5k, pero ciertamente menos de 10k, por lo que puedo comprar una buena cantidad de libros. Todas las personas aquí tienen al menos una licenciatura en CS o un campo estrechamente relacionado, por lo que si bien obtendré algunos libros de texto básicos como Cormen, estoy más interesado en buenos libros sobre temas avanzados. (Obtendré los 4 volúmenes de Knuth, por cierto).

Alguna lista de temas sería:

  • Algoritmos de clasificación

  • Algoritmos de gráficos

  • Algoritmos de cadena

  • Algoritmos aleatorizados

  • Algoritmos distribuidos

  • Algoritmos combinatorios

  • etc.

Básicamente, estoy buscando buenas recomendaciones en libros sobre temas importantes dentro de CS relacionados con algoritmos y estructuras de datos. Especialmente cosas que van más allá de lo que generalmente se cubre en algoritmos y clases de estructura de datos como parte de una licenciatura en una buena escuela. Sé que la pregunta es bastante confusa, ya que estoy buscando material genéricamente útil. El software que desarrollamos es principalmente material de nivel de sistema que maneja grandes cantidades de datos.

Lo ideal también sería encontrar algo que cubriera estructuras y algoritmos de datos bastante recientes, de los que la mayoría de la gente no haya oído hablar.


EDITAR: Aquí hay algunos libros preliminares que creo que debería obtener:

  • Introducción a los algoritmos por Cormen et al.

  • Diseño de algoritmo por Kleinberg, Tardos

  • El arte de la programación de computadoras Vol 1-4 por Knuth

  • Algoritmos de aproximación de Vazirani

  • El diseño de algoritmos de aproximación por Williamson, Shmoys

  • Algoritmos aleatorizados por Motwani, Raghavan

  • Introducción a la teoría de la computación por Sipser

  • Complejidad computacional por Arora, Barak

  • Computadoras e Intractabilidad por Garey y Johnson

  • Optimización combinatoria de Schrijver

Algunos otros libros que mis colegas querían que trataran sobre técnicas y algoritmos para el diseño del lenguaje, compiladores y métodos formales son:

  • Tipos y lenguajes de programación de Pierce

  • Principios de verificación de modelos por Baier, Katoen

  • Compiladores: principios, técnicas y herramientas de Aho, Lam, Sethi, Ullman

  • The Compiler Design Handbook: Optimizations and Machine Code Generation, Second Edition by Srikant, Shankar

  • The Garbage Collection Handbook: The Art of Automatic Memory Management por Jones, Hosking, Moss

mtf
fuente
Libros que toda biblioteca debería tener: * Diseño de algoritmo por Jon Kleinberg y Éva Tardos * Introducción a la teoría de la computación por Michael Sipser * Computadoras e Intractabilidad: una guía a la teoría de la completitud NP por MR Garey y DS Johnson
Pål GD
> * Introducción a la teoría de la computación por Michael Sipser Este es un gran libro, pero trata más sobre autómatas e idiomas, lenguajes libres de contexto, máquinas de Turing, teoría de la complejidad, etc. No se trata mucho de algoritmos
Devid
1
Wow, esta es una pregunta amplia. ¿Cómo espera verificar la calidad y la cobertura de la selección? ¿Cuál es tu experiencia? ¿En qué trabaja su empresa? ¿Tienes personas con maestrías o doctorados?
Raphael
1
Aviso para el moderador: no publique respuestas de un solo libro y explique por qué está haciendo estas elecciones. Aquí hay un presupuesto de $ 5k: ¡explique cómo lo gastaría! Dinos qué libros crees que son imprescindibles, qué temas deberían explorarse más a fondo, cómo haces tu selección ...
Gilles 'SO- deja de ser malvado'
¿Está interesado principalmente en el diseño, o también en el análisis de algoritmos? Si es así, ¿desea que su gente se vuelva competente en el análisis teórico, o prefiere que sean competentes en medios más prácticos para evaluar la eficiencia?
Raphael

Respuestas:

13

No he (casi) leído suficientes libros para nombrarlos por un valor de $ 5000. Por lo tanto, sugeriré algunos grupos de literatura que debe cubrir, así como señalarle hacia representantes seleccionados. No puedo afirmar que he leído la mayoría de los libros en su totalidad, así que tengo que confiar principalmente en las descripciones, impresiones superficiales y reputación. He investigado o trabajado con la mayoría de ellos hasta cierto punto, o los he recomendado por expertos.

Supongo que quiere que su gente aprenda lo que se puede hacer y cómo hacerlo, en lugar de aprender lo que no pueden hacer. En particular, dejaré de lado los libros sobre computabilidad y teoría de la complejidad como tal; Espero que su gente se haya llevado los mensajes relevantes de su educación universitaria.

  • Lo básico
    Aunque su gente los haya aprendido en algún momento, espere que busquen lo básico. Dado que las fuentes como Wikipedia suelen ser de calidad inferior o totalmente erróneas, desea obtener los textos de referencia adecuados.

    Las opciones populares incluyen

    • Introducción a los algoritmos por Cormen, Leiserson et al.
      Introducción muy amplia que cubre muchos algoritmos elementales y estructuras de datos, así como técnicas básicas de análisis. Un texto estándar utilizado con frecuencia con fines didácticos y disponible en su tercera edición (por lo que la mayoría de los errores ya deberían haberse eliminado). Muchos ejercicios
    • Algoritmos de Sedgewick y Wayne
      Otro texto estándar en su cuarta edición. Menos amplio que Cormen, pero con más atención a los detalles de implementación. Gran cantidad de material en línea, incluido un curso gratuito en Coursera . Muchos ejercicios
    • Introducción a los algoritmos: un enfoque creativo de Udi Manber
      También una selección bastante delgada de temas, pero presentada con atención a la didáctica. El foco está en estrategias inductivas . Contiene muchos ejercicios y soluciones (o al menos pistas) para algunos. Una buena referencia secundaria si no le gusta el libro de texto recomendado debido a su estilo inusual.
    • Matemáticas concretas de Graham, Knuth y Patashnik
      Cubre las matemáticas discretas como relevantes para el análisis de algoritmos. Rara en su enfoque en las necesidades y rigor de la informática . Muy alta calidad. Muchos ejercicios con soluciones.
  • O

  • Encuestas Avanzadas

    • Las estructuras de datos puramente funcionales de Okasaki
      Classic y la literatura básica a menudo se centran en el paradigma de procedimiento. Si desea trabajar en el paradigma funcional, se necesitan nuevas técnicas para estructuras de datos eficientes. Este libro es una descripción detallada sobre el área.
    • Estructuras de datos avanzadas de Brass
      A veces, las técnicas básicas no son suficientes. Esta es una descripción general de las estructuras de datos avanzadas, con código y muchas referencias.
    • Algoritmos para problemas difíciles por Hromkovič
      La teoría de la complejidad nos dice (como profesionales) que no nos molestemos en buscar algoritmos exactos pero eficientes para muchos problemas naturales. Existen muchas técnicas para resolver prácticamente estos problemas; Este texto te muestra cómo.
  • Literatura especializada

    • Compiladores: principios, técnicas y herramientas, también conocido como The Dragon Book de Aho et al.
      Si alguna vez necesita construir o jugar con un compilador, este es el texto estándar en el área.
    • Flujos de red: teoría, algoritmos y aplicaciones de Ahuja
      Muchos problemas pueden modelarse como problemas de flujo de red; Este libro le ofrece una cobertura completa del campo.
    • Modelos gráficos probabilísticos de Koller y Friedman Los
      modelos gráficos son una herramienta importante en el modelado de escenarios para el aprendizaje automático (entre otros) probabilísticamente. Esta es una descripción completa sobre el complejo. Hay un curso en línea gratuito relacionado .
    • Manual de Algoritmos de coincidencia de cadenas exactas de Charras y Lecrog
      La coincidencia de cadenas es una tarea siempre importante cuando se trata de datos. Este libro enumera la mayoría (si no todos) los algoritmos relevantes para el trabajo, incluidas las descripciones de alto nivel y las implementaciones.
    • Combinatoria analítica de Sedgewick y Flajolet
      La inmersión matemática profunda después de "Una introducción al análisis de algoritmos" por los mismos autores. No para todos, pero oro para los interesados.
    • Algoritmos sobre cadenas, árboles y secuencias de Gusfield
      Si alguna vez tiene que lidiar con grandes cantidades de datos de cadenas (en particular en contextos de biología), este es el libro de referencia, ya que proporciona una visión general sobre las estructuras de datos y algoritmos relevantes.
  • Para el practicante

    • Patrones para programación paralela por Mattson et al.
      En la práctica, es posible que desee utilizar varias máquinas para hacer frente a grandes problemas. Este libro es un resumen de alto nivel basado en ejemplos sobre las formas de hacerlo, es decir, cómo organizar y mover datos y agentes informáticos. También aborda formas de implementarlos con las herramientas existentes.
    • Una guía de algoritmos experimentales de McGeoch
      Cuando el análisis teórico es demasiado difícil o demasiado tosco, debe realizar experimentos. Esta es una introducción a cómo diseñar correctamente experimentos en algoritmos.
    • La referencia definitiva de ANTLR 4 por Parr
      A menudo necesita herramientas y lenguajes específicos de dominio para analizarlos. ANTLR es un generador de compiladores maduro y conveniente, y este es el libro más adecuado para aprender a usarlo. Parr también tiene algunos otros libros sobre DSL que vale la pena consultar.

Si desea material muy reciente, debería considerar hacer que su gente acceda a revistas y actas de conferencias, tal vez cooperando con una biblioteca universitaria. También puede dejar que asistan a conferencias sobre temas relevantes para ellos resp. tu compañía.

Además, considere preguntarle a su gente. Pídales que hagan su propia investigación (incluidas muestras gratuitas o copias en la web o en las bibliotecas) y le dirán qué libros consideran relevantes para su trabajo. No sirve de nada comprar cosas que nadie leerá.

Rafael
fuente
Y, por supuesto, enviarlos aquí con sus interesantes problemas. :)
Raphael
2
¿Qué pasa con el manual de diseño de algoritmos ?
Bartosz Przybylski
@Bartek: Nunca he oído hablar de él, así que no puedo recomendarlo.
Raphael
4

Aquí hay una colección aleatoria de libros sobre algoritmos avanzados basados ​​en lo que considero un gran libro sobre algoritmos avanzados. Por supuesto, esta es solo mi opinión personal y hay muchos otros buenos libros.

  • Algoritmos de aproximación de Vijay V. Vazirani
  • El diseño de algoritmos de aproximación por David P. Williamson, David B. Shmoys
  • Geometría computacional: una introducción a través de algoritmos aleatorios por Ketan Mulmuley
  • Algoritmos aleatorizados por Rajeev Motwani, Prabhakar Raghavan
  • Algoritmos sobre cuerdas, árboles y secuencias de Dan Gusfield
  • Optimización combinatoria por William J. Cook, William H. Cunningham, William R. Pulleyblank, Alexander Schrijver

definitivamente deberías considerar el libro de Kleinberg / Tardos, que es solo un gran libro de texto.

También debe saber que en ciertos temas hay "manuales" que ofrecen una visión general enciclopédica sobre un campo (por ejemplo, el Manual de Geometría Computacional). editado por JR Sack, J. Urrutia. Tenga en cuenta que estos manuales son caros. Por lo tanto, comprarlos podría ayudarlo a gastar los 5k.

A.Schulz
fuente
1
Dices que esta es una colección "aleatoria". ¿Tiene razones particulares para recomendar esos libros? ¿Qué debe hacer el OP con los $ 4.5k restantes?
Raphael
4

No especifica en qué se especializa su empresa, por lo que no es fácil proporcionar más que recomendaciones generales. En general, creo que la lista que ha reunido es bastante buena, y no eliminaría nada de ella. Solo un par de adiciones y comentarios:

1) Cormen es un texto estándar. Sedgewick es otro texto estándar. Siempre he sacado más provecho de Sedgewick, pero YMMV. Parece que tienes el presupuesto. Compra ambos.

2) No tengo una copia del "Manual de recolección de basura", pero sí tengo una copia bien documentada de la encuesta anterior de Jones & Lin sobre recolección de basura. Si tiene la intención de hacer algún tipo de administración de memoria automatizada, definitivamente debería comprar esta.

3) También tiene varios libros útiles sobre análisis y teoría de autómatas, pero le faltan los dos libros (tres volúmenes) que he encontrado más útiles: la teoría de análisis de Sippu y Soisalon-Soisinen y las técnicas de análisis de Dick Grune , Una guía práctica . El primero es una gran descripción de la teoría, y el segundo una descripción exhaustiva de la práctica. (Por supuesto, consigue el libro del dragón también. Pero apuesto a que terminarás usando Grune más).

4) Cada biblioteca en estructuras de datos requiere una copia de las "Estructuras de datos puramente funcionales" de Okasaki. No creo haber leído ningún libro tan delgado con tantas ideas interesantes.

5) No tengo una copia de "Algorithms on Strings" de Maxime Crochemore, pero desearía tenerla. Muy práctico, muchas ideas útiles.

  • Algoritmos en C ++ / Java / C (seleccione uno), Tercera edición de Robert Sedgewick. Dos tomos Addison-Wesley, 2001.

  • The Garbage Collection Handbook por Richard Jones, Antony Hosking y Eliot Moss.

  • Teoría de análisis, por Seppo Sippu y Eljas Soisalon-Soininen. Dos volúmenes: vol. 1 Idiomas y análisis; Vol. 2 Análisis LR (k) y LL (k). Springer, 1988.

  • Técnicas de análisis, una guía práctica, segunda edición de Dick Grune y Ceriel JH Jacobs. Springer, 2008.

  • Estructuras de datos puramente funcionales de Chris Okasaki. Cambridge, 1998.

  • Algoritmos sobre cadenas de Maxime Crochemore, Christophe Hancart, Thierry Lecroq. Cambridge, 2007.

rici
fuente