Existe uma enciclopédia de algoritmos? [fechadas]

34

Existe uma enciclopédia de algoritmos com estilo semelhante ao Manual de Matemática? Parece útil ter um grande número deles disponível em um só lugar. Eu sei que a arte da programação de computadores é considerada uma boa fonte, mas não parece enciclopédica nem instrutiva.

Nota do moderador

Estamos procurando respostas longas que forneçam alguma explicação e contexto. Não basta listar um livro: explique por que você está recomendando um livro ou recurso. Respostas que não explicam nada serão excluídas. Consulte Subjetivo bom, Subjetivo ruim para obter mais informações.

Engenheiro Mundial
fonte
Um pouco de pesquisa no Google ajudaria bastante a responder a essa pergunta. No mínimo, forneceria uma lista de bons candidatos que você poderia usar para fazer uma pergunta mais focada.
Caleb

Respostas:

41

Não tenho certeza se é isso que você está procurando, mas o NIST possui o Dicionário de algoritmos e estruturas de dados . É um dicionário bastante abrangente para estruturas de dados e algoritmos (doh) e geralmente é um bom local para procurar quando encontro algo sobre o qual nunca ouvi falar antes.

Vitor Py
fonte
Sua resposta é praticamente exatamente o que estou procurando. Pontos extras por ser gratuito.
Engenheiro Mundial
O engraçado é que, nos últimos dias, o NIST DADS está fechado até novo aviso por causa do desligamento do governo dos EUA! E então, quando milhares ouvido de desenvolvedores grito de uma vez ...
haylem
11

O livro Skiena também é uma boa referência: http://www.algorist.com/

O livro aborda tudo, desde o background até diferentes áreas problemáticas (estruturas de dados, pesquisa / classificação, problemas gráficos, combinações / permutações / heurísticas) e até os problemas dos problemas P vs NP-complete.

A seção particularmente relevante do livro para esta pergunta é um catálogo de aproximadamente 70 a 75 algoritmos diferentes, os tipos de entradas que eles geralmente exigem, a descrição geral do problema que um determinado algoritmo resolve e exemplos específicos de aplicações (por exemplo, o seção sobre árvores de sufixo discute seu uso de tentativas e sua aplicabilidade a substring e pesquisa). Sempre que possível, o autor também identifica implementações existentes para várias linguagens comuns (c, c ++, Java e outras).

Joe
fonte
Essa é a mais próxima de uma enciclopédia de algoritmos em que consigo pensar. Excelente livro!
Charalambos Paschalides
8

Estrutura e interpretação de programas de computador e a arte da programação de computadores são as mais próximas que eu já vi do que você procura.

O SICP percorre estruturas e algoritmos de dados comuns. Embora não seja enciclodédico, é muito bom cobrir uma ampla faixa de território em uma quantidade limitada de espaço.

O que pode ser dito sobre a arte da programação de computadores que ainda não foi. Tenha cuidado ao buscá-lo; você pode procurar um tópico específico e, horas depois, perceber que leu um volume de capa a capa. É uma ótima maneira de realmente levar sua programação para o próximo nível.

Michael Brown
fonte
5
O SICP é um livro maravilhoso, mas não acho que seja uma sugestão razoável para quem procura "uma enciclopédia de algoritmos". O SICP não tenta ser nada disso. Além disso, o OP escreveu que o ACP "não parece tão enciclopédico quanto instrutivo"; portanto, deve ficar claro que o SICP não é o que ele ou ela está procurando.
Caleb
Ótimo livro, mas não enciclopédico.
haylem
Tenho certeza de que eu disse que não é enciclopédico, mas fornece um bom tour pelos algoritmos. "Embora não seja enciclodédico, é muito bom cobrir uma ampla faixa de território em uma quantidade limitada de espaço". Sim, foi o que eu disse.
Michael Brown
8

Cormen, Leiserson, Rivest, Stein - "Intodução a algoritmos"

Introdução aos algoritmos, mais comumente conhecido como CLRS, é o livro de algoritmos padrão de um grande número de universidades. Ele abrange uma variedade de algoritmos para uma variedade de aplicações, incluindo classificação, pesquisa, teoria de grafos e computação numérica básica. Também inclui uma discussão detalhada das notações Big O, Big Omega e Big Theta. Uma crítica comum é que ele realmente não prepara alguém para projetar novos algoritmos, mas como uma enciclopédia ou dicionário de algoritmos, é mais do que suficiente.

Devo também observar que o CLRS também fornece conselhos sobre qual algoritmo usar quando e não apenas apresenta um índice genérico de algoritmos e estruturas de dados. É útil quando você tem uma tarefa que deseja realizar e deseja conselhos sobre a melhor forma de realizar isso. Existem melhores recursos para quando você sabe como deseja fazer o que está fazendo e precisa apenas de pseudo-código.

- dos comentários de @quanticle, abaixo

Dmitry Matveev
fonte
4
Você pode expandir sua resposta para incluir o que sobre este livro atende ao objetivo desta pergunta?
2
Introdução aos algoritmos , mais comumente conhecido como CLRS, é o livro de algoritmos padrão de um grande número de universidades. Ele abrange uma variedade de algoritmos para uma variedade de aplicações, incluindo classificação, pesquisa, teoria de grafos e computação numérica básica. Também inclui uma discussão detalhada das notações Big O, Big Omega e Big Theta. Uma crítica comum é que ele realmente não prepara alguém para projetar novos algoritmos, mas como uma enciclopédia ou dicionário de algoritmos, é mais do que suficiente.
Quanticle
1
Devo também observar que o CLRS também fornece conselhos sobre qual algoritmo usar quando e não apenas apresenta um índice genérico de algoritmos e estruturas de dados. É útil quando você tem uma tarefa que deseja realizar e deseja conselhos sobre a melhor forma de realizar isso. Existem melhores recursos para quando você sabe como deseja fazer o que está fazendo e precisa apenas de pseudo-código.
Quanticle
Dica para Dmitry: basta copiar os comentários do @ quanticle no corpo da resposta para tornar sua resposta 1000% mais impressionante.
nohat
5

Na faculdade de física, eu realmente gostei de receitas numéricas em C. É claro que não abrange todos os algoritmos, mas fornece excelentes explicações para muitos que são incrivelmente úteis nas ciências:

http://www.nr.com/

O livro aborda como resolver:

Equações lineares

  1. Equações lineares
  2. Interpolação e extrapolação
  3. Integração de funções
  4. Avaliação de Função
  5. Funções especiais, incluindo função gama, função beta, fatoriais
  6. Números aleatórios - incluindo uma boa explicação do que isso significa
  7. Algoritmos de classificação
  8. Encontrar raízes e equações não lineares
  9. Minimização e maximização de funções
  10. Eigensystems
  11. Transformações rápidas de Fourier
  12. FFT e análise espectral
  13. Descrição estatística dos dados
  14. Modelagem de dados
  15. Integração de equações diferenciais ordinárias
  16. Problemas de limite de dois pontos
  17. Equações integrais e limite inverso thory
  18. Equações diferenciais parciais
  19. Algoritmos "Outros", como verificações CRC e compactação de dados

Portanto, é tudo muito matemático, bom para os cientistas e para as pessoas que projetam mecanismos de física para jogos. E não apenas fornece os algoritmos, mas explica os porquês por trás deles, para que você possa usá-los corretamente. Não é o seu texto de codificação típico, mas exatamente o que você precisa quando precisa.

Eu confiei bastante nisso ao usar o método simplex em declive em multidimensões (uma caminhada na ameba) para análise de dados. Ainda tem minhas marcas de lápis. Ahh, bons tempos!

Daniel Williams PhD
fonte
1
Você pode expandir sua resposta para incluir o que sobre este livro atende ao objetivo desta pergunta?
4

Se você está procurando uma "enciclopédia de algoritmos", seria difícil dar errado com a Enciclopédia de Algoritmos . Não posso dizer que li (a US $ 399, é barato para uma enciclopédia ), mas a sinopse parece promissora:

A Enciclopédia de Algoritmos fornece um conjunto abrangente de soluções para problemas algorítmicos importantes para estudantes e pesquisadores, incluindo soluções de alto impacto da década mais recente.

Alguém já citou o Manual de design de algoritmo de Steven Skiena , mas acho que ninguém mencionou ainda o site associado de Skiena, o Repositório de algoritmos de Stony Brook . A partir do site:

Esta página da WWW pretende servir como uma coleção abrangente de implementações de algoritmos para mais de setenta dos problemas mais fundamentais em algoritmos combinatórios.

O livro é mais do que apenas um catálogo de algoritmos conhecidos; também é uma espécie de tutorial (no melhor sentido da palavra) sobre como decidir qual algoritmo usar para melhor se adequar ao seu problema e situação. O repositório, por outro lado, é de natureza mais enciclopédica. Ele não contém necessariamente muitos detalhes sobre como implementar cada algoritmo, mas explica o que o algoritmo faz e como ele funciona em geral, termos legíveis geralmente retirados do livro e fornece links para implementações reais de cada algoritmo. algoritmo.

Caleb
fonte
2

O Rosetta Code Wiki é uma ótima coleção de implementações de algoritmos comuns em várias línguas. Não é totalmente acadêmico, mas bastante informativo e divertido de percorrer.

Em suas próprias palavras:

O Código Rosetta é um site de programação excelente . A idéia é apresentar soluções para a mesma tarefa no maior número possível de idiomas, demonstrar como os idiomas são semelhantes e diferentes e ajudar uma pessoa com base em uma abordagem de um problema na aprendizagem de outra.

Sua principal vantagem sobre outros recursos (como o NIST Dictionary of Algorithms and Data Structures ) é que ele permite que você observe várias implementações para diferentes idiomas. O que pode ser útil para vários propósitos (comparar expressividade, verificar a viabilidade em um idioma ou outro, etc ...).

Por exemplo, a página QuickSort fornece (a partir de 07/10/2013) pelo menos 89 implementações.

haylem
fonte
você se importaria de explicar mais sobre o que faz e por que o recomenda como resposta à pergunta? "Respostas apenas para links" não são bem-vindas no Stack Exchange
gnat
@gnat: Geralmente concordaria, mas como isso é diferente em relação a uma resposta "apenas para referência de livros"? Além disso, acho que "a coleção de implementações de algoritmos comuns em várias linguagens" cobre praticamente o que faz. É também como (ou tão pouco) detalhou como a resposta aceita, se você olhar perto o suficiente :)
haylem
@gnat: de qualquer forma, acrescentou um pouco mais.
achou
@AnnaLear: desculpe, acho que sua edição estava perfeitamente certa em manter meu post curto e no caminho certo, mas parecia apropriado colocar a comparação de volta em relação às mudanças a pedido do gnat.
haylem
0

Embora existam livros instrutivos excelentes e atemporais sobre o assunto, dificilmente acho que você encontrará essa enciclopédia.

  • Uma enciclopédia sobre matemática cobre milênios de pesquisa. Os algoritmos, por outro lado, mal são estudados por um século (falando em uma escala maior). Todo o campo da ciência da computação mal é entendido por qualquer pessoa e a maioria das coisas ainda está se movendo rapidamente. Se houvesse uma enciclopédia sobre isso agora, acho que você poderia jogar 90% pela janela em 10 a 20 anos. E dos 10% que vale a pena guardar mais da metade já foi impresso meio século atrás. As vastas partes do manual de matemática estarão atualizadas daqui a cem anos.

  • A matemática é pura e independente. Isso dificilmente se aplica ao "campo dos algoritmos". Na verdade, dificilmente pode ser pensado como um campo, porque um campo geralmente opera em um espaço de problema bem definido, enquanto os algoritmos na verdade operam apenas em um espaço de solução menos definido.
    Portanto, se alguém compilar uma enciclopédia sobre algoritmos, não está realmente claro o que incluir, se você realmente deseja que seja abrangente. Teoria dos grafos? Álgebra Linear? Análise numérica?

No momento, o IMHO, o melhor recurso que cumpre o papel de uma enciclopédia, é "a internet" (eis). O objetivo de uma enciclopédia é ter um repositório indexado, abrangente e pesquisável de conhecimento (em algum tópico). Pessoalmente, acho essa lista e essa lista bastante esmagadoras. Também em outras respostas, vários excelentes bancos de dados de algoritmos foram vinculados.

Portanto, embora você não possa esperar o mesmo nível de qualidade que seria esperado de uma enciclopédia que enche sua estante de livros, você obtém o nível de pontualidade necessário para compensar os jovens da área que deseja conhecer.

back2dos
fonte
0

Quanto a fontes existentes, acho que a Wikipedia é a coisa mais próxima do que você está procurando. A saber, pode ser útil criar um "modelo de algoritmo" mais definido na Wikipedia para esse fim, mas isso é algo a ser discutido com os editores da Wikipedia e não aqui.

Uma observação rápida sobre a arte da programação de computadores : quando estiver concluída, incluirá um volume "sumário" e, embora isso não o ajude agora, pode ser aproximadamente o que você está procurando. O TAOCP é enciclopédico pelo que abrange, mas ainda não está completo, e a personalidade de Knuth é tal que ele não inclui coisas a menos que as tenha pesquisado exaustivamente.

muito tolo
fonte