Livres d'algorithmes sur une gamme de sujets


11

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


Livres que chaque bibliothèque devrait avoir: * Conception d'algorithmes par Jon Kleinberg et Éva Tardos * Introduction à la théorie du calcul par Michael Sipser * Ordinateurs et intractabilité: un guide de la théorie de la complétude NP par MR Garey et DS Johnson
Pål GD

> * Introduction à la théorie du calcul par Michael Sipser Ceci est un excellent livre, mais il s'agit davantage des automates et des langages, des langages sans contexte, des machines de Turing, de la théorie de la complexité, etc. Il n'y a pas grand chose à propos des algorithmes
Devid

1
Wow, c'est une large question. Comment comptez-vous vérifier la qualité et la couverture de la sélection? Quel est votre parcours? Sur quoi travaille votre entreprise? Avez-vous des personnes titulaires d'un master ou d'un doctorat?
Raphael

1
Avis du modérateur: veuillez ne pas publier de réponses d'un seul livre, et veuillez expliquer pourquoi vous faites ces choix. Il y a un budget de 5 000 $ ici: expliquez comment vous le dépenseriez! Dites-nous quels livres vous pensez être indispensables, quels sujets devraient être approfondis, comment vous faites votre sélection ...
Gilles 'SO- arrête d'être maléfique'

Êtes-vous principalement intéressé par la conception, ou également par l'analyse d'algorithmes? Dans l'affirmative, souhaitez-vous que votre personnel soit compétent en analyse théorique, ou préférez-vous qu'il soit compétent dans les moyens plus pratiques d'évaluer l'efficacité?
Raphael

Réponses:


13

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 aux algorithmes par Cormen, Leiserson et al.
      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.
    • Algorithmes de Sedgewick et Wayne
      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.
    • Introduction aux algorithmes - Une approche créative par Udi Manber
      É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.
    • Concrete Mathematics par Graham, Knuth et Patashnik
      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.
  • O

  • Enquêtes avancées

    • Les structures de données purement fonctionnelles d'Okasaki
      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.
    • Structures de données avancées par Brass
      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.
    • Algorithmics for Hard Problems par Hromkovič
      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

    • Compilateurs: principes, techniques et outils aka The Dragon Book par Aho et al
      Si vous avez besoin de construire ou de bricoler avec un compilateur, c'est le texte standard sur la zone.
    • Flux de réseau: théorie, algorithmes et applications par Ahuja
      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.
    • Modèles graphiques probabilistes de Koller et Friedman
      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 .
    • Handbook of Exact String Matching Algorithms by Charras and Lecrog
      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.
    • Combinatoire analytique par Sedgewick et Flajolet
      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.
    • Algorithmes sur les chaînes, les arbres et les séquences de Gusfield
      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

    • Patterns for Parallel Programming par Mattson et al.
      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.
    • Un guide de l'algorithmique expérimentale par McGeoch
      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.
    • La référence définitive ANTLR 4 par Parr
      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.


Et, bien sûr, envoyez-les ici avec leurs problèmes intéressants. :)
Raphael


@Bartek: Je n'en ai jamais entendu parler, donc je ne peux pas le recommander.
Raphael

4

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.

  • Algorithmes d'approximation par Vijay V. Vazirani
  • La conception d'algorithmes d'approximation par David P. Williamson, David B. Shmoys
  • Géométrie informatique: une introduction à travers des algorithmes randomisés par Ketan Mulmuley
  • Algorithmes randomisés par Rajeev Motwani, Prabhakar Raghavan
  • Algorithmes sur les chaînes, les arbres et les séquences par Dan Gusfield
  • Optimisation combinatoire par William J. Cook, William H. Cunningham, William R. Pulleyblank, Alexander Schrijver

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.


1
Vous dites que c'est une collection "aléatoire". Avez-vous des raisons particulières de recommander ces livres? Que devrait faire l'OP avec les 4,5 k $ restants?
Raphael

4

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.