Existe-t-il une encyclopédie d'algorithmes dans le style similaire au manuel des mathématiques? Il semble utile d'avoir un grand nombre d'entre eux disponible au même endroit. Je sais que l'art de la programmation informatique est considéré comme une bonne source, mais cela ne semble pas l'encyclopédie autant instructif.
Note du modérateur
Nous recherchons des réponses longues qui fournissent des explications et un contexte. Ne laissez pas simplement lister un livre: veuillez expliquer pourquoi Vous recommandez un livre ou une ressource. Les réponses qui n'expliquent rien seront supprimées. Voir Bon subjectif, mauvais, subjectif Pour plus d'informations.
Je ne sais pas si c'est ce que vous recherchez mais que NIST a le Dictionnaire des algorithmes et des structures de données . C'est un dictionnaire assez complet pour les structures de données et les algorithmes (DOH) et généralement un bien à regarder lorsque je trouve quelque chose que je n'ai jamais entendu auparavant.
Le livre Skiena est une bonne référence également: http://www.algorist.com/
Le livre couvre tout, de l'arrière-plan à travers différents problèmes (structures de données, recherches/tri, problèmes de graphique, combinaisons/permutations/heurtuations) et même les problèmes des problèmes de P VS NP-Complets.
La section particulièrement pertinente du livre à cette question est un catalogue d'algorithmes différents différents, les types d'intrants dont ils exigent généralement, la description globale du problème des résousts d'algorithme particuliers et des exemples spécifiques d'applications (par exemple, la La section sur le suffixe des arbres discute de son utilisation des essais et de son applicabilité de sous-chaîner et de rechercher). Dans la mesure du possible, l'auteur identifie également les implémentations existantes pour diverses langues ordinaires (C, C++, Java et quelques autres.)
Structure et interprétation des programmes informatiques et le art de la programmation informatique sont les plus proches que j'ai vus à ce que vous recherchez.
SICP traverse des structures et des algorithmes de données communes. Bien que ce ne soit pas encyclodpédique, il est assez bon de couvrir une large bande de territoire dans une quantité limitée d'espace.
Que peut-on dire sur l'art de la programmation informatique qui n'a pas déjà été. Soyez prudent lorsque vous le ramenez, vous pourriez y aller pour un sujet spécifique et des heures plus tard, réalisez plus tard que vous avez lu un volume de la couverture pour couvrir. C'est un excellent moyen de vraiment prendre votre programmation au niveau suivant.
Cormen, Leiserson, Rivest, Stein - "Intoxication aux algorithmes"
Introduction aux algorithmes, plus communément appelée CLRS, est le manuel d'algorithmes standard dans un grand nombre d'universités. Il couvre une gamme d'algorithmes pour une variété d'applications, notamment le tri, la recherche, la théorie des graphes et le calcul numérique de base. Il comprend également une discussion détaillée sur Big O, Big Oméga et Big Theta Notation. Une critique commune est qu'elle ne prépare pas vraiment à concevoir de nouveaux algorithmes, mais comme une encyclopédie ou un dictionnaire d'algorithmes, c'est plus que suffisant.
Je devrais également noter que les CLRS donnent également des conseils sur lesquels l'algorithme à utiliser lorsque, et ne vient pas de présenter un indice générique d'algorithmes et de structures de données. C'est utile lorsque vous avez une tâche que vous souhaitez accomplir et que vous souhaitez obtenir des conseils sur la meilleure façon d'y aller. Il existe de meilleures ressources pour quand vous savez comment vous voulez faire ce que vous faites et que vous avez juste besoin de pseudo-code.
- des commentaires de @Quanticle, ci-dessous
Dans l'école d'études supérieures de physique, j'ai vraiment apprécié des recettes numériques à C. Il ne couvre pas tous les algorithmes, bien sûr, mais donne d'excellentes explications de nombreuses personnes incroyablement utiles dans les sciences:
Le livre couvre comment résoudre:
Équations linéaires
C'est donc tout très mathématique, bon pour les scientifiques ainsi que pour les personnes conçues des moteurs de physique pour les jeux. Et cela ne donne pas seulement aux algorithmes mais explique les whys derrière eux afin que vous puissiez les utiliser correctement. Pas votre texte de codage typique, mais exactement ce dont vous avez besoin lorsque vous en avez besoin.
Je l'appuyai lourdement lorsque vous utilisez la méthode de la Downhill Simplex dans des multidimensions (une marche d'AMOEBA) pour analyse de données. A toujours mes marques de crayon. Ahh, bons moments!
Si vous recherchez une "Encyclopédie d'algorithmes", il serait difficile d'aller mal avec Encyclopédie d'algorithmes . Je ne peux pas dire que je l'ai lu (à 399 $, c'est bon marché pour une encyclopédie), mais le Blurb semble prometteur:
L'encyclopédie des algorithmes fournit un ensemble complet de solutions à des problèmes algorithmiques importants pour les étudiants et les chercheurs, y compris des solutions à impact élevé de la dernière décennie.
Quelqu'un déjà cité Steven Skiena le manuel design d'algorithme , mais je ne pense pas que quiconque ait déjà mentionné le site Web associé de Skiena, le référentiel d'algorithmes de Stony Brook . Du site Web:
Cette page web est destinée à servir de collection complète d'implémentations d'algorithmes pendant plus de soixante-dix des problèmes les plus fondamentaux des algorithmes combinatoires.
Le livre est plus qu'un simple catalogue d'algorithmes connus; C'est aussi une sorte de tutoriel (dans le meilleur sens du mot) sur la manière de décider de l'algorithme à utiliser pour correspondre au mieux à votre problème et à votre situation. Le référentiel, d'autre part, est de nature plus encyclopédique. Il ne contient pas nécessairement beaucoup de détails sur la manière de mettre en œuvre chaque algorithme vous-même, mais il explique ce que l'algorithme fait et comment cela fonctionne en général, des termes lisibles souvent pris du livre et fournissent des liens vers des implémentations réelles pour chaque algorithme.
Le Wiki du code Rosetta est une grande collection d'implémentations d'algorithmes communs dans plusieurs langues. Ce n'est pas entièrement académique, mais assez informatif et amusant à parcourir.
Dans leurs propres mots:
Le code Rosetta est une programmation chrestomathie site. L'idée est de présenter des solutions à la même tâche dans autant de langues différentes que possible, de démontrer la manière dont les langues sont similaires et différentes et d'aider une personne à mettre à la base une approche d'un problème dans l'apprentissage d'un autre.
Son principal avantage par rapport à d'autres ressources (comme le NIST Dictionnaire des algorithmes et des structures de données ) est qu'il vous permet de regarder plusieurs implémentations pour différentes langues. Ce qui peut être utile à diverses fins (comparer l'expressivité, vérifier la faisabilité dans une langue ou une autre, etc.).
Par exemple, le Quicksort Page fournit (à partir de 2013-10-07) au moins 89 implémentations.
Bien qu'il existe des livres instructifs excellents et intemporels sur le sujet, je pense à peine, vous trouverez une telle encyclopédie.
Une encyclopédie sur les mathématiques couvre des millénaires de recherche. Les algorithmes d'autre part sont à peine étudiés pendant un siècle (parlant à plus grande échelle). L'ensemble du domaine de l'informatique est à peine compris par quiconque et la plupart des choses se déplacent encore rapidement. S'il y avait une encyclopédie à ce moment-là, je suppose que vous pourriez jeter 90% de la fenêtre en 10-20 ans. Et de la valeur de 10% de plus que la moitié était déjà imprimée il y a un demi-siècle. Les vastes parties du manuel des mathématiques seront à jour dans cent ans à partir de maintenant.
Les mathématiques sont pure et autonome. Cela ne s'applique guère à "le champ d'algorithmes". En fait, cela peut difficilement être considéré comme un champ, car un champ fonctionne généralement sur un espace problématique bien défini, tandis que les algorithmes fonctionnent réellement dans un espace de solution plus moins bien défini.
Donc, si l'on pouvait compiler une encyclopédie sur des algorithmes, il n'est pas vraiment clair quoi d'inclure, si vous voulez vraiment qu'il soit complet. La théorie des graphes? Algèbre linéaire? Analyse numérique?
IMHO, à l'heure actuelle, la meilleure ressource qui remplit le rôle d'une encyclopédie, est "Internet" (voici). Le point d'une encyclopédie est d'avoir un référentiel indexé, complet et interrogeable de connaissances (sur un sujet). Personnellement, je trouve les deux cette liste et cette liste assez accablant. Également dans d'autres réponses, de nombreuses excellentes bases de données d'algorithmes ont été liées.
Ainsi, alors que vous ne pouvez pas vous attendre au même niveau de qualité que vous l'attendez d'une encyclopédie qui remplit votre bibliothèque, vous obtenez le niveau de rapidité nécessaire pour compenser les jeunes du champ que vous souhaitez connaître.
En ce qui concerne les sources existantes, je pense que Wikipedia est la chose la plus proche de ce que vous recherchez. À l'esprit, il pourrait être utile de créer un "modèle d'algorithme" plus défini sur Wikipedia à cette fin, mais c'est quelque chose à discuter avec les éditeurs de Wikipedia et non ici.
Une note rapide sur l'art de la programmation informatique: lorsqu'il est terminé, il est d'inclure un volume "Résumé" et, bien que cela ne vous aide pas maintenant, il pourrait s'agir de ce que vous recherchez . TACP est encyclopédique pour ce qu'il couvre, mais ce n'est pas encore complet et la personnalité de Knut est telle qu'il n'inclut pas les choses à moins d'être exhaustive les recherchées.