CS teorico e matematica - raccomandazioni di autoapprendimento


14

Sono un laureato non CS e il mio campo di studio non è correlato alla CS. Tuttavia, come parte di un piano più ampio per diventare un informatico, voglio ottenere una solida base in informatica teorica e matematica in relazione al CS. Ho fatto molte ricerche e selezionato i seguenti libri migliori / davvero buoni sull'argomento CS e matematica e vorrei chiedere le vostre opinioni su:

  • Completezza degli argomenti trattati (si prega di raccomandare tutto ciò che ho perso)
  • Sovrapposizione di materiale coperto / area di sovraccarico (si prega di raccomandare libri che dovrebbero essere rimossi dall'elenco)
  • Ordine di studiare i libri (ho elencato nell'ordine in cui penso che dovrebbero essere studiati)

L'elenco sembra eccessivamente lungo, quindi apprezzerei le raccomandazioni per rimuovere alcuni libri, senza la perdita delle conoscenze di base richieste per CS.

Quindi, i libri sono:

  1. Mathematician's Delight di WW Sawyer
  2. Come dimostrarlo: un approccio strutturato di Daniel J. Velleman
  3. Come risolverlo: un nuovo aspetto del metodo matematico di G. Polya
  4. Un'introduzione alla programmazione funzionale tramite Lambda Calculus di Greg Michaelson
  5. Fondamenti di informatica di Al Aho e Jeff Ullman (http://i.stanford.edu/~ullman/focs.html)
  6. Concrete Mathematics: A Foundation for Computer Science di Graham, Knuth e Patashnik
  7. Introduzione alla teoria del calcolo di Michael Sipser
  8. Introduzione alla teoria, alle lingue e al calcolo degli automi di John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
  9. Complessità computazionale: una prospettiva concettuale di Oded Goldreich
  10. Complessità computazionale: un approccio moderno di Sanjeev Arora, Boaz Barak
  11. Un corso di combinatoria di JH van Lint, RM Wilson
  12. Computabilità: un'introduzione alla teoria delle funzioni ricorsive di Nigel Cutland
  13. Computer e intrattabilità: una guida alla teoria della completezza NP di MR Garey, DS Johnson
  14. Teoria delle funzioni ricorsive e calcolabilità effettiva di Hartley Rogers
  15. Disuguaglianze di GH Hardy, JE Littlewood, G. Polya
  16. Logica matematica: un corso con esercizi (parte I): calcolo proposizionale, algebre bookiane, calcolo predicato di René Cori, Daniel Lascar
  17. Logica matematica: un corso con esercizi (parte II): teoria della ricorsione, teoremi di Godel, teoria dei set, teoria dei modelli di René Cori, Daniel Lascar

Si prega di fare riferimento a questa domanda: cstheory.stackexchange.com/questions/3253/…
Bartosz Przybylski,

Inizia con un libro dell'algoritmo noto se non hai ancora esperienza in questo argomento.
AJed

@Bartek: Grazie, ma questa è stata una delle domande che ho esaminato prima per compilare l'elenco in primo luogo. La mia domanda è più su come leggere praticamente tutto il grande materiale là fuori. Il tempo è sempre un vincolo, quindi voglio sapere quali libri non dovrei "non" leggere per evitare ripetizioni, ecc.
CSLover,

@AJed: Stai suggerendo di iniziare con il libro n. 5 nell'elenco invece di alcuni dei libri di matematica n. 1-4? Credo che il n. 5 dia una leggera introduzione agli algoritmi e alle strutture di dati.
CSLover,

Troppo qui. Ne sceglierei solo uno e me ne andrei, quindi mi preoccuperei di quello che verrà dopo quando ci arriverai. Potrei raccomandare a Sipser di iniziare per un principiante che vuole un solido background nelle basi di CS.
usul

Risposte:


10

La tua lista è estremamente problematica.

Per cominciare, salterei categoricamente i libri 6,11,12,14,15,16,17: i libri 6, 11 e 15 sono matematica generale che non è realmente necessaria a meno che non diventi un teorico ricercatore . I libri 12 e 14 trattano la teoria della ricorsione che non è informatica (anche se si tratta di calcolabilità!). I libri 16 e 17 trattano argomenti avanzati in logica, mentre devi solo conoscere la logica di base.

Tra i libri 1,2,3, ne sceglierei solo uno come introduzione generale alla matematica e alle prove.

I libri 5,7,8,9,10,13 trattano diversi argomenti: teoria degli automi, algoritmi e teoria della complessità. Lasciatemi suggerire di seguire Sipser (Libro 7) per la teoria degli automi e la teoria della complessità e Introduzione agli algoritmi di Cormen, Leiserson, Rivest e Stein ("CLRS") per gli algoritmi.

Il libro 4 tratta della programmazione funzionale. Mentre la mia educazione informatica non ha mai incluso alcun corso su questo argomento, è giusto dire che molti ricercatori in informatica teorica considerano la programmazione funzionale come parte delle basi essenziali.

Riassumendo: ciò che rimani è

  • Uno dei libri 1-3 (o qualsiasi testo comparabile di "introduzione alla prova")
  • CLRS
  • Libro 4 (programmazione funzionale)
  • Libro 7 (teoria degli automi e teoria della complessità)

Grazie mille per una risposta così approfondita. Sapevo che l'elenco era eccessivo, ma leggendo tutti i tipi di consigli sui libri per gli informatici, si finisce con un lungo elenco. La tua raccomandazione è molto pratica, ed è quello che sto cercando. Un grande grazie!!
CSLover,

1
Non sono d'accordo con il consiglio che "la matematica non è necessaria". Scegli qualsiasi aspetto dell'informatica e ti mostrerò come è necessaria la matematica. Più matematica impari, meglio sei fuori. D'altra parte, è quasi impossibile imparare la vera matematica da soli, senza andare a scuola. Quindi probabilmente stai meglio concentrandoti sull'informatica, che è più facile da imparare.
Andrej Bauer,

5

Potresti anche prendere in considerazione la possibilità di usufruire di alcuni dei numerosi corsi online disponibili. Ad esempio, sia Stanford che il MIT offrono corsi online gratuiti di informatica, e penso che ce ne siano anche molti altri disponibili.

Per quanto riguarda i libri, secondo la maggior parte delle raccomandazioni di Yuval, tranne che il CLRS è un ottimo riferimento, ma un po 'travolgente come libro introduttivo per sedermi e leggere. Per un primo passaggio nella parte algoritmi, potrei raccomandare Algorithms di Dasgupta et al. . Il link precedente è la prestampa online gratuita, ma è anche abbastanza economico da acquistare in brossura.


Ok. Apprezzo la tua risposta. Grazie mille.
CSLover,

2

I riferimenti che stai suggerendo renderebbero un "molto" teorico informatico. ma onestamente non trovo alcun beneficio leggendo tutti questi libri se sei laureato non CS. Questo ovviamente dipende tutto da ciò di cui hai bisogno.

Trovo che alcuni libri come il libro 14, 15, 16, 17 non siano destinati agli informatici. Il libro 3 è dettagliato. È semplicemente generale per qualsiasi studente. Pertanto presumo che i libri 1 e 2 siano gli stessi.

Per me - trovandoti nella tua stessa situazione di non originariamente un informatico (ma piuttosto un ingegnere elettrico / informatico) - propongo due direzioni iniziali:

  • progettazione e analisi di algoritmi, (molte persone suggeriscono l' Introduzione agli algoritmi del CLRS . È un ottimo riferimento, ma non ne sono un fan e inizialmente era una scommessa più difficile da capire e talvolta molto dettagliata. Suggerisco comunque che tu segui il suo sommario e da lì controlli i corsi online per riferimenti più chiari).

--- assicurati di padroneggiare un linguaggio di programmazione per IMPLEMENTARE gli algoritmi e le strutture di dati che impari - quindi, suggerisco la serie di algoritmi, di Sedgewick (incredibile!)

--- AGGIUNTO: Suggerisco anche questo libro: algoritmi combinatori: generazione, enumerazione e ricerca di D. Kreher. Questo è un bel libro Ti darà una prospettiva diversa per molti problemi negli algoritmi.

  • la combinatoria (in particolare la teoria dei grafi), A Course in Combinatorics di JH van Lint, RM Wilson , è buona. Esistono molti altri riferimenti. Di solito qualsiasi libro di combinatoria ben noto è sufficiente - tutto il resto che otterresti da riferimenti aggiuntivi da Internet. Personalmente mi è piaciuto: peter j cameron combinatorics e Bondy and Murty Graph Theory.

  • una scommessa di probabilità (sempre necessaria). È sorprendente che molti campi della scienza non utilizzino la probabilità. Ma credimi, tutto quello che devi sapere sono le basi.

Quindi: molti ricercatori che si definiscono teorici informatici si concentrano così tanto sulla teoria del calcolo (automota e altri). Ci sono alcuni buoni libri per questo (vedi il post di Yuvul Filmus),

Aho e Ullman sono buoni (in realtà tutti i libri di Ullman sono buoni). Mettiti comodo con il design del compilatore (vedi http://infolab.stanford.edu/~ullman/ullman-books.html ).

Dopodiché: tutto dipende da cosa vuoi fare. Puoi prendere diverse direzioni: 1) database, 2) riconoscimento di modelli e data mining, 3) algoritmi distribuiti, 4) basi di linguaggi di programmazione, 4) algoritmi randomizzati e molti altri. [ognuno dei quali richiede un altro post] ma cerca di avere un'idea di tutto!

* L'idea generale: se non conosci CS, mettiti comodo con il maggior numero possibile di sottodomini CS. Limitarti alla "teoria" ti farà perdere molta creatività CS! * (la mia opinione)


Per me programmazione funzionale. Non usare un libro legacy come quello che hai citato. I linguaggi funzionali sono richiesti attualmente nel settore. Esistono alcuni tutorial in Internet su lingue come Scheme, Haskel ed Erlang. Non essere molto teorico, questo è il mio consiglio.
AJed

Tutti i buoni commenti. Il mio obiettivo è progettare un programma di autoapprendimento completo e questa domanda riguarda solo una sezione del programma, che pensavo fosse la più difficile da organizzare. Altre aree includono: Strutture dati e algoritmi, Architettura dei computer, Sistemi operativi, Networking, Sicurezza e crittografia, Parallelismo, Metodi formali, Intelligenza artificiale, Grafica e simulazione, Database, Linguaggi di programmazione, Compilatori, ingegneria del software e infine filosofia e amministrazione di Unix. Penso che la maggior parte di questi siano piuttosto fondamentali per CS, ma giustificherebbe una domanda separata
CSLover,

Il tuo miglior trucco è una solida base nella progettazione e nell'analisi di algoritmi. - ogni altro campo è un sottocampo di progettazione e analisi di algoritmi.
AJed

Saresti gentile e chiarire quale libro sugli algoritmi di Sedgewick hai raccomandato? Ne ha uno chiamato "Algorithms" ma non è una serie. Ha anche "Algorithms in C ++" (o altre lingue) che è 2 libri, credo con un totale di 5 parti.
CSLover,

Quelli che ho usato erano quelli C ++. Li ho usati come riferimenti, però. Questo è il suo sito web cs.princeton.edu/~rs
AJed
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.