it-swarm.it

Sono uno studente CS e, onestamente, non capisco i libri di Knuth

Mi sono imbattuto in questa citazione di Bill Gates: "Dovresti assolutamente inviarmi un curriculum se riesci a leggere il tutto". Stava parlando di The Art of Programming libri. Quindi ero piuttosto curioso e voglio leggere tutto. Ma onestamente, non lo capisco.

Non sono proprio così intellettuale. Quindi questo dovrebbe essere il motivo per cui non riesco a capirlo, ma sono ansioso di imparare. Attualmente sto leggendo il volume 1 sugli algoritmi fondamentali. Ci sono libri là fuori che sono amichevoli per i principianti/persone lente come me, che potrebbero aiutare a rafforzare le mie conoscenze in modo che io possa leggere facilmente il libro di Knuth in futuro?

52
Rho

Anche io penso che il libro di Knuth sia un po 'avanzato e difficile da capire. Quei libri sono sicuramente per algoritmi di livello di ricerca IMHO.

Quindi ci sono libri là fuori che sono amichevoli per i principianti/persone lente come me?

Introduzione agli algoritmi di CLRS è molto più semplice.

[~ # ~] modifica [~ # ~] :

Tuttavia, se vuoi per leggere il libro di Knuth dovresti prima leggere Concrete Mathematics . Knuth vuole che i suoi studenti siano a conoscenza della parte matematica matematica dell'analisi degli algoritmi.

39
Prasoon Saurav

Assicurati di leggere tutta la citazione di Gates, incluso questo:

"Ho impiegato un'incredibile disciplina e diversi mesi per leggerlo. Ho studiato 20 pagine, l'ho messo via per una settimana e sono tornato per altre 20 pagine. Se qualcuno è così sfacciato da pensare di sapere tutto, Knuth lo saprà aiutali a capire che il mondo è profondo e complicato ".

Non sono libri facili e non sono pensati per essere. Ricorda che uno degli obiettivi di Knuth era apportare rigore matematico all'informatica . È fantastico se vuoi provare qualcosa su un algoritmo, ma non così eccezionale se vuoi solo sapere come funziona.

Michael Dorfman ha alcuni buoni consigli per leggere i libri nella sua risposta alla domanda (ora cancellata) su Stackoverflow su Cosa posso ottenere dalla lettura del lotto? . Se non hai un rappresentante 10k, puoi comunque visualizzare la domanda e la sua risposta su la macchina del ritorno .

Cosa otterrai leggendo il lotto? Una base eccellente in Informatica. Capirai come funzionano i computer, dalle porte logiche fino ai compilatori. Penserai a problemi che non hai mai veramente saputo fossero problemi (ad esempio, qual è il modo più veloce per moltiplicarli?) E vedrai connessioni algoritmiche tra cose che non avresti mai pensato fossero correlate (letti fluviali, RNA e parentesi annidate, per esempio.)

Sono completamente in disaccordo con la gente che dice "costruisci software invece di leggere sulla costruzione di software" - c'è una differenza tra le discipline dell'ingegneria del software e dell'informatica. TAOCP riguarda quest'ultimo.

Se non hai ancora iniziato, ho alcuni consigli.

Innanzitutto, potresti voler iniziare con il Volume 4. È un materiale eccitante, molto aggiornato, e il senso dell'umorismo di Knuth traspare. Inoltre, ci sono video disponibili (sul sito SPCD di Stanford o iTunes di Stanford) in cui Knuth discute di varie sezioni. Questi video sono altamente raccomandati. I fascicoli 0, 1, 2, 3 e 4 del volume 4 sono disponibili come tascabili separati. Insieme, il materiale V4 pubblicato è più grande di qualsiasi dei primi 3 volumi, ma tagliato in bocconcini. (Mi chiedo se i Volumi 1-3 sembrerebbero meno terrificanti per le persone se ogni volume fosse stato pubblicato in formato tascabile a capitolo singolo ...)

A seconda del tuo background matematico, ti consiglio di sfogliare il Capitolo 1 per la prima volta e di ritornarci, se necessario. In effetti, probabilmente vorrai leggere ogni sezione (almeno) due volte-- rapidamente la prima volta, solo per ottenere l'intuizione e l'essenza degli argomenti, e poi lentamente, con attenzione, capire ogni passo.

Assicurati di leggere il volume 1, fascicolo 1 su MMIX anziché le vecchie sezioni su MIX. MMIX è migliore in molti modi e sarebbe meglio convertire MIX nel testo in MMIX mentre procedi piuttosto che provare a cavalcare entrambi i mondi.

Una regola generale: non saltare gli esercizi. C'è molto materiale valido nelle domande (e nelle risposte). Fai più esercizi che puoi; ma leggili tutti (e leggi le risposte, una volta che hai risolto il problema o hai deciso di provarlo).

Infine, se si rileva davvero il bug: leggere l'indice. Molte fantastiche battute nascoste lì.

Naturalmente, StackOverflow sarebbe un buon posto per pubblicare domande specifiche sul testo, se dovessero sorgere ...

Per altre risorse, ho scoperto che è utile sfogliare i programmi di studio di rinomate scuole di informatica. Ad esempio, libri di testo per le classi di algoritmi iniziali:

57
Corbin March

Knuth è l'autore di informatica più rispettato, citato, parlato e molto rispettato della storia. I suoi libri adornano gli scaffali di tutti i seri sviluppatori di software e vengono citati con lo stesso livello di rispetto che la gente dà alla Bibbia e all'Arte della guerra.

Ho persino sentito che alcuni persone hanno effettivamente leggi parti dei libri di Knuth.

Molte persone semplicemente intendono a.

Personalmente, li sto salvando per la mia pensione

29
Steven A. Lowe

I libri di Knuth hanno cambiato per sempre il campo degli algoritmi. Lui stesso ha affermato che "2 pagine del mio libro rappresentano l'intero lavoro di carriera di qualcuno" e che i suoi libri erano difficili da leggere. Il libro contiene materiale condensato di anni di lavoro in Informatica.

Non dovresti stare male se non riesci a capirlo.

Come ha detto Prasoon, CLRS è un libro più semplice da leggere.

Hai anche Algorithms di Rajasekaran, Sahni et al, che è facile da capire.

20
Arjun J Rao

Quando mi sono laureato per la prima volta, ho raccolto i primi tre volumi di TAOCP come regalo di laurea e ho cercato di leggerli direttamente. Non l'ho mai gestito. In questi giorni ho superato forse 1/3 dei primi tre volumi (pensato in nessun ordine particolare). Il materiale è decisamente denso, ma ho imparato tre suggerimenti che mi hanno aiutato molto.

Innanzitutto, non provare a leggere da una copertina all'altra. TAOCP è davvero tanto un lavoro di riferimento quanto qualsiasi altra cosa, e ho scoperto che è meglio leggere una sezione quando è rilevante per un problema che stai cercando di risolvere. Come molte altre cose al mondo, comprendere le soluzioni è molto più semplice dopo aver riscontrato i problemi che stanno cercando di risolvere.

Successivamente, quel diagramma di flusso nella parte anteriore del libro, non è solo un po 'di umorismo, ma in realtà un suggerimento piuttosto utile. Leggi le sezioni su cui stai lavorando in modo iterativo, iniziando prima solo con i concetti generali e poi approfondendo delicatamente la matematica.

Infine, tieni a portata di mano una buona carta vecchio stile e una matita per elaborare gli algoritmi come sono descritti e risolvere alcuni dei problemi più semplici. Fa molto per aiutare a rafforzare ciò che stai leggendo.

12
Cercerilla

Non preoccuparti, la maggior parte delle persone non capisce The Art of Computer Programming (TAOCP). Quindi non pensare a te stesso come un lento o un principiante per non capire-- sei proprio come l'altro 99,99% di noi che non lo capisce.

Sei piuttosto ambizioso se vuoi arrivare al livello in cui puoi leggere The TAOCP con facilità. Io stesso ho solo sfogliato i libri prima di metterli via. Probabilmente c'è solo una manciata di persone su questo pianeta che capiscono il TAOCP.

Dai un'occhiata al post: I programmatori di libri non leggono davvero di Bill the Lizard.

Ci sono molti altri libri elencati lì che sono abbastanza leggibili , comprensibili e puoi beneficiare subito.

Personalmente mi piace:

10
spong

Ho inciampato questa citazione di Bill Gates: "Dovresti assolutamente inviarmi un curriculum se riesci a leggere tutto". Stava parlando dei libri di The Art of Programming .. Quindi ero piuttosto curioso e voglio leggerlo tutto ma onestamente, non lo capisco affatto .. I'm really not that highly intellectual being .. Quindi questo dovrebbe essere il motivo per cui non riesco a capirlo, ma sono impaziente di imparare .. Attualmente sto leggendo il volume 1 sull'algo fondamentale .. Quindi ci sono libri là fuori che sono amichevoli per i principianti/persone lente come me? Così posso costruirmi e spero in futuro di leggere il libro di Knuth a mio agio ..

se ti definisci come not a highly intellectual being allora ti stai ponendo a basse aspettative. Devi rompere quella mentalità se vuoi fare qualcosa che valga la pena di essere un problema. Non dovresti avere dubbi sul fatto che puoi ottenere qualcosa. Inoltre, raggiungerlo non significa che lo raggiungerai facilmente.

Le cose che vale la pena perseguire sono quelle difficili ... e non è un cliché. Nel software, nell'ingegneria, nella vita in generale, se vuoi ottenere qualcosa, devi cercare cose difficili, cose che la gente evita e non accontentarsi dei più bassi denominatori comuni delle cose.

Innanzitutto, non è chiaro quale sia il tuo background CS. Il libro di Knuth richiede un certo grado di maturità. Poche persone con una laurea in CS possono affrontarlo facilmente. Non mi aspetterei che uno studente di CS che ha appena finito il suo primo corso di algoritmi sia effettivamente in grado di leggere anche un solo libro di Knuth. La maturità necessaria per ottenerlo non è proprio lì, e questo non ha nulla a che fare con la capacità mentale dello studente.

Devi avere i tuoi algoritmi di base freddi e chiari e devi avere una buona dose di programmazione (lavoro e/o scolastica) sotto la cintura - direi, almeno 40 crediti sulla programmazione. Devi anche avere la tua matematica CS su un terreno solido.

Non puoi andare molto lontano senza avere una buona conoscenza della matematica discreta (e forse della teoria del calcolo).

Non è che avrai bisogno di quella conoscenza per lavorare sui problemi di Knuth, ma hai bisogno di una maturità per poter passare attraverso quel tipo di materiale.

Prima scegli un libro e un solo libro (il libro di CLRS come precedentemente suggerito), e lavoralo dall'inizio alla fine. Quando possibile, programmi che implementano gli algoritmi. Non usare Java o C #, nemmeno C++. Vai a ossa nude C e ottieni la sensazione di costruire oggetti con frammenti di metallo a osso nudo.

Prendi anche il libro di Knuth su "Concrete Mathematics" se non hai seguito un corso di matematica discreta e teoria dei calcoli. Sarebbe bello che tu leggessi anche quel libro.

Quindi affronta l'enciclopedia di Knuth, un tomo, un capitolo alla volta. Non andare in un altro capitolo senza avere una buona conoscenza del primo.

Suggerirei di passare prima al volume I (algoritmi fondamentali), quindi al volume III (ricerca e ordinamento). Questi dovrebbero essere i tuoi obiettivi immediati. Quindi, più tardi (molto più tardi), affronta il volume IV (algoritmi combinatori) e poi il volume II (algoritmi semi-numerici.)

Non sentirti male se non lo capisci all'inizio. Ho cercato di superare il volume I e III per anni (ormai 10 anni).

E non dovresti mettere così tanto peso su di esso. Non farlo per dimostrare qualcosa a qualcuno o a te stesso. Fallo perché sei intellettualmente interessato a farlo. Puoi diventare esperto di algoritmi semplicemente usando il libro del CLRS (o uno qualsiasi dei libri di livello superiore disponibili).

Sii pragmatico e concediti una pausa. Trattare il libro di Knuth come un'ambizione personale a lungo termine, non come una prova immediata che sei materiale CS;)

Ci sono altre cose più importanti (per quanto riguarda la carriera) per cui ucciderti;)

8
luis.espinal

Prima ancora di iniziare su Knuth ho dovuto percorrere quattro diversi libri. I primi due sono libri di Sedgewick su Algorithms. Questa panoramica della maggior parte degli algoritmi e delle strutture di dati in una forma effettivamente implementata, in modo da poter vedere quali sono e come funzionano. Questi libri sono disponibili in diverse versioni linguistiche - ho letto quelli in C, ma iirc sono stati originariamente scritti in Pascal, e ci sono C++ e Java versioni là fuori.

Successivamente ho lavorato su una buona parte del libro di Cormen sugli algoritmi e ho usato Sedgewick e Flajolet's Introduzione all'analisi degli algoritmi come testo complementare, in quanto è più sulla scia del rigore matematico di Knuth che del Libro dei Cormen. Devo ancora finire una di queste due cose, per lo più scegliere le parti di cui sento di aver bisogno.

Dopo aver letto quelli e aver conseguito una laurea in matematica, posso leggere alcuni di TAOCP, ma è una lettura difficile. Ciò non significa che non sia utile. I TAOCP sono alcuni dei più grandi manuali di riferimento sugli algoritmi in circolazione, ma pensare di poterli utilizzare per comprendere "completamente" qualsiasi cosa è alquanto problematico.

4
Justin Hamilton