Libri di algoritmi su una vasta gamma di argomenti


11

Mi è stato affidato il compito di costruire una biblioteca di libri sugli algoritmi per la nostra piccola azienda (circa 15 persone). Il budget è superiore a 5.000, ma sicuramente inferiore a 10.000, quindi posso acquistare un discreto numero di libri. Tutte le persone qui hanno almeno una laurea in CS o un campo strettamente correlato, quindi mentre avrò alcuni libri di testo di base come Cormen, sono più interessato a buoni libri su argomenti avanzati. (Prenderò i 4 volumi di Knuth, a proposito.)

Alcuni elenchi di argomenti sarebbero:

  • Algoritmi di ordinamento

  • Algoritmi grafici

  • Algoritmi di stringa

  • Algoritmi randomizzati

  • Algoritmi distribuiti

  • Algoritmi combinatori

  • eccetera.

In sostanza sto cercando buoni consigli su libri su argomenti importanti all'interno di CS relativi ad algoritmi e strutture di dati. Soprattutto roba che va al di là di ciò che è in genere coperto in classi di algoritmo e struttura dei dati come parte di una laurea in una buona scuola. So che la domanda è piuttosto confusa, poiché sto cercando materiale genericamente utile. Il software che sviluppiamo è principalmente roba a livello di sistema che gestisce grandi quantità di dati.

L'ideale sarebbe anche trovare qualcosa che possa coprire strutture e algoritmi di dati interessanti abbastanza recenti, di cui la maggior parte delle persone potrebbe non aver sentito parlare.


EDIT: Ecco alcuni libri preliminari che penso dovrei ottenere:

  • Introduzione agli algoritmi di Cormen et al.

  • Algorithm Design di Kleinberg, Tardos

  • The Art of Computer Programming Vol 1-4 di Knuth

  • Algorithms di approssimazione di Vazirani

  • The Design of Approximation Algorithms di Williamson, Shmoys

  • Algoritmi randomizzati di Motwani, Raghavan

  • Introduzione alla teoria del calcolo di Sipser

  • Complessità computazionale di Arora, Barak

  • Computer e intrattabilità di Garey e Johnson

  • Ottimizzazione combinatoria di Schrijver

Alcuni altri libri che i miei colleghi volevano che trattassero di tecniche e algoritmi per la progettazione del linguaggio, compilatori e metodi formali sono:

  • Tipi e linguaggi di programmazione di Pierce

  • Principi di Model Checking di Baier, Katoen

  • Compilatori: principi, tecniche e strumenti di Aho, Lam, Sethi, Ullman

  • Manuale di progettazione del compilatore: ottimizzazioni e generazione di codice macchina, seconda edizione di Srikant, Shankar

  • Manuale di Garbage Collection: The Art of Automatic Memory Management di Jones, Hosking, Moss


Libri che ogni biblioteca dovrebbe avere: * Algorithm Design di Jon Kleinberg e Éva Tardos * Introduzione alla teoria del calcolo di Michael Sipser * Computer e intrattabilità: una guida alla teoria della completezza NP di MR Garey e DS Johnson
Pål GD

> * Introduzione alla teoria del calcolo di Michael Sipser Questo è un grande libro, ma riguarda di più Automi e lingue, Lingue senza contesto, Macchine di Turing, Teoria della complessità e così via. Non si tratta molto di Algorithms
Devid

1
Caspita, questa è una domanda ampia. Come prevedete di verificare la qualità e la copertura della selezione? Qual è il tuo background? Su cosa lavora la tua azienda? Hai persone con master o dottorati?
Raffaello

1
Avviso del moderatore: per favore non pubblicare risposte a libro singolo e spiegare perché stai facendo queste scelte. C'è un budget di $ 5.000 qui: spiega come lo spenderesti! Diteci quali libri si pensa sono must-have, gli argomenti dovrebbero essere esplorati ulteriormente, come si effettua la selezione ...
Gilles 'SO-tappa è male'

Ti interessa principalmente la progettazione o anche l'analisi degli algoritmi? In tal caso, vuoi che le tue persone diventino competenti nell'analisi teorica o preferiresti che fossero competenti in mezzi più pratici per valutare l'efficienza?
Raffaello

Risposte:


13

Non ho (quasi) letto abbastanza libri per nominarne $ 5000. Pertanto, suggerirò alcuni gruppi di letteratura che dovresti trattare e ti indirizzerò verso rappresentanti selezionati. Non posso affermare di aver letto la maggior parte dei libri per intero, quindi devo fare affidamento principalmente su descrizioni, impronte superficiali e reputazione. Ho esaminato o lavorato con la maggior parte di essi in una certa misura o li ho raccomandati da esperti.

Presumo che tu voglia che la tua gente impari cosa si può fare e come farlo, invece di imparare cosa non possono fare. In particolare, tralascerò i libri sulla computabilità e la teoria della complessità in quanto tali; Mi aspetto che il tuo personale abbia tolto i messaggi pertinenti dalla sua formazione universitaria.

  • Le basi
    Anche se la tua gente le ha imparate ad un certo punto, aspettati che le guardino le basi. Poiché fonti come Wikipedia sono spesso scadenti o del tutto errate, si desidera ottenere testi di riferimento adeguati.

    Le scelte popolari includono

    • Introduzione agli algoritmi di Cormen, Leiserson et al.
      Introduzione molto ampia che copre molti algoritmi elementari e strutture dati nonché tecniche di analisi di base. Un testo standard usato frequentemente a scopo didattico e disponibile nella sua terza edizione (quindi ormai la maggior parte degli errori avrebbe dovuto essere eliminata). Molti esercizi.
    • Algorithms di Sedgewick e Wayne
      Un altro testo standard nella sua quarta edizione. Meno ampio di Cormen, ma con maggiore attenzione ai dettagli di implementazione. Un sacco di materiale online, incluso un corso gratuito su Coursera . Molti esercizi.
    • Introduzione agli algoritmi: un approccio creativo di Udi Manber
      Anche una selezione di argomenti piuttosto snella, ma presentata con attenzione alla didattica. L'attenzione si concentra su strategie induttive . Contiene molti esercizi e soluzioni (o almeno suggerimenti) per alcuni. Un buon riferimento secondario se non ti piace il libro di testo consigliato a causa del suo stile insolito.
    • Concrete Mathematics di Graham, Knuth e Patashnik
      Copre la matematica discreta come rilevante per l'analisi dell'algoritmo. Rara attenzione ai bisogni e al rigore dell'informatica . Altissima qualità. Molti esercizi con soluzioni.
  • Analisi degli algoritmi Nella maggior parte dei libri di testo standard, l'analisi dell'algoritmo di solito si interrompe a livello di asintotici e modello RAM. Al fine di stimare l'efficienza del mondo reale in modo più affidabile, può essere necessario esaminare il runtime in modo più preciso e considerare effetti come la gerarchia della memoria e la comunicazione.O

  • Sondaggi avanzati

    • Le strutture di dati puramente funzionali di Okasaki
      Classic e la letteratura di base spesso si concentrano sul paradigma procedurale. Se si desidera lavorare nel paradigma funzionale, sono necessarie nuove tecniche per strutture dati efficienti. Questo libro è una panoramica dettagliata della zona.
    • Strutture dati avanzate di Brass
      A volte, le tecniche di base non sono sufficienti. Questa è una panoramica delle strutture dati avanzate, con codice e molti riferimenti.
    • Algorithmics for Hard Problems di Hromkovič La
      teoria della complessità ci dice (come praticanti) di non preoccuparci di cercare algoritmi esatti ma efficienti per molti problemi naturali. Esistono molte tecniche per risolvere praticamente questi problemi; questo testo ti mostra come.
  • Letteratura specializzata

    • Compilatori: principi, tecniche e strumenti alias The Dragon Book di Aho et al.
      Se dovessi mai costruire o armeggiare con un compilatore, questo è il testo standard sull'area.
    • Flussi di rete: teoria, algoritmi e applicazioni di Ahuja
      Molti problemi possono essere modellati come problemi di flusso di rete; questo libro ti offre una copertura completa del campo.
    • Modelli grafici probabilistici di Koller e Friedman I
      modelli grafici sono uno strumento fondamentale nella modellazione di scenari per l'apprendimento automatico (tra l'altro) in modo probabilistico. Questa è una panoramica completa sul complesso. C'è un corso online gratuito correlato .
    • Manuale degli algoritmi di corrispondenza esatta delle stringhe di Charras e Lecrog
      La corrispondenza delle stringhe è un compito sempre importante quando si tratta di dati. Questo libro elenca la maggior parte (se non tutti) gli algoritmi rilevanti per il lavoro, comprese descrizioni di alto livello e implementazioni.
    • Combinatoria analitica di Sedgewick e Flajolet
      La profonda immersione matematica dopo "Un'introduzione all'analisi degli algoritmi" degli stessi autori. Non per tutti, ma oro per gli interessati.
    • Algoritmi su stringhe, alberi e sequenze di Gusfield
      Se dovessi mai avere a che fare con enormi quantità di dati di stringa (in particolare in contesti di biologia) questo è il libro di riferimento in quanto fornisce una panoramica delle strutture di dati e degli algoritmi pertinenti.
  • Per il professionista

    • Pattern per la programmazione parallela di Mattson et al.
      In pratica, potresti voler utilizzare più macchine per affrontare grandi problemi. Questo libro è una panoramica di alto livello basata su esempi su come farlo, ovvero come organizzare e spostare i dati e gli agenti informatici. Affronta anche i modi per implementarli con strumenti esistenti.
    • Una guida agli algoritmi sperimentali di McGeoch
      Quando l'analisi teorica è troppo dura o troppo approssimativa, è necessario eseguire esperimenti. Questa è un'introduzione su come progettare correttamente gli esperimenti sugli algoritmi.
    • Il riferimento di ANTLR 4 definitivo di Parr
      Spesso hai bisogno di linguaggi e strumenti specifici del dominio per analizzarli. ANTLR è un generatore di compilatore maturo e conveniente, e questo è il libro più adatto per imparare come usarlo. Parr ha anche alcuni altri libri su DSL che vale la pena dare un'occhiata.

Se desideri materiale molto recente, dovresti prendere in considerazione la possibilità di far accedere il tuo personale a riviste e atti di convegni, magari collaborando con una biblioteca universitaria. Puoi anche farli partecipare a conferenze su argomenti rilevanti per loro. la tua azienda.

Inoltre, considera di chiedere alla tua gente. Invitali a fare le proprie ricerche (inclusi campioni gratuiti o copie sul web o sulle biblioteche) e ti diranno quali libri considerano pertinenti al loro lavoro. Non serve a nulla comprare cose che nessuno leggerà.


E, naturalmente, mandali qui con i loro problemi interessanti. :)
Raffaello


@Bartek: non ne ho mai sentito parlare, quindi non posso raccomandarlo.
Raffaello

4

Ecco una raccolta casuale di libri su algoritmi avanzati basati su quello che considero un grande libro sugli algoritmi avanzati. Naturalmente questa è solo la mia opinione personale e ci sono molti altri buoni libri.

  • Algorithms di approssimazione di Vijay V. Vazirani
  • The Design of Approximation Algorithms di David P. Williamson, David B. Shmoys
  • Geometria computazionale: un'introduzione attraverso algoritmi randomizzati di Ketan Mulmuley
  • Algoritmi randomizzati di Rajeev Motwani, Prabhakar Raghavan
  • Algorithms on Strings, Trees and Sequences di Dan Gusfield
  • Ottimizzazione combinatoria di William J. Cook, William H. Cunningham, William R. Pulleyblank, Alexander Schrijver

dovresti assolutamente prendere in considerazione il libro Kleinberg / Tardos, che è solo un ottimo libro di testo.

Inoltre, dovresti sapere che su alcuni argomenti ci sono "manuali" che offrono una panoramica enciclopedica su un campo (ad esempio il Manuale di Geometria Computazionale). a cura di JR Sack, J. Urrutia. Si noti che questi manuali sono costosi. Quindi acquistarli potrebbe aiutarti a spendere 5k.


1
Dici che questa è una raccolta "casuale". Hai motivi particolari per raccomandare quei libri? Cosa dovrebbe fare l'OP con i restanti $ 4,5k?
Raffaello

4

Non specifichi in cosa è specializzata la tua azienda, quindi non è facile fornire più di raccomandazioni generali. Nel complesso, penso che l'elenco che hai messo insieme sia abbastanza buono, e non rimuoverei nulla da esso. Solo un paio di aggiunte e commenti:

1) Cormen è un testo standard. Sedgewick è un altro testo standard. Ho sempre ottenuto di più da Sedgewick ma YMMV. Sembra che tu abbia il budget. Acquista entrambi.

2) Non ho una copia del "Manuale della raccolta dei rifiuti", ma ho una copia ben fatta del precedente sondaggio di Jones & Lin sulla raccolta dei rifiuti. Se hai intenzione di fare qualsiasi tipo di gestione automatizzata della memoria, dovresti assolutamente comprare questo.

3) Hai anche molti libri utili sull'analisi e la teoria degli automi, ma ti mancano i due libri (tre volumi) che ho trovato più utili: Sippu & Soisalon-Soisinen's Parsing Theory e Dick Grune's Parsing Techniques, una guida pratica . Il primo è una grande panoramica della teoria e il secondo una panoramica esaustiva della pratica. (Certamente, prendi anche il libro dei draghi. Ma scommetto che finirai per usare Grune di più.)

4) Ogni libreria sulle strutture di dati richiede una copia delle "Strutture di dati puramente funzionali" di Okasaki. Non credo di aver mai letto un libro così sottile con così tante idee interessanti.

5) Non possiedo una copia di "Algorithms on Strings" di Maxime Crochemore, ma vorrei farlo. Molto pratico, molte idee utili.

  • Algoritmi in C ++ / Java / C (selezionarne uno), Terza edizione di Robert Sedgewick. Due volumi Addison-Wesley, 2001.

  • The Garbage Collection Handbook di Richard Jones, Antony Hosking ed Eliot Moss.

  • Teoria di analisi, di Seppo Sippu e Eljas Soisalon-Soininen. Due volumi: Vol. 1 Lingue e analisi; Vol. 2 Analisi LR (k) e LL (k). Springer, 1988.

  • Parsing Techniques, A Practical Guide, Second Edition di Dick Grune e Ceriel JH Jacobs. Springer, 2008.

  • Strutture di dati puramente funzionali di Chris Okasaki. Cambridge, 1998.

  • Algorithms on Strings di Maxime Crochemore, Christophe Hancart, Thierry Lecroq. Cambridge, 2007.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.