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
Respostas:
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 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.
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.
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.
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.
Técnicas básicas para análise precisa de algoritmos. Escrito pelos pioneiros do campo. Também tem um curso online gratuito .
A referência para algoritmos de alta qualidade, baixo nível e analisados com precisão para uma gama completa de problemas. Também serve como referência.
Pesquisas Avançadas
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.
À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.
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
Se você precisar criar ou mexer com um compilador, este é o texto padrão na área.
Muitos problemas podem ser modelados como problemas de fluxo de rede; este livro oferece uma cobertura completa do campo.
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 .
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.
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.
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
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.
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.
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.
fonte
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.
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.
fonte
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.
fonte