J'ai été chargé de construire une bibliothèque de livres sur les algorithmes pour notre petite entreprise (environ 15 personnes). Le budget est supérieur à 5k, mais certainement inférieur à 10k, donc je peux acheter un bon nombre de livres. Tous les gens ici ont au moins un baccalauréat en sciences sociales ou dans un domaine étroitement lié, alors même si je vais obtenir des manuels de base comme Cormen, je suis plus intéressé par de bons livres sur des sujets avancés. (J'obtiendrai les 4 volumes de Knuth, BTW.)
Une liste de sujets serait:
Algorithmes de tri
Algorithmes de graphe
Algorithmes de chaîne
Algorithmes randomisés
Algorithmes distribués
Algorithmes combinatoires
etc.
Essentiellement, je recherche de bonnes recommandations sur des livres sur des sujets majeurs au sein de CS liés aux algorithmes et aux structures de données. Surtout des choses qui vont au-delà de ce qui est généralement couvert dans les cours d'algorithme et de structure de données dans le cadre d'un baccalauréat dans une bonne école. Je sais que la question est assez floue, car je recherche du matériel génériquement utile. Les logiciels que nous développons sont principalement des éléments de niveau système gérant de grandes quantités de données.
L'idéal serait également de trouver tout ce qui couvrirait des structures de données et des algorithmes sympas assez récents, dont la plupart des gens n'auraient peut-être pas entendu parler.
EDIT: Voici quelques livres préliminaires que je pense que je devrais obtenir:
Introduction aux algorithmes par Cormen et al.
Conception d'algorithmes par Kleinberg, Tardos
L'art de la programmation informatique Vol 1-4 par Knuth
Algorithmes d'approximation par Vazirani
La conception d'algorithmes d'approximation par Williamson, Shmoys
Algorithmes randomisés par Motwani, Raghavan
Introduction à la théorie du calcul par Sipser
Complexité informatique par Arora, Barak
Ordinateurs et intractabilité par Garey et Johnson
Optimisation combinatoire par Schrijver
Quelques autres livres que mes collègues voulaient qui traitent des techniques et algorithmes pour la conception de langage, des compilateurs et des méthodes formelles sont:
Types et langages de programmation par Pierce
Principes de vérification des modèles par Baier, Katoen
Compilateurs: principes, techniques et outils par Aho, Lam, Sethi, Ullman
The Compiler Design Handbook: Optimizations and Machine Code Generation, Second Edition by Srikant, Shankar
The Garbage Collection Handbook: The Art of Automatic Memory Management par Jones, Hosking, Moss
Réponses:
Je n'ai pas (presque) lu suffisamment de livres pour en nommer 5 000 $. Par conséquent, je vais suggérer certains groupes de littérature que vous devriez couvrir et vous diriger vers des représentants sélectionnés. Je ne peux pas prétendre avoir lu la plupart des livres en entier, je dois donc me fier principalement aux descriptions, à l'impression superficielle et à la réputation. J'ai examiné ou travaillé avec la plupart d'entre eux dans une certaine mesure, ou je les ai recommandés par des experts.
Je suppose que vous voulez que vos employés apprennent ce qui peut être fait et comment le faire, par opposition à ce qu'ils ne peuvent pas faire. En particulier, je laisserai de côté les livres sur la théorie de la calculabilité et de la complexité en tant que tels; J'attends de votre peuple qu'il retire les messages pertinents de ses études de premier cycle.
Les bases
Même si votre personnel les a apprises à un moment donné, attendez-vous à ce qu'elles recherchent les bases. Étant donné que des sources telles que Wikipédia sont souvent de qualité inférieure ou carrément erronées, vous souhaitez leur fournir des textes de référence appropriés.
Les choix populaires incluent
Introduction très large qui couvre de nombreux algorithmes élémentaires et structures de données ainsi que des techniques d'analyse de base. Un texte standard utilisé fréquemment à des fins pédagogiques et disponible dans sa 3e édition (donc la plupart des erreurs auraient dû être purgées maintenant). Beaucoup d'exercices.
Un autre texte standard dans sa quatrième édition. Moins large que Cormen, mais avec plus d'attention aux détails de mise en œuvre. Beaucoup de matériel en ligne, y compris un cours gratuit sur Coursera . Beaucoup d'exercices.
Également plutôt mince une sélection de sujets, mais présentés avec une attention particulière à la didactique. L'accent est mis sur les stratégies inductives . Contient de nombreux exercices et solutions (ou du moins des astuces) pour certains. Une bonne référence secondaire si vous n'aimez pas le manuel recommandé en raison de son style inhabituel.
Couvre les mathématiques discrètes pertinentes à l'analyse algorithmique. Rare dans sa focalisation sur les besoins et la rigueur en informatique. De très haute qualité. Beaucoup d'exercices avec des solutions.
Techniques de base pour une analyse précise des algorithmes. Écrit par les pionniers du domaine. Dispose également d'un cours en ligne gratuit .
La référence pour les algorithmes de haute qualité, de bas niveau, analysés avec précision pour toute une gamme de problèmes. Sert également de référence.
Enquêtes avancées
Classic et la littérature de base se concentrent souvent sur le paradigme procédural. Si vous voulez travailler dans le paradigme fonctionnel, de nouvelles techniques pour des structures de données efficaces sont nécessaires. Ce livre est un aperçu détaillé de la région.
Parfois, les techniques de base ne suffisent pas. Ceci est un aperçu des structures de données avancées, avec du code et de nombreuses références.
La théorie de la complexité nous dit (en tant que praticiens) de ne pas prendre la peine de chercher des algorithmes exacts mais efficaces pour de nombreux problèmes naturels. Il existe de nombreuses techniques pour résoudre pratiquement ces problèmes; ce texte vous montre comment.
Littérature spécialisée
Si vous avez besoin de construire ou de bricoler avec un compilateur, c'est le texte standard sur la zone.
De nombreux problèmes peuvent être modélisés comme des problèmes de flux de réseau; ce livre vous donne une couverture complète du domaine.
Les modèles graphiques sont un outil majeur dans la modélisation probabiliste de scénarios d'apprentissage automatique (entre autres). Ceci est un aperçu complet du complexe. Il existe un cours en ligne gratuit connexe .
String matching est une tâche toujours importante lors du traitement des données. Ce livre répertorie la plupart (sinon la totalité) des algorithmes pertinents pour le travail, y compris les descriptions de haut niveau ainsi que les implémentations.
La plongée mathématique profonde après "Une introduction à l'analyse des algorithmes" par les mêmes auteurs. Pas pour tout le monde, mais de l'or pour les intéressés.
Si jamais vous deviez traiter d'énormes quantités de données de chaînes (en particulier dans des contextes de biologie), c'est le livre de référence car il fournit un aperçu des structures de données et des algorithmes pertinents.
Pour le praticien
En pratique, vous souhaiterez peut-être utiliser plusieurs machines pour faire face à de gros problèmes. Ce livre est un aperçu de haut niveau, basé sur des exemples, sur les façons de le faire, c'est-à-dire comment organiser et déplacer des données et des agents informatiques. Il aborde également les moyens de les mettre en œuvre avec les outils existants.
Lorsque l'analyse théorique est trop difficile ou trop grossière, vous devez effectuer des expériences. Ceci est une introduction à la façon de concevoir correctement des expériences sur des algorithmes.
Vous avez souvent besoin de langages et d'outils spécifiques au domaine pour les analyser. ANTLR est un générateur de compilateur mature et pratique, et c'est le livre le mieux adapté pour apprendre à l'utiliser. Parr a également quelques autres livres sur les DSL qui valent la peine d'être consultés.
Si vous voulez du matériel très récent, vous devriez envisager d'avoir accès à vos revues et actes de conférence, peut-être en coopérant avec une bibliothèque universitaire. Vous pouvez également les laisser assister à des conférences sur des sujets qui les concernent resp. votre entreprise.
Pensez également à demander à votre peuple. Demandez-leur de faire leurs propres recherches (y compris des échantillons gratuits ou des copies sur le Web ou dans les bibliothèques) et ils vous diront quels livres ils jugent pertinents pour leur travail. Il n'y a aucune utilité à acheter des trucs que personne ne lira.
la source
Voici une collection aléatoire de livres sur les algorithmes avancés basés sur ce que je considère comme un grand livre sur les algorithmes avancés. Bien sûr, ce n'est que mon opinion personnelle et il existe de nombreux autres bons livres.
vous devriez certainement considérer le livre Kleinberg / Tardos, qui n'est qu'un excellent manuel.
Vous devez également savoir que sur certains sujets, il existe des "manuels" qui donnent un aperçu encyclopédique d'un domaine (par exemple le Manuel de géométrie computationnelle). édité par JR Sack, J. Urrutia. Notez que ces manuels sont chers. Donc, les acheter pourrait vous aider à dépenser 5 km.
la source
Vous ne spécifiez pas dans quoi votre entreprise se spécialise, il n'est donc pas facile de fournir plus que des recommandations générales. Dans l'ensemble, je pense que la liste que vous avez dressée est assez bonne, et je n'en retire rien. Juste quelques ajouts et commentaires:
1) Cormen est un texte standard. Sedgewick est un autre texte standard. J'ai toujours mieux tiré profit de Sedgewick mais de YMMV. Vous semblez avoir le budget. Achetez les deux.
2) Je n'ai pas de copie du "Manuel de collecte des ordures" mais j'ai une copie bien documentée de l'enquête précédente de Jones & Lin sur la collecte des ordures. Si vous avez l'intention de faire une sorte de gestion automatisée de la mémoire, vous devriez certainement acheter celle-ci.
3) Vous avez également plusieurs livres utiles sur l'analyse et la théorie des automates, mais vous manquez les deux livres (trois volumes) que j'ai trouvés les plus utiles: la théorie de l'analyse de Sippu & Soisalon-Soisinen et les techniques d'analyse de Dick Grune , un guide pratique . Le premier est un excellent aperçu de la théorie et le second un aperçu exhaustif de la pratique. (Bien sûr, procurez-vous également le livre des dragons. Mais je parie que vous finirez par utiliser Grune davantage.)
4) Chaque bibliothèque sur les structures de données nécessite une copie des "structures de données purement fonctionnelles" d'Okasaki. Je ne pense pas avoir jamais lu un livre aussi mince avec autant d'idées intéressantes.
5) Je ne possède pas de copie des "Algorithms on Strings" de Maxime Crochemore, mais j'aimerais bien. Très pratique, beaucoup d'idées utiles.
Algorithms in C ++ / Java / C (select one), Third Edition by Robert Sedgewick. Deux volumes. Addison-Wesley, 2001.
The Garbage Collection Handbook par Richard Jones, Antony Hosking et Eliot Moss.
Parsing Theory, par Seppo Sippu et Eljas Soisalon-Soininen. Deux volumes: Vol. 1 Langues et analyse; Vol. 2 Analyse LR (k) et LL (k). Springer, 1988.
Parsing Techniques, A Practical Guide, Second Edition by Dick Grune and Ceriel JH Jacobs. Springer, 2008.
Structures de données purement fonctionnelles par Chris Okasaki. Cambridge, 1998.
Algorithmes sur cordes de Maxime Crochemore, Christophe Hancart, Thierry Lecroq. Cambridge, 2007.
la source