Que livros todos deveriam ler?


229

[ Linha do tempo ]


Essa pergunta tem o mesmo espírito de quais papéis todos deveriam ler e quais vídeos todos deveriam assistir . Ele pede livros notáveis ​​em diferentes áreas da ciência da computação teórica.

Os livros podem ser orientados para a matemática, mas você pode achar ótimo para um cientista da computação. Exemplos:

  • Probabilidade
  • Desigualdades
  • Lógica
  • Teoria dos grafos
  • Combinatória
  • Projeto e Análise de Algoritmo
  • Teoria da Computação / Teoria da Complexidade Computacional

Dedique cada resposta a livros do mesmo assunto (por exemplo, livros sobre combinatória).

Nota: O título pode ser enganoso. Aqui está um esclarecimento: sejam X e Y dois campos da ciência da computação. Existem livros que todo mundo

  • no campo X deve ler.
  • no campo Y deve ler.
  • em ambos os campos deve ler.

Esta questão busca todos os três casos. Em outras palavras, NÃO é específico para o último caso.

Editar: Como sugerido por Dai Le , destaque os motivos pelos quais você também gosta do livro.


Tópicos relacionados:


Como não posso responder à pergunta, farei aqui. Matemática Discreta - TTC: Matemática Discreta por Arthur T. Benjamin. É um pacote de palestras sobre vários tópicos, de Teoria dos Conjuntos a Gráficos e Probabilidade.
Pithikos 12/09

Pode ser interessante comparar esta lista de livros notáveis ​​com a lista de livros introdutórios do livro. Existe uma lista dos livros introdutórios canônicos que cobrem os principais ramos da ciência da computação? pergunta no reddit / compsci. Há alguma sobreposição, mas, felizmente, as diferenças são suficientemente significativas.
Thomas Klimpel 8/17

Respostas:


91

Complexidade computacional:

Se você está procurando por livros didáticos de complexidade recente. Os dois seguintes são obrigatórios.

A maioria do conteúdo entre esses dois livros é comparável. No entanto, existem algumas diferenças importantes: Goldreich dedica mais espaço para explorar a base conceitual e filosófica da teoria da complexidade, enquanto Arora / Barak cobre uma seleção mais ampla de tópicos, incluindo modelos concretos de complexidade, computação quântica e limites inferiores do circuito ausentes na maioria das vezes. do primeiro.

Outra opção, um livro antigo, mas atemporal, em complexidade é:

O livro de Papadimitriou é notável por capítulos que abordam a lógica de primeira ordem, bem como as classes SNP, MaxSNP 0 e APX (os fundamentos teóricos da dureza da aproximação), que estão ausentes nos textos mais modernos.0

Outro clássico (comparativamente) antigo, mas bastante notável é:

Este é um dos poucos / primeiros livros didáticos que inclui explicitamente "Prova de idéia:" entre "Teorema:" e "Prova:" e é um dos livros de matemática mais bem escritos sobre qualquer tópico. Por outro lado, é apenas uma introdução à complexidade, dedicando apenas um capítulo de 50 páginas a "tópicos avançados" (incluindo aproximação, algoritmos probabilísticos, IP = PSPACE e criptografia). Como um primeiro livro sobre complexidade, ou como um exemplo de redação realmente excelente, este livro é ótimo .

Scott Aaronson escreve que este livro tem "a diversão de um livro popular com o peso intelectual de um livro". Ele conta histórias e fornece muitos exemplos e referências divertidos (Game of Life, e muitos outros exemplos para máquinas completas de Turing). Não se aprofunda muito na teoria da complexidade, mas tem uma grande amplitude. Especialmente dignas de nota são suas conexões com a física estatística.


2
Além dos interessados ​​em comparar esses livros, também posso oferecer esta resenha de Arora / Barak e Goldreich que escrevi recentemente para a coluna de resenha do livro SIGACT.
precisa

11
ver também a lista de Lance Fortnow de seus livros favoritos Complexidade Computacional na Amazon: amzn.com/l/22R1UX0Y9YRT2
Alessandro Cosentino

5
O único comentário no livro de Sipser é que ele às vezes usa nomes fora do padrão ao abordar a teoria da computabilidade. Por exemplo, ele usa "reconhecível" em vez de "semi-decidível". Mas acho que, já que o livro é tão amplamente usado, ele pode se tornar o padrão agora.
Dai Le

4
PCFNP

11
Achei Sipser muito mais útil que Papadimitriou para ensinar teoria da complexidade, sim.
Jeff Burdges

49

NP-Completeness:

Bem, acho que os computadores e a intratabilidade de Garey e Johnson : um guia para a teoria da completude da NP serão encontrados entre os principais livros desta lista.


6
Ainda é a melhor introdução à teoria da complexidade após 30 anos.
Emil

11
depois de décadas este livro ainda é a mais completa lista de NP problemas completos em um único lugar, aparentemente, quase uma enciclopédia, e muitos pesquisadores cs parecem partilhar este ponto de vista
vzn

11
recomendamos que este seja adicionado às Perguntas frequentes para uma pergunta geral "meu problema está X NP completo?" com resposta, "1º verifique este livro primeiro e depois volte para nós"
vzn 20/01/12

47

Projeto e Análise de Algoritmos:

Cormen, Thomas H., Charles E. Leiserson, Ronald L. Rivest e Clifford Stein. Introdução aos algoritmos.

R. Motwani, P. Raghavan. Algoritmos randomizados.

Encontrei este livro sugerido por Ryan Williams no MathOverflow: Algorithm Design by Kleinberg & Tardos .

Outro excelente livro é Introdução aos algoritmos: uma abordagem criativa de Udi Manber . Este livro não é um catálogo de algoritmos; ao contrário, tenta fornecer ao leitor intuição para "reconhecer a estrutura matemática em problemas abstratos". (citado de uma revisão)


7
"Uma introdução à análise de algoritmos", de Sedgewick e Flajolet, é ótima.
Jay

Daniel Spielman usa o livro de Kleinberg e Tardos em seu curso "Design and Analysis of Algorithms". Eu peguei e realmente amei o livro. Achei muito mais acessível que o CLRS.
Re


41

Sistemas de tipos e semântica da linguagem de programação:

Tipos e linguagens de programação de Benjamin Pierce e o volume de acompanhamento Tópicos avançados em Tipos e linguagens de programação . Eles fornecem uma visão geral sólida, porém compreensível, do papel da teoria dos tipos no design da linguagem de programação, além de usar a semântica operacional para expressar a semântica da linguagem de programação.


7
Para uma perspectiva mais matemática da teoria dos tipos, "Palestras sobre o isomorfismo Curry-Howard", de Sorensen e Urzyczyn, é um ótimo começo, fornecendo uma boa visão geral dos cálculos lambda-datilografados até o Cálculo de Construções e além.
Dominic Mulligan

4
Eu sugeriria o artigo de John Mitchell Foundations for Programming Languages ​​sobre esse tópico. Como no comentário anterior, é mais matematicamente amadurecido.
Artem Pelenitsyn

2
Voto positivo para TAPL. FYI Benjamin Pierce é um dos autores de um novo livro "Software Foundation" que usa Coq.
Kunjan kshetri

40

Desigualdades:

Outro livro valioso para qualquer um na ciência da computação que queira vincular qualquer quantidade (então, todo mundo!) É: A classe principal de Cauchy-Schwarz: uma introdução à arte das desigualdades matemáticas por Michael Steele.

Um livro enciclopédico sobre o tema é Um dicionário de desigualdades . Embora este livro não seja para leitura de capa a capa, é bom tê-lo à sua disposição. Veja também o suplemento do livro.

Além disso, a Wikipedia possui uma excelente lista de desigualdades .

Para tópicos específicos, você pode consultar:


11
Se eu pode adicionar um link para algo que eu mesmo coletado (de muitas fontes diferentes, incluindo alguns dos acima), aqui está uma folha de fraude das desigualdades comuns: lkozma.net/inequalities_cheat_sheet
László Kozma

11
Hardy, Littlewood, Polya, as "desigualdades", uma jóia de 1930 (?)
kodlu


33

Como Sylvain Peyronnet já mencionou, a lógica é uma parte importante da ciência da computação teórica. No entanto, não é suficiente aprender lógica de livros didáticos elaborados para matemáticos puros. Em outras palavras, também é importante aprender lógica de uma perspectiva mais "informática".

Teoria do Modelo Finito

Queremos aprender técnicas que lidam com estruturas finitas. É sabido que muitas ferramentas tradicionais da teoria dos modelos, por exemplo, compacidade e teorema de Löwenheim-Skolem, não são aplicáveis ​​a modelos finitos. Isso nos leva ao estudo da Teoria dos Modelos Finitos . Para esta área, recomendo os seguintes excelentes livros:

Uma subárea da teoria de modelos finitos é a complexidade descritiva , na qual queremos caracterizar as classes de complexidade pelo tipo de lógica necessária para definir as linguagens. A referência definitiva para a complexidade descritiva é:

Complexidade de prova

Outra área importante da lógica na ciência da computação é a Proof Complexity , um estudo de relações de três vias entre classes de complexidade, sistemas lógicos fracos e sistema de prova proposicional. Os dois aspectos relacionados a seguir são considerados: (i) a complexidade de provas de fórmulas proposicionais e (ii) o estudo de teorias fracas da aritmética, denominadas aritmética limitada .

O aspecto (i) tem a ver com a seguinte pergunta: "Existe um sistema de prova proposicional em que toda tautologia tem uma prova de tamanho polinomial no tamanho da tautologia?"

CVCVCC

PVPV

Para excelentes pesquisas sobre a complexidade da prova, recomendo os dois livros a seguir:

PV0

O livro de Krajíček é um pouco mais desafiador, pois ele assumiu que os leitores já estão familiarizados com a lógica matemática e a teoria dos modelos (ou dispostos o suficiente para aprender os antecedentes necessários ao longo do caminho). Mas você aprenderá muito lendo e compreendendo este livro.


32

Algoritmos Aleatórios:

Probabilidade e computação: algoritmos randomizados e análise probabilística por Michael Mitzenmacher e Eli Upfal.

Ótimo livro para explicar o básico de algoritmos aleatórios. Os exemplos e provas são explicados com muita clareza e são fáceis de seguir. Além disso, os exercícios são muito divertidos de fazer.

(respondido por Marcos Villagra)

Análise de Algoritmos Aleatórios:

Qualquer pessoa que trabalhe com algoritmos deve ter Concentração de Medida para Análise de Algoritmos Aleatórios , que também está disponível para download em formato PDF aqui .


3
Este livro foi sugerido em outro tópico (acho que por Suresh). Achei excelente. Agradecemos a Aaron por mencioná-lo aqui.
MS Dousti 22/11/2010

29

Criptografia:

O livro de dois volumes, Foundations of Cryptography, de Oded Goldreich ( Volume 1: Ferramentas básicas e Volume 2: Aplicativos básicos ) é um excelente livro sobre o assunto. (Os primeiros rascunhos estão disponíveis na página inicial do autor .) Também está disponível uma versão abreviada deste livro.

Outro excelente livro é Introdução à criptografia moderna: princípios e protocolos de Katz & Lindell.

Para aqueles interessados ​​em conhecimentos matemáticos de criptografia, Uma Introdução à Criptografia Matemática, de Hoffstein et al. é a escolha natural.

Outros livros excelentes são:


Tópicos Específicos:


2
Desde sua introdução em 1993, oráculos aleatórios têm sido amplamente utilizados na literatura; especialmente em esquemas de assinatura. Não conheço um livro que cubra essa área adequadamente. Sugestões são bem vindas.
MS Dousti 22/11/2010

11
Um livro sobre oráculos aleatórios seria uma grande ajuda. Não trabalho com criptografia, mas li Katz / Lindell de frente para trás. A transição do livro didático para a literatura criptográfica foi difícil por esse motivo específico. Além disso, @Sadeq, por curiosidade: algum dos livros que você leu tem uma boa cobertura de rebobinagem?
Daniel Daniel Apon

11
@ Daniel: A tese de Martin Gagné "Um estudo do modelo aleatório do Oracle" (UC Davis, 2008) é uma referência relativamente boa em oráculos aleatórios (embora ainda esteja longe de estar completa). Com relação à pergunta "rebobinar": eu não conheço um livro sobre isso, mas acho que o compreendi completamente. Você poderia elaborar qual parte lhe parece problemática? Você pode até perguntar sobre um tópico separado.
MS Dousti 24/11/10

@Sadeq, estou inclinado a não iniciar uma pergunta independente sobre isso, porque seria um pouco mais do que "Ajuda, o que está rebobinando?" :) A parte problemática é que rebobinar não estava no livro usado no curso de criptografia que eu fiz (por exemplo, Katz / Lindell), então nunca vi uma introdução ao conceito. Estou ciente de que aparece regularmente na literatura de criptografia, mas como alguém que não está envolvido ativamente na pesquisa de criptografia, duvido que esteja lendo artigos suficientes para obter uma sólida compreensão de rebobinar apenas encontrando o suficiente. Talvez eu pudesse fazer uma pergunta sobre as origens de rebobinagem ...
Daniel Apon

3
@ Daniel: A introdução do meu livro concomitante zero conhecimento explica a rebobinagem e as dificuldades induzidas por ele no contexto da composição do protocolo. Outras fontes são: (1) Oded Goldreich, Hugo Krawczyk: Sobre a composição de sistemas à prova de zero conhecimento. SIAM J. Comput. 25 (1): 169-192 (1996) e (2) Cynthia Dwork, Moni Naor, Amit Sahai: Concomitante zero conhecimento. J. ACM 51 (6): 851-898 (2004).
Alon Rosen

25

Programação Funcional

  • Estruturas de dados puramente funcionais por Chris Okasaki . A maioria dos livros sobre estruturas de dados assume uma linguagem imperativa como C ou C ++. No entanto, as estruturas de dados para esses idiomas nem sempre traduzem bem para idiomas funcionais. Este livro é uma das melhores exposições sobre a implementação de estruturas de dados e algoritmos em uma linguagem funcional.
  • Programação Funcional: Prática e Teoria por Bruce J. Maclennan . Apesar do nome, este livro é mais orientado por teoria do que por prática. Quem ler este livro terá uma visão muito melhor do assunto do que quem o aprender por meio de programação ad-hoc.
  • Pérolas do algoritmo funcional Design por Richard Bird . Uma exposição totalmente nova sobre o assunto, que adota a abordagem de solução de problemas e mostra a beleza do campo, exibindo idéias atraentes no design de algoritmos funcionais.
  • Programação certificada com tipos dependentes por Adam Chlipala . É um dos melhores recursos para aprender Coq, e se concentra em particular em como automatizar a certificação de programas e a comprovação de teoremas usando sistemas lógicos / baseados em regras. Exemplos são extensos e fáceis de seguir.

21

Algoritmos de Aproximação

O livro Algoritmos de Aproximação de Vazirani é o melhor livro sobre o assunto. Outro livro é Algoritmos de aproximação para problemas NP-difíceis de Hochbaum.

Aqui estão comparações de dois revisores:

Eu tenho usado o livro de Dorit Hochbaum sobre algoritmos de aproximação para problemas NP-Hard como uma diretriz para o meu trabalho. O livro de Hochbaum é, sem dúvida, fantástico. No entanto, o formato da pesquisa comprometeu um fluxo suave a favor de reunir as melhores pessoas no campo. O livro de Vazirani corrige isso sendo tão suave e elegante do começo ao fim. Excelentes conjuntos de problemas, excelentes dicas para a maioria dos problemas e há uma seção no final do livro dedicada a problemas em aberto, que é um recurso muito interessante.

e

Tenho procurado livros relacionados à solução de problemas NP-completos e NP-difíceis aproximadamente. Há outro livro de Hochbaum e eu também o tenho. Infelizmente, esse livro é mais um livro orientado para a pesquisa, pois é escrito por vários pesquisadores. É como ler vários trabalhos de pesquisa em duas capas. Isso significa que é preciso ter um tipo de nível intermediário de experiência com algoritmos de aproximação.

Um livro recente é O design de algoritmos de aproximação de Williamson e Shmoys.


21

Combinatória

Livros introdutórios. Qualquer um dos seguintes livros pode servir como uma excelente introdução ao assunto:

Textos mais avançados.


21

Combinatória

Quero citar a Analytic Combinatorics , de Philippe Flajolet e Robert Sedgewick. Ele fornece uma sólida base matemática para enumeração e análise de algoritmos. Quero também prestar homenagem a Philippe Flajolet, que morreu há dois dias e foi um grande matemático e cientista da computação.


20

Verificação do Programa


11
Alguns dos livros (Manna e Apt et al.) São bastante datados (Manna é de 1977 e Apt et al desde 1991), o campo da verificação de programas baseados em lógica tem visto grandes progressos na última década. Infelizmente, não há texto atualizado disponível.
Martin Berger

@MartinBerger Alguma dica de onde esse grande progresso pode ser aprendido, se não estiver em nenhum livro recente?
Mitch

@ Mitch: Receio que ainda não tenha sido escrito nos livros didáticos. Talvez veja uma literatura sobre ferramentas interativas como Isabelle / HOL e Coq. Veja também as ferramentas recentes de verificação automática, como o "inferir" do Facebook e a teoria por trás dele.
Martin Berger

Huth & Ryan é muito amigável para iniciantes. Para alguém que não está muito familiarizado com toda a matemática rigorosa no CS, é um bom começo. É o primeiro livro que li sobre o lado formal do CS e me viciei desde então! É também o primeiro livro que terminei todas as leituras.
RexYuan

19

Teoria da Informação

Teoria da informação, inferência e algoritmos de aprendizagem por David MacKay

Outros livros famosos sobre teoria da informação podem ser encontrados na Wikipedia .


O título é "Quais livros todos devem ler?", Portanto, a recomendação deve ser seletiva. Qualquer pessoa pode encontrar uma grande lista de livros sobre "teoria da informação" na Amazon / biblioteca, mas se você tiver apenas duas ou três opções, quais serão? Você só deve recomendar livros ou artigos que tenha lido com muito cuidado e restringir seus favoritos absolutos!
Dai Le

11
@Dai Le: Você está certo. Eu acho que a lista deve ser reduzida. (Eu sou pessoalmente responsável por inchar a lista!) No entanto, este é um post da comunidade . Eu adicionei uma longa lista sugerindo o que são candidatos. Corte a lista para incluir apenas os livros mais adequados.
MS Dousti

11
@Sadeq: Receio que raramente seja o caso de uma pessoa reduzir a lista de outra pessoa. Enquanto a postagem ainda estiver na forma atual, ela será totalmente inútil com relação ao objetivo da postagem.
Dai Le

@Dai: Você está certo. Mas, como não sou especialista em "teoria da informação", não posso cortar a lista sozinho. Posso: 1) excluir completamente a lista que adicionei (saindo da lista original) ou 2) Adicionar um aviso no texto para chamar a atenção de um especialista. O que você sugere?
MS Dousti

@Sadeq: Também não trabalho com teoria da informação, caso contrário, ajudaria a aparar a lista. Eu sei que o livro "Thomas M. Cover, Joy A. Thomas. Elementos da teoria da informação" é recomendado por muitos, incluindo Lance Fortnow. Mas não tenho certeza se todos devem ler ou não. Acho que devemos respeitar o pôster original, já que o livro pode ser o favorito dele. Portanto, excluir a lista inteira é uma boa opção. Peço desculpas por ser muito direto. Você também pode pedir às pessoas que expliquem por que sugerem seus livros?
Dai Le

19

Algoritmos distribuídos

Algoritmos distribuídos por Nancy Lynch Este é um texto clássico escrito por um pioneiro da computação distribuída;

Introdução a algoritmos distribuídos por Gerard Tel Introdução muito boa, também adequada para cursos de graduação; focado no modelo de transmissão de mensagens

Computação distribuída: fundamentos, simulações e tópicos avançados de Hagit Attiya e Jennifer Welch Contém materiais avançados, adequados para cursos de nível de doutorado; são discutidos os modelos de passagem de mensagem e memória compartilhada

Projeto e análise de algoritmos distribuídos Por Nicola Santoro Um livro relativamente recente, pode ser usado tanto nos níveis de graduação quanto de doutorado; os materiais são apresentados com ênfase no desenho do protocolo


19

Computação quântica

Dois outros excelentes livros introdutórios sobre o assunto são:



17

Complexidade da comunicação:


Complexidade da comunicação por Eyal Kushilevitz e Noam Nisan.

Este é um livro clássico e muito bem escrito. Embora um pouco velho até agora, ainda é o melhor livro introdutório para o campo. Além disso, os exercícios são extremamente divertidos e são dados exatamente após a explicação dos conceitos, para que você possa corrigir o que acabou de aprender.

A parte da complexidade da comunicação aleatória deve ser complementada com partes do primeiro livro.


Complexidade da comunicação e computação paralela por Juraj Hromkovič.

Muito completo, embora às vezes um pouco difícil de ler. As explicações intuitivas são exercícios muito claros e muito agradáveis. Na segunda parte, apresenta as conexões com a computação paralela.


16

Outro, ótimo para a análise de Bierean Fourier (como o título sugere) e que abrange os conceitos básicos, tópicos mais avançados e (muitas) aplicações, é Analysis of Boolean Functions , de Ryan O'Donnell (2014). Também está disponível online gratuitamente aqui .
Clement C.

16

Álgebra Computacional

Como Shiva disse nesta resposta , as literaturas nesse campo estão espalhadas por todo o lugar, sem terminologias comuns. Pode-se encontrar referências úteis pesquisando "computação simbólica", "teoria da complexidade algébrica", "álgebra computacional" ou "álgebra computacional". Conforme sugerido nas respostas a esta pergunta ,

Análise Computacional

Um campo interessante também, que lida com cálculos em funções reais. Também conhecido como "análise computável" ou "cálculo computável".


16

Combinatória

generatorfunctionology , de Herbert S. Wilf, é uma excelente introdução à teoria de gerar funções, escrita de maneira suave e repleta de exercícios. Se ele escreve todos os seus livros assim, mal posso esperar para começar outro.

A Combinatória Enumerativa de Richard Stanley é uma ótima referência (avançada).

Combinatória: tópicos, técnicas, algoritmos de Peter Cameron e Convite para Matemática Discreta de Matousek e Nesetril são boas introduções à combinatória.

A Applied Combinatorics de Roberts e Tesman é uma referência enciclopédica sobre combinatória aplicada.



14

3
Como isso se compara a "Como resolver" de G. Polya? Acho que eu li o conselho que Polya é o original e muito melhor, mas eu não tenho certeza e não pode reencontrar-lo nas interwebs;)
DaveBall aka user750378

2
"How to Solve It" (HTSI) de Polya aborda um assunto diferente do livro de Velleman. A Polya é uma espécie de ruminação sobre como encontrar soluções para problemas difíceis, enquanto Velleman é um livro sobre como formalizar soluções usando as convenções e a linguagem da matemática. O HTSI tem informações sobre provas, mas é apresentado em uma espécie de formulário "glossário" sem estrutura, enquanto Velleman apresenta um currículo sistemático com exercícios. Vale a pena ler ambos, mas um não substitui o outro.
Nate CK

13

Teoria dos Números

Encontrei vários livros frequentemente citados em muitos artigos. Eles são excelentes no assunto, mas alguns deles são bastante antigos. Aqui está uma lista do que me lembro:


O que você acha do livro de Rosen ou das reimpressões de Dover?
Mark C

@ Mark: Eles também são bons. Por que não editar a postagem e adicionar esses livros também?
MS Dousti 6/03/11



11

Teoria dos grafos

Para introdução à teoria dos grafos: Introdução à teoria dos grafos por West

Mais sobre teoria dos grafos: Teoria dos grafos de Bondy e Murty

O livro abrangente que contém novos desenvolvimentos, bem como resultados clássicos antigos na teoria dos grafos:

Teoria dos grafos: Reinhard Diestel .

Para gráficos em superfícies com abordagem combinatória:

Gráficos em superfícies

E para os digrafos:

Digrafos: Teoria, Algoritmos e Aplicações


11
Há também The Theory of Graphs, de Claude Berge, um dos fundadores da teoria dos grafos. E gráficos e algoritmos de Michel Minoux e Michel Gondran.
Lamine

9

Projeto VLSI

Eu não gosto de hardware. No entanto, como as perguntas frequentes incluem o VLSI como um dos subcampos do TCS, perguntei a um especialista sobre livros famosos no design do VLSI. Aqui estão eles:


Nesta área, eu recomendaria este livro extremamente legível: Síntese e otimização de circuitos digitais por Giovanni De Micheli
Chan Li
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.