¿Qué libros deberían leer todos?


229

[ Cronología ]


Esta pregunta tiene el mismo espíritu de qué documentos deben leer todos y qué videos deben ver todos . Pide libros notables en diferentes áreas de la informática teórica.

Los libros pueden estar orientados a las matemáticas, sin embargo, puede ser excelente para un científico de la computación. Ejemplos:

  • Probabilidad
  • Desigualdades
  • Lógica
  • Teoría de grafos
  • Combinatoria
  • Diseño y Análisis de Algoritmo
  • Teoría de la computación / Teoría de la complejidad computacional

Dedique cada respuesta a los libros del mismo tema (por ejemplo, libros sobre combinatoria).

Nota: El título puede ser engañoso. Aquí hay una aclaración: que X e Y sean dos campos en informática. Hay libros que todos

  • en el campo X debería leer.
  • en el campo Y debería leer.
  • en ambos campos deberia leer.

Esta pregunta busca los 3 casos. En otras palabras, NO es específico para este último caso.

Editar: según lo sugerido por Dai Le , resalte las razones por las que también le gusta el libro.


Temas relacionados:


Como no puedo responder a la pregunta, lo haré aquí. Matemáticas discretas - TTC: Matemáticas discretas por Arthur T. Benjamin. Es un paquete de conferencias sobre varios temas, desde teoría de conjuntos hasta gráficos y probabilidad.
Pithikos

Puede ser interesante comparar esta lista de libros notables con la lista de libros introductorios de ¿Hay una lista de los libros de texto introductorios canónicos que cubren las principales ramas de la informática? pregunta sobre reddit / compsci. Existe cierta superposición, pero afortunadamente las diferencias son suficientemente significativas.
Thomas Klimpel

Respuestas:


91

Complejidad computacional:

Si está buscando libros de texto de complejidad reciente. Los siguientes dos son imprescindibles.

La mayoría del contenido entre estos dos libros es comparable. Sin embargo, existen algunas diferencias clave: Goldreich dedica más espacio a explorar las bases conceptuales y filosóficas de la teoría de la complejidad, mientras que Arora / Barak cubre una selección más amplia de temas, incluidos modelos concretos de complejidad, computación cuántica y límites inferiores de circuitos que están en su mayoría ausentes. del primero.

Otra opción, un libro de texto antiguo pero intemporal en complejidad es:

0

Otro clásico (comparativamente) antiguo, pero bastante notable es:

Este es uno de los pocos / primeros libros de texto que incluye explícitamente "Proof Idea:" entre "Theorem:" y "Proof:", y es uno de los libros de texto matemáticos mejor escritos sobre cualquier tema. Por otro lado, es solo una introducción a la complejidad, dedicando solo un capítulo de 50 páginas a "temas avanzados" (incluyendo aproximación, algoritmos probabilísticos, IP = PSPACE y criptografía). Como primer libro sobre complejidad, o como un ejemplo de escritura verdaderamente excelente, este libro es excelente .

Scott Aaronson escribe que este libro tiene "la diversión de un libro popular con el peso intelectual de un libro de texto". Cuenta historias y ofrece muchos ejemplos y referencias entretenidos (Game of Life, y muchos otros ejemplos para máquinas completas de Turing). No profundiza demasiado en la teoría de la complejidad, pero tiene una gran amplitud. Especialmente notables son sus conexiones con la física estadística.


2
Como un aparte para aquellos interesados ​​en cómo estos libros se comparan entre sí, también puedo ofrecer esta reseña de Arora / Barak y Goldreich que escribí recientemente para la columna de reseñas de libros SIGACT.
Daniel Apon el

1
vea también la lista de Lance Fortnow de sus libros favoritos de Complejidad computacional en Amazon: amzn.com/l/22R1UX0Y9YRT2
Alessandro Cosentino

55
El único comentario sobre el libro de Sipser es que a veces usa nombres no estándar cuando cubre la teoría de la computabilidad. Por ejemplo, usa "reconocible" en lugar de "semi-decidible". Pero supongo que debido a que el libro de texto es tan ampliamente utilizado, podría llegar a ser estándar ahora.
Dai Le

44
PCFNP

1
He encontrado que Sipser es mucho más útil que Papadimitriou para enseñar realmente teoría de la complejidad, ymmv.
Jeff Burdges

49

NP-Completitud:

Bueno, supongo que las Computadoras e Intractabilidad de Garey y Johnson : una guía para la teoría de la integridad de NP se encontrará entre los mejores libros de esta lista.


66
Sigue siendo la mejor introducción a la teoría de la complejidad después de 30 años.
Emil

1
después de décadas de este libro sigue siendo la lista más completa de los problemas NP completos en un solo lugar, al parecer, casi una enciclopedia, y muchos investigadores cs parecen compartir este punto de vista
VZN

1
recomiendo que esto se agregue a las preguntas frecuentes para una pregunta general, "¿mi problema X NP está completo?" con la respuesta, "primero revise este libro primero y luego contáctenos"
vzn

47

Diseño y Análisis de Algoritmos:

Cormen, Thomas H., Charles E. Leiserson, Ronald L. Rivest y Clifford Stein. Introducción a los algoritmos.

R. Motwani, P. Raghavan. Algoritmos aleatorizados.

Encontré este libro sugerido por Ryan Williams en MathOverflow: Algorithm Design by Kleinberg & Tardos .

Otro libro excelente es Introducción a los algoritmos: un enfoque creativo de Udi Manber . Este libro no es un catálogo de algoritmos; más bien, trata de proporcionar al lector la intuición para "reconocer la estructura matemática en problemas abstractos". (citado de una revisión)


77
"Una introducción al análisis de algoritmos" de Sedgewick y Flajolet es genial.
Jay

Daniel Spielman utiliza el libro de Kleinberg y Tardos en su curso "Diseño y análisis de algoritmos". Lo tomé y realmente me encantó el libro. Lo encontré mucho más accesible que CLRS.
Alex Reinking


41

Sistemas de tipo y semántica del lenguaje de programación:

Tipos y lenguajes de programación de Benjamin Pierce y el volumen de seguimiento Temas avanzados en Tipos y lenguajes de programación . Proporcionan una visión general sólida pero comprensible del papel de la teoría de tipos en el diseño del lenguaje de programación, junto con el uso de la semántica operativa para expresar la semántica del lenguaje de programación.


77
Para una perspectiva más matemática sobre la teoría de tipos, "Lectures on the Curry-Howard Isomorphism" de Sorensen y Urzyczyn es un gran comienzo, ya que proporciona una buena visión general de los cálculos lambda mecanografiados hasta el cálculo de construcciones, y más allá.
Dominic Mulligan el

44
Sugeriría los Fundamentos de John Mitchell para lenguajes de programación sobre este tema. Como en el comentario anterior, está más madurado matemáticamente.
Artem Pelenitsyn

2
Votación a favor de TAPL. FYI Benjamin Pierce es uno de los autores de un nuevo libro "Software Foundation" que utiliza Coq.
kunjan kshetri

40

Desigualdades:

Otro libro valioso para cualquier persona en ciencias de la computación que quiera vincular cualquier cantidad (¡así, todos!) Es: La Clase Magistral Cauchy-Schwarz: Una Introducción al Arte de las Desigualdades Matemáticas por Michael Steele.

Un libro enciclopédico sobre el tema es Un diccionario de desigualdades . Si bien este no es un libro para leer de principio a fin, es bueno tenerlo a su disposición. Ver también el suplemento del libro.

Además, Wikipedia tiene una excelente lista de desigualdades .

Para temas específicos, puede consultar:


1
Si puedo agregar un enlace a algo que yo mismo recopilé (de muchas fuentes diferentes, incluidas algunas de las anteriores), aquí hay una hoja de trucos de desigualdades comunes: lkozma.net/inequalities_cheat_sheet
László Kozma

1
Hardy, Littlewood, Polya, "Desigualdades", una joya de la década de 1930 (?)
kodlu


33

Como Sylvain Peyronnet ya mencionó, la lógica es una parte importante de la informática teórica. Sin embargo, no es suficiente aprender lógica de los libros de texto diseñados para matemáticos puros. En otras palabras, también es importante aprender lógica desde una perspectiva más "informática".

Teoría de modelo finito

Queremos aprender técnicas que se ocupen de estructuras finitas. Es bien sabido que muchas herramientas tradicionales de la teoría de modelos, por ejemplo, la compacidad y el teorema de Löwenheim-Skolem, no son aplicables a los modelos finitos. Esto nos lleva al estudio de la teoría de modelos finitos . Para esta área, recomiendo los siguientes excelentes libros:

Una subárea de la teoría de modelos finitos es la complejidad descriptiva , donde queremos caracterizar las clases de complejidad por el tipo de lógica necesaria para definir los lenguajes. La referencia definitiva para la complejidad descriptiva es:

Complejidad de prueba

Otra área importante de la lógica en informática es la complejidad de la prueba , un estudio de la relación de tres vías entre las clases de complejidad, los sistemas lógicos débiles y el sistema de prueba proposicional. Se consideran los siguientes dos aspectos relacionados: (i) la complejidad de las pruebas de fórmulas proposicionales, y (ii) el estudio de teorías débiles de la aritmética, llamada aritmética acotada .

El aspecto (i) tiene que ver con la siguiente pregunta: "¿Existe un sistema de prueba proposicional en el que cada tautología tiene una prueba de polinomio de tamaño en el tamaño de la tautología?"

CVCVCC

PVPV

Para encuestas excelentes sobre la complejidad de la prueba, recomiendo los siguientes dos libros:

PV0

El libro de Krajíček es un poco más desafiante ya que asumió que los lectores ya están familiarizados con la lógica matemática y la teoría de modelos (o lo suficientemente dispuestos a aprender los antecedentes necesarios en el camino). Pero aprenderá mucho leyendo y entendiendo este libro.


32

Algoritmos Aleatorios:

Probabilidad e informática: algoritmos aleatorios y análisis probabilístico por Michael Mitzenmacher y Eli Upfal.

Gran libro para explicar los conceptos básicos de los algoritmos aleatorios. Los ejemplos y las pruebas se explican muy claramente y son fáciles de seguir. Además, los ejercicios son muy divertidos de hacer.

(respondida por Marcos Villagra)

Análisis de algoritmos aleatorizados:

Cualquier persona que trabaje en algoritmos debe tener Concentración de medida para el análisis de algoritmos aleatorios , que también está disponible para descargar en formato PDF aquí .


3
Este libro fue sugerido en otro tema (creo que por Suresh). Lo encontré excelente. Gracias a Aaron por mencionarlo aquí.
MS Dousti

29

Criptografía:

El libro de dos volúmenes Fundamentos de la criptografía de Oded Goldreich ( Volumen 1: Herramientas básicas y Volumen 2: Aplicaciones básicas ) es un excelente libro sobre el tema. (Los primeros borradores están disponibles en la página de inicio del autor ). También está disponible una versión abreviada de este libro.

Otro excelente libro es Introducción a la criptografía moderna: Principios y protocolos de Katz & Lindell.

Para aquellos interesados ​​en los antecedentes matemáticos de la criptografía, una introducción a la criptografía matemática por Hoffstein et al. Es la elección natural.

Otros libros excelentes son:


Temas Específicos:


2
Desde su introducción en 1993, los oráculos aleatorios se han utilizado ampliamente en la literatura; especialmente en esquemas de firma. No conozco un libro que cubra esta área adecuadamente. Las sugerencias son bienvenidas.
MS Dousti

1
Un libro sobre oráculos aleatorios sería de gran ayuda. No trabajo en criptografía, pero he leído Katz / Lindell de principio a fin. La transición del libro de texto a la literatura criptográfica fue difícil debido a esta razón específica. Además, @Sadeq, por curiosidad: ¿Alguno de los libros que ha leído tiene buena cobertura de rebobinado?
Daniel Apon

1
@Daniel: La tesis de Martin Gagné "Un estudio del modelo aleatorio del oráculo" (UC Davis, 2008) es una referencia relativamente buena sobre oráculos aleatorios (aunque todavía está lejos de estar completa). Con respecto a la pregunta de "rebobinado": no conozco un libro al respecto, pero creo que lo he entendido completamente. ¿Podría explicar qué parte le parece problemática? Incluso puedes preguntarlo sobre un tema aparte.
MS Dousti

@Sadeq, me inclino a no comenzar una pregunta independiente al respecto, porque equivaldría a poco más que "Ayuda, ¿qué es rebobinar?" :) La parte problemática es que el rebobinado no estaba en el libro de texto utilizado en el curso de criptografía que tomé (es decir, Katz / Lindell), por lo que nunca he visto una introducción al concepto. Soy consciente de que aparece regularmente en la literatura sobre criptografía, pero como alguien que no participa activamente en la investigación de criptografía, dudo que esté leyendo suficientes documentos para obtener una comprensión sólida del rebobinado con solo encontrarlo lo suficiente. Tal vez podría hacer una pregunta sobre los orígenes del rebobinado ...
Daniel Apon el

3
@Daniel: La introducción de mi libro con conocimiento cero concurrente explica el rebobinado y las dificultades inducidas por él en el contexto de la composición del protocolo. Otras fuentes son: (1) Oded Goldreich, Hugo Krawczyk: Sobre la composición de sistemas a prueba de conocimiento cero. SIAM J. Comput. 25 (1): 169-192 (1996) y (2) Cynthia Dwork, Moni Naor, Amit Sahai: Conocimiento cero concurrente. J. ACM 51 (6): 851-898 (2004).
Alon Rosen

25

Programacion Funcional

  • Estructuras de datos puramente funcionales de Chris Okasaki . La mayoría de los libros sobre estructuras de datos asumen un lenguaje imperativo como C o C ++. Sin embargo, las estructuras de datos para estos idiomas no siempre se traducen bien a lenguajes funcionales. Este libro es una de las mejores exposiciones sobre la implementación de estructuras de datos y algoritmos en un lenguaje funcional.
  • Programación funcional: práctica y teoría por Bruce J. Maclennan . A pesar de su nombre, este libro está más orientado a la teoría que a la práctica. Quienes lean este libro tendrán una visión mucho mejor del tema que quienes lo aprendan mediante programación ad-hoc.
  • Perlas de Diseño Funcional Algoritmo por Richard Bird . Una nueva exposición sobre el tema, que adopta el enfoque de solución de problemas y muestra la belleza del campo al exhibir ideas atractivas en el diseño de algoritmos funcionales.
  • Programación certificada con tipos dependientes por Adam Chlipala . Es uno de los mejores recursos para aprender Coq, y se centra en particular en cómo automatizar la certificación de programas y la prueba de teoremas utilizando sistemas basados ​​en lógica / reglas. Los ejemplos son extensos y fáciles de seguir.

21

Algoritmos de aproximación

El libro Algoritmos de aproximación de Vazirani es el mejor libro sobre el tema. Otro libro es Algoritmos de aproximación para problemas NP-difíciles de Hochbaum.

Aquí hay comparaciones de dos revisores:

He estado usando el libro de Dorit Hochbaum sobre algoritmos de aproximación para problemas NP-Hard como guía para mi trabajo. El libro de Hochbaum es, sin duda, excelente. Sin embargo, el formato de la encuesta comprometió un flujo suave a favor de reunir a las mejores personas en el campo. El libro de Vazirani corrige esto siendo tan suave y elegante de principio a fin. Excelentes conjuntos de problemas, excelentes sugerencias para la mayoría de los problemas, y hay una sección al final del libro dedicada a los problemas abiertos, que es una característica realmente genial.

y

He estado buscando libros relacionados con la resolución de problemas NP-complete y NP-hard aproximadamente. Hay otro libro de Hochbaum y yo también lo tengo. Desafortunadamente, ese libro es más un libro orientado a la investigación, ya que está escrito por varios investigadores. Es como leer varios trabajos de investigación dentro de dos tapas duras. Esto significa que uno debe tener una especie de nivel intermedio de experiencia con algoritmos de aproximación.

Un libro reciente es El diseño de algoritmos de aproximación de Williamson y Shmoys.


21

Combinatoria

Libros introductorios. Cualquiera de los siguientes libros puede servir como una excelente introducción al tema:

Textos más avanzados.


21

Combinatoria

Quiero citar Analytics Combinatorics , de Philippe Flajolet y Robert Sedgewick. Proporciona una sólida base matemática para la enumeración y el análisis de algoritmos. También quiero rendir homenaje a Philippe Flajolet, quien murió hace dos días y fue un gran matemático e informático.


20

Verificación del programa


1
Algunos de los libros (Manna y Apt et al.) Están bastante anticuados (Manna es de 1977 y Apt et al de 1991), el campo de la verificación de programas basada en la lógica ha visto un gran progreso en la última década. Por desgracia, no hay un texto actualizado disponible.
Martin Berger

@MartinBerger ¿Alguna pista sobre dónde se podría aprender este gran progreso, si no está en ningún libro de texto reciente?
Mitch

@ Mitch, me temo que aún no se ha escrito en los libros de texto. Tal vez mire algo de la literatura sobre herramientas interactivas como Isabelle / HOL y Coq. También observe las recientes herramientas de verificación automática como el "inferir" de Facebook y la teoría detrás de esto.
Martin Berger

Huth y Ryan son muy amigables para principiantes. Para alguien que no está muy familiarizado con todas las matemáticas rigurosas en CS, es un buen comienzo. ¡Es el primer libro que leo sobre el lado formal de CS y me ha enganchado desde entonces! También es el primer libro de texto que realmente terminé todas las lecturas.
RexYuan

19

Teoría de la información

Teoría de la información, inferencia y algoritmos de aprendizaje por David MacKay

Otros libros de texto famosos sobre teoría de la información se pueden encontrar en Wikipedia .


El título es "¿Qué libros deberían leer todos?", Por lo que la recomendación debe ser selectiva. Cualquiera puede encontrar una gran lista de libros sobre "teoría de la información" en Amazon / library, pero si solo tiene 2-3 opciones, ¿cuáles serán? ¡Solo debe recomendar libros o artículos que haya leído con mucho cuidado y reducir a sus favoritos absolutos!
Dai Le

1
@Dai Le: Tienes razón. Creo que la lista debería reducirse. (¡Soy personalmente responsable de inflar la lista!) Sin embargo, esta es una publicación wiki de la comunidad . Agregué una larga lista que sugiere qué candidatos son. Recorte la lista para incluir solo los libros más apropiados.
MS Dousti

1
@Sadeq: me temo que rara vez es el caso de que una persona recorte la lista de otra persona. Mientras la publicación todavía esté en la forma actual, no tiene ningún valor con respecto al propósito de la publicación.
Dai Le

@Dai: Tienes razón. Pero, como no soy un experto en "teoría de la información", no puedo recortar la lista yo mismo. Puedo: 1) eliminar la lista que agregué por completo (dejando la lista original), o 2) Agregar un aviso en el texto para llamar la atención de un experto. ¿Que sugieres?
MS Dousti

@Sadeq: tampoco trabajo en teoría de la información, de lo contrario ayudaría a recortar la lista. Sé que muchos recomiendan el libro "Thomas M. Cover, Joy A. Thomas. Elementos de la teoría de la información", incluido Lance Fortnow. Pero no estoy seguro de si todos deberían leerlo o no. Creo que debemos respetar el póster original ya que el libro podría ser su favorito. Por lo tanto, eliminar toda la lista es una buena opción. Realmente me disculpo por ser demasiado directo. ¿También podría pedirle a la gente que explique por qué sugieren sus libros?
Dai Le

19

Algoritmos distribuidos

Algoritmos distribuidos por Nancy Lynch Este es un texto clásico escrito por un pionero de la computación distribuida;

Introducción a los algoritmos distribuidos por Gerard Tel Muy buena introducción, también adecuada para cursos de pregrado; centrado en el modelo de transmisión de mensajes

Computación distribuida: fundamentos, simulaciones y temas avanzados por Hagit Attiya y Jennifer Welch Contiene materiales avanzados, adecuados para cursos de nivel de doctorado; se discuten los modelos de paso de mensajes y de memoria compartida

Diseño y análisis de algoritmos distribuidos Por Nicola Santoro Un libro relativamente reciente, puede usarse tanto a nivel de pregrado como de doctorado; los materiales se presentan con énfasis en el diseño del protocolo


19

Computación cuántica

Otros dos excelentes libros introductorios sobre el tema son:



17

Complejidad de comunicación:


Complejidad de comunicación de Eyal Kushilevitz y Noam Nisan.

Este es un libro clásico y muy bien escrito. Aunque ya es un poco viejo, sigue siendo el mejor libro de introducción al campo. Además, los ejercicios son extremadamente divertidos y se dan exactamente después de explicar los conceptos para que pueda arreglar lo que acaba de aprender.

La parte de la complejidad de la comunicación aleatoria debe complementarse con partes del primer libro.


Complejidad de la comunicación y computación paralela por Juraj Hromkovič.

Muy completo, aunque a veces un poco difícil de leer. Las explicaciones intuitivas son muy claras y muy buenos ejercicios. En la segunda parte presenta las conexiones a la computación paralela.


16

Otro, ideal para el análisis booleano de Fourier (como sugiere el título) y que cubre tanto los conceptos básicos, temas más avanzados y (muchas) aplicaciones, es el Análisis de funciones booleanas , de Ryan O'Donnell (2014). Está disponible en línea gratuitamente aquí también.
Clement C.

16

Álgebra Computacional

Como Shiva dijo en esta respuesta , la literatura en este campo está dispersa por todo el lugar, sin terminologías comunes. Se pueden encontrar referencias útiles buscando "cálculo simbólico", "teoría de la complejidad algebraica", "álgebra computacional" o "álgebra computacional". Como se sugiere en las respuestas a esta pregunta ,

Análisis computacional

Un campo interesante también, que se ocupa de los cálculos en funciones reales. También conocido como "análisis computable" o "cálculo computable".


16

Combinatoria

La función de generación , de Herbert S. Wilf, es una excelente introducción a la teoría de las funciones generadoras, escrita de manera fluida y llena de ejercicios. Si él escribe todos sus libros así, no puedo esperar para comenzar con otro.

Enumerative Combinatorics de Richard Stanley es una gran referencia (avanzada).

Combinatoria: temas, técnicas, algoritmos de Peter Cameron e Invitación a las Matemáticas Discretas de Matousek y Nesetril son buenas introducciones a la combinatoria.

La combinatoria aplicada de Roberts y Tesman es una referencia enciclopédica sobre combinatoria aplicada.



14

3
¿Cómo se compara esto con "Cómo resolverlo" de G. Polya? Creo que leí el consejo de que Polya es el original y mucho mejor, pero no estoy seguro y no puedo encontrarlo en las interwebs;)
DaveBall alias user750378

2
"Cómo resolverlo" de Polya (HTSI) aborda un tema diferente al libro de Velleman. Polya es una especie de rumia sobre cómo encontrar soluciones a problemas difíciles, mientras que Velleman es un libro de texto sobre cómo formalizar soluciones usando las convenciones y el lenguaje de las matemáticas. HTSI tiene información sobre pruebas, pero se presenta en una especie de "glosario" sin estructura, mientras que Velleman le presenta un plan de estudios sistemático con ejercicios. Vale la pena leer ambos, pero uno no reemplaza al otro.
Nate CK

13

Teoría de los números

Encontré varios libros frecuentemente citados en muchos periódicos. Son excelentes en el tema, pero algunos de ellos son bastante viejos. Aquí hay una lista de lo que recuerdo:


¿Qué opinas del libro de Rosen o las reimpresiones de Dover?
Mark C

@ Mark: También son buenos. ¿Por qué no editar la publicación y agregar esos libros también?
MS Dousti



11

Teoría de grafos

Para la introducción a la teoría de grafos: Introducción a la teoría de grafos de West

Más sobre teoría de grafos: Teoría de grafos de Bondy y Murty

El libro completo que contiene nuevos desarrollos, así como antiguos resultados clásicos en teoría de grafos:

Teoría de grafos: Reinhard Diestel .

Para gráficos en superficies con enfoque combinatorio:

Gráficos en superficies

Y para los dígrafos:

Dígrafos: teoría, algoritmos y aplicaciones


1
También está The Theory of Graphs de Claude Berge, uno de los fundadores de la teoría de gráficos. Y Gráficos y Algoritmos de Michel Minoux y Michel Gondran.
Lamine

9

Diseño VLSI

No estoy en el hardware. Sin embargo, como las preguntas frecuentes incluyen VLSI como uno de los subcampos de TCS, le pregunté a un experto sobre libros famosos en el diseño de VLSI. Aquí están:


En esta área, recomendaría este libro extremadamente legible: Síntesis y optimización de circuitos digitales por Giovanni De Micheli
Chan Li
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.