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
Respuestas:
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 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
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
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.
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.
Técnicas básicas para el análisis preciso de algoritmos. Escrito por los pioneros del campo. También tiene un curso en línea gratuito .
La referencia para algoritmos de alta calidad, bajo nivel, analizados con precisión para una amplia gama de problemas. También sirve de referencia.
Encuestas Avanzadas
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.
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.
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
Si alguna vez necesita construir o jugar con un compilador, este es el texto estándar en el área.
Muchos problemas pueden modelarse como problemas de flujo de red; Este libro le ofrece una cobertura completa del campo.
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 .
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.
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.
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
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.
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.
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á.
fuente
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.
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.
fuente
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.
fuente