Livros de algoritmo sobre diversos tópicos


11

Fui encarregado de construir uma biblioteca de livros sobre algoritmos para nossa pequena empresa (cerca de 15 pessoas). O orçamento é superior a 5 mil, mas certamente inferior a 10 mil, para que eu possa comprar um número razoável de livros. Todas as pessoas aqui têm pelo menos um diploma de bacharel em ciências da computação ou áreas afins, portanto, enquanto eu vou receber alguns livros básicos como Cormen, estou mais interessado em bons livros sobre tópicos avançados. (Receberei os 4 volumes de Knuth, a propósito.)

Alguma lista de tópicos seria:

  • Algoritmos de classificação

  • Algoritmos de gráficos

  • Algoritmos de string

  • Algoritmos randomizados

  • Algoritmos distribuídos

  • Algoritmos combinatórios

  • etc.

Basicamente, estou procurando boas recomendações sobre livros sobre os principais tópicos do CS relacionados a algoritmos e estruturas de dados. Especialmente coisas que vão além do que normalmente é coberto nas classes de algoritmos e estrutura de dados como parte de um diploma de bacharel em uma boa escola. Sei que a pergunta é bastante confusa, pois estou procurando material genericamente útil. O software que desenvolvemos consiste principalmente de coisas no nível do sistema que lidam com grandes quantidades de dados.

O ideal também seria encontrar algo que cubra estruturas de dados e algoritmos interessantes bastante recentes, sobre os quais a maioria das pessoas talvez não tenha ouvido falar.


EDIT: Aqui estão alguns livros preliminares que acho que devo receber:

  • Introdução aos Algoritmos por Cormen et al.

  • Algorithm Design por Kleinberg, Tardos

  • A Arte da Programação por Computador Vol 1-4 por Knuth

  • Algoritmos de aproximação por Vazirani

  • O Projeto de Algoritmos de Aproximação de Williamson, Shmoys

  • Algoritmos Randomizados por Motwani, Raghavan

  • Introdução à Teoria da Computação por Sipser

  • Complexidade computacional por Arora, Barak

  • Computadores e intratabilidade de Garey e Johnson

  • Otimização combinatória da Schrijver

Alguns outros livros que meus colegas queriam que lidassem com técnicas e algoritmos para design de linguagem, compiladores e métodos formais são:

  • Tipos e idiomas de programação por Pierce

  • Princípios de verificação de modelo por Baier, Katoen

  • Compiladores: Princípios, técnicas e ferramentas de Aho, Lam, Sethi, Ullman

  • Manual do Design do Compilador: Otimizações e geração de código de máquina, segunda edição por Srikant, Shankar

  • O Manual da Coleta de Lixo: A Arte do Gerenciamento Automático de Memória por Jones, Hosking, Moss


Livros que todas as bibliotecas devem ter: * Projeto de algoritmo de Jon Kleinberg e Éva Tardos * Introdução à teoria da computação por Michael Sipser * Computadores e intratabilidade: um guia para a teoria da completude de NP por MR Garey e DS Johnson
Pål GD

> * Introdução à teoria da computação por Michael Sipser Este é um ótimo livro, mas trata mais de autômatos e linguagens, linguagens livres de contexto, máquinas de Turing, teoria da complexidade e assim por diante. Não se trata muito de algoritmos #
Devid

1
Uau, essa é uma pergunta ampla. Como você espera verificar a qualidade e a cobertura da seleção? Qual é a sua formação? Em que sua empresa trabalha? Você tem pessoas com mestrado ou doutorado?
Raphael

1
Aviso ao moderador: não poste respostas em um único livro e explique por que você está fazendo essas escolhas. Há um orçamento de US $ 5 mil aqui: explique como você o gastaria! Diga-nos quais livros você acha que devem ter, quais tópicos devem ser mais explorados, como você faz sua seleção ...
Gilles 'para- parar de ser mau'

Você está interessado principalmente em design ou também em análise de algoritmos? Em caso afirmativo, você deseja que seu pessoal seja competente na análise teórica ou prefere que eles sejam proficientes em meios mais práticos de avaliar a eficiência?
Raphael

Respostas:


13

Eu (quase) não li livros suficientes para nomear $ 5000 no valor deles. Portanto, vou sugerir alguns grupos de literatura que você deve cobrir e apontar para os representantes selecionados. Não posso afirmar que li a maioria dos livros por completo, por isso devo confiar principalmente em descrições, impressões superficiais e reputação. Analisei ou trabalhei com a maioria deles até certo ponto ou os recomendou por especialistas.

Suponho que você deseja que seu pessoal aprenda o que pode ser feito e como fazê-lo, em vez de aprender o que não pode fazer. Em particular, deixarei de fora livros sobre a teoria da computabilidade e da complexidade enquanto tais; Espero que seu pessoal tenha retirado as mensagens relevantes de sua graduação.

  • O básico
    Mesmo que seu pessoal os tenha aprendido em algum momento, espere que eles procurem o básico. Como fontes como a Wikipedia são frequentemente abaixo do padrão ou completamente erradas, você deseja obter os textos de referência adequados.

    As escolhas populares incluem

    • Introdução aos Algoritmos por Cormen, Leiserson et al.
      Introdução muito ampla, que abrange muitos algoritmos e estruturas de dados elementares, além de técnicas básicas de análise. Um texto padrão usado frequentemente para fins de ensino e disponível em sua 3ª edição (portanto, a maioria dos erros deveria ter sido eliminada agora). Muitos exercícios.
    • Algoritmos de Sedgewick e Wayne
      Outro texto padrão em sua quarta edição. Menos amplo que Cormen, mas com mais atenção aos detalhes da implementação. Muito material on-line, incluindo um curso gratuito sobre o Coursera . Muitos exercícios.
    • Introdução aos Algoritmos - Uma Abordagem Criativa de Udi Manber
      Também reduzimos a seleção de tópicos, mas apresentados com atenção à didática. O foco está nas estratégias indutivas . Contém muitos exercícios e soluções (ou pelo menos dicas) para alguns. Uma boa referência secundária se você não gostar do livro recomendado por causa de seu estilo incomum.
    • Matemática Concreta de Graham, Knuth e Patashnik
      Abrange a matemática discreta como relevante para a análise de algoritmos. Raro em seu foco nas necessidades e no rigor da ciência da computação . Qualidade muito alta. Muitos exercícios com soluções.
  • O

  • Pesquisas Avançadas

    • Estruturas de dados puramente funcionais da Okasaki
      Classic e da literatura básica geralmente se concentram no paradigma processual. Se você deseja trabalhar no paradigma funcional, novas técnicas para estruturas de dados eficientes são necessárias. Este livro é uma visão geral detalhada da área.
    • Estruturas de dados avançadas da Brass
      Às vezes, as técnicas básicas não são suficientes. Esta é uma visão geral sobre estruturas de dados avançadas, com código e muitas referências.
    • Algoritmia para problemas difíceis de Hromkovič A
      teoria da complexidade nos diz (como profissionais) que não devemos procurar algoritmos exatos e eficientes para muitos problemas naturais. Existem muitas técnicas para praticamente resolver esses problemas; Este texto mostra como.
  • Literatura especializada

    • Compiladores: princípios, técnicas e ferramentas, também conhecido como The Dragon Book de Aho et al.
      Se você precisar criar ou mexer com um compilador, este é o texto padrão na área.
    • Fluxos de rede: teoria, algoritmos e aplicativos de Ahuja
      Muitos problemas podem ser modelados como problemas de fluxo de rede; este livro oferece uma cobertura completa do campo.
    • Modelos Gráficos Probabilísticos de Koller e Friedman Os
      modelos gráficos são uma ferramenta importante em cenários de modelagem para aprendizado de máquina (entre outros) probabilisticamente. Esta é uma visão abrangente sobre o complexo. Existe um curso on-line gratuito relacionado .
    • Manual de algoritmos de correspondência exata de strings de Charras e Lecrog A
      correspondência de strings é uma tarefa sempre importante ao lidar com dados. Este livro lista a maioria (se não todos) os algoritmos relevantes para o trabalho, incluindo descrições de alto nível e implementações.
    • Combinatória analítica de Sedgewick e Flajolet
      O mergulho matemático profundo após "Uma introdução à análise de algoritmos" pelos mesmos autores. Não para todos, mas ouro para os interessados.
    • Algoritmos sobre cadeias, árvores e sequências de Gusfield
      Se você precisar lidar com grandes quantidades de dados de cadeias (em particular em contextos de biologia), este é o manual, pois fornece uma visão geral sobre as estruturas e algoritmos de dados relevantes.
  • Para o praticante

    • Padrões para programação paralela de Mattson et al.
      Na prática, convém utilizar várias máquinas para lidar com grandes problemas. Este livro é uma visão geral de alto nível, orientada a exemplos, sobre maneiras de fazer isso, que é como organizar e mover agentes de dados e computação. Ele também aborda maneiras de implementá-los com as ferramentas existentes.
    • Um guia para algoritmos experimentais de McGeoch
      Quando a análise teórica é muito difícil ou muito grossa, você deve realizar experimentos. Esta é uma introdução a como projetar adequadamente experimentos em algoritmos.
    • Referência definitiva do ANTLR 4 por Parr
      Você geralmente precisa de linguagens e ferramentas específicas do domínio para analisá-las. O ANTLR é um gerador de compilador maduro e conveniente, e este é o livro mais adequado para aprender como usá-lo. Parr também tem alguns outros livros sobre DSLs que vale a pena conferir.

Se você quiser material muito recente, considere o acesso de seu pessoal a periódicos e anais de conferências, talvez cooperando com uma biblioteca da universidade. Na verdade, você também pode deixá-los participar de conferências sobre tópicos relevantes para eles. sua empresa.

Além disso, considere perguntar ao seu pessoal. Faça com que eles façam suas próprias pesquisas (incluindo amostras ou cópias gratuitas na web ou bibliotecas) e dirão quais livros consideram relevantes para o trabalho. Não adianta comprar coisas que ninguém vai ler.


E, é claro, envie-os aqui com seus problemas interessantes. :)
Raphael


@Bartek: Nunca ouvi falar, por isso não posso recomendar.
Raphael

4

Aqui está uma coleção aleatória de livros sobre algoritmos avançados, com base no que considero um ótimo livro sobre algoritmos avançados. Claro que essa é apenas minha opinião pessoal e existem muitos outros bons livros.

  • Algoritmos de aproximação por Vijay V. Vazirani
  • O Projeto de Algoritmos de Aproximação por David P. Williamson, David B. Shmoys
  • Geometria computacional: uma introdução através de algoritmos aleatórios por Ketan Mulmuley
  • Algoritmos Randomizados por Rajeev Motwani, Prabhakar Raghavan
  • Algoritmos sobre cordas, árvores e seqüências de Dan Gusfield
  • Otimização combinatória por William J. Cook, William H. Cunningham, William R. Pulleyblank, Alexander Schrijver

você definitivamente deve considerar o livro Kleinberg / Tardos, que é apenas um ótimo livro.

Além disso, você deve saber que, em certos tópicos, existem "manuais" que fornecem uma visão geral enciclopédica sobre um campo (por exemplo, o Manual de Geometria Computacional). editado por JR Sack, J. Urrutia. Observe que esses manuais são caros. Portanto, comprá-los pode ajudá-lo a gastar 5k.


1
Você diz que esta é uma coleção "aleatória". Você tem motivos específicos para recomendar esses livros? O que o OP deve fazer com os US $ 4,5 mil restantes?
Raphael

4

Você não especifica em que sua empresa é especializada; portanto, não é fácil fornecer mais do que recomendações gerais. No geral, acho que a lista que você montou é muito boa e eu não removeria nada dela. Apenas algumas adições e comentários:

1) Cormen é um texto padrão. Sedgewick é outro texto padrão. Eu sempre aproveitei mais o Sedgewick, mas o YMMV. Você parece ter o orçamento. Compre ambos.

2) Não tenho uma cópia do "The Garbage Collection Handbook", mas tenho uma cópia bem manuseada da pesquisa anterior da Jones & Lin sobre coleta de lixo. Se você pretende fazer algum tipo de gerenciamento automatizado de memória, definitivamente compre este.

3) Você também tem vários livros úteis sobre análise e teoria de autômatos, mas está perdendo os dois livros (três volumes) que eu achei mais úteis: a Teoria da Análise de Sippu e Soisalon-Soisinen e as Técnicas de Análise de Dick Grune , um guia prático . O primeiro é uma ótima visão geral da teoria e o segundo, uma visão exaustiva da prática. (Por todos os meios, pegue o livro do dragão também. Mas aposto que você acabará usando mais o Grune.)

4) Toda biblioteca de estruturas de dados requer uma cópia das "Estruturas de Dados Puramente Funcionais" de Okasaki. Acho que nunca li nenhum livro tão magro com tantas idéias interessantes.

5) Eu não possuo uma cópia do "Algorithms on Strings" de Maxime Crochemore, mas gostaria de ter. Altamente prático, muitas idéias úteis.

  • Algoritmos em C ++ / Java / C (selecione um), Terceira Edição de Robert Sedgewick. Dois volumes. Addison-Wesley, 2001.

  • O Manual de Coleta de Lixo de Richard Jones, Antony Hosking e Eliot Moss.

  • Parsing Theory, de Seppo Sippu e Eljas Soisalon-Soininen. Dois volumes: vol. 1 Idiomas e análise; Vol. 2 Análise LR (k) e LL (k). Springer, 1988.

  • Técnicas de análise, um guia prático, segunda edição por Dick Grune e Ceriel JH Jacobs. Springer, 2008.

  • Estruturas de dados puramente funcionais por Chris Okasaki. Cambridge, 1998.

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

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.