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


52

Mi sono imbattuto in questa citazione di Bill Gates: "Dovresti assolutamente inviarmi un curriculum se riesci a leggere il tutto". Stava parlando dei libri di The Art of Programming . 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 / le persone lente come me, che potrebbero aiutare a sviluppare le mie conoscenze in modo che io possa leggere facilmente il libro di Knuth in futuro?


Humm diciamo che lo capirò (e anche tu immagino), ma ci vorrebbe molto tempo e ci sono libri più facili al giorno d'oggi ..
Nils

22
Potrebbero essere difficili da leggere e potrebbero esserci libri più facili, ma dovresti comunque leggerli. Finora ho letto solo il primo libro e non capisco tutto! ma ne vale la pena. L'informatica è difficile . Prima ti rendi conto che non sei abbastanza intelligente da capirlo, prima puoi iniziare a imparare come impararlo.
Michael K,

2
Sono inclini alla matematica per i programmatori di matematica. La CS si è evoluta negli ultimi anni e ci sono tonnellate di aree benefiche che non sono matematiche. Quale direzione vuoi sviluppare ulteriormente? Se sono algoritmi e simili, probabilmente sono una buona lettura, se si tratta di altre aree, allargheranno il tuo orizzonte, ma tanto quanto leggere un libro su alcuni argomenti di biologia. Quindi, a seconda della tua zona, possono essere ovunque, dalla missione critica a quasi inutili.
Coder

1
Da quando i programmatori considerano autorevole Bill Gates?
Giorgio,

2
Coursera offre 6 corsi gratuiti sugli algoritmi (Algoritmi Parti 1 e 2, Algoritmo Progettazione e analisi Parti 1 e 2 e Analitica Combinatoria parti 1 e 2).
Anthony,

Risposte:


39

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?

L'introduzione agli algoritmi di CLRS è molto più semplice.

MODIFICA :

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


5
Il manuale di progettazione dell'algoritmo è ancora più facile / più accessibile - si avvicina all'essere divertente da leggere
Martin Beckett

L'introduzione agli algoritmi è un ottimo libro. L'abbiamo usato per il nostro primo corso di algoritmi CSE e l'ho adorato. Anche se devo dire che ho passato molte iterazioni seguendo gli stessi esempi per dire veramente che li capisco.
Chris,

4
@SidCool: c'è una terza edizione di CLRS con una dozzina di nuove sezioni.
Bill the Lizard,

10
I libri di Knuth sono War & Peace di programmazione. Sono buoni, ma sono usati principalmente per rendere impressionanti le librerie.
Gaurav,

6
"Anche io penso che il libro di Knuth sia un po 'avanzato"? modestia eh :)
occulus

57

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 portare 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 eliminata) 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 sulla 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 realmente 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 la prima volta e di ritornarci, se necessario. In effetti, probabilmente vorrai leggere ogni sezione (almeno) due volte-- rapidamente la prima volta, solo per avere 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 invece delle vecchie sezioni su MIX. MMIX è meglio sotto molti aspetti, e ti conviene convertire il 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 delle scuole di informatica apprezzate. Ad esempio, libri di testo per le classi di algoritmi iniziali:


Il link per SO era rotto, ma ho trovato un post che immagino è simile: stackoverflow.com/questions/1022167/...
asjohnson

+1 per il post originale sulla Way Back Machine e l'elenco dei libri di quelle università
Anthony,

+1 per raccomandare di iniziare con Volume 4, Fascicoli 0, 1, 2, 3 e 4, e anche per leggere MMIX invece di MIX. Di conseguenza, inizierò con Volumn 1, Fascicle 1, perché copre MMIX.
Shaun Luttin,

Come programmatore Java / c, sento <Data Structures and Algorithm Analysis in Java> molto facile da capire e abbastanza pratica.
Eric Wang,

29

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 sono indicati con lo stesso livello di rispetto che la gente dà alla Bibbia e all'Arte della guerra.

Ho anche sentito che alcune persone hanno effettivamente letto parti dei libri di Knuth.

La maggior parte delle persone ha intenzione di farlo.

Personalmente, li sto salvando per la mia pensione


22
Ecco perché le copie ben usate valgono più di quelle nuove!
Martin Beckett,

13
Se capisci The Art of War, ti renderai conto che devi solo far credere alle persone di capire Knuth quando non lo fai, e viceversa che non capisci Knuth quando lo fai. Altrimenti no. E se capisci il libro 5 del Libro dei Cinque Anelli, non avrai nemmeno bisogno di parlare di Knuth. E se hai letto The Art of Unix Programming di ESR e hai compreso i koan, non avrai nemmeno bisogno di Knuth, perché avrai superato la barriera della complessità.
Christopher Mahan,

20

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.


è incredibile sentirlo .. pensavo di essere l'unico ad avere problemi a leggere questo libro .. grazie mille
Rho

7
@Raymond Ho: Non credo che a nessuno piaccia davvero leggere i libri di Knuth. Conosco almeno una persona che li ha sullo scaffale solo per rendere impressionante lo scaffale.
FrustratedWithFormsDesigner

12

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.


10

Non preoccuparti, la maggior parte delle persone non capisce The Art of Computer Programming (TAOCP). Quindi non pensarti lento o alle prime armi 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: Libri I programmatori non leggono davvero di Bill the Lizard.

Ci sono molti altri libri elencati lì che sono abbastanza leggibili , comprensibili e puoi trarne beneficio immediatamente .

Personalmente mi piace:


8

Ho inciampato questa citazione da 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 / lenti 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 beingallora 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 terminato 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 quantità 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 avanti 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 cose da rottami metallici 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 troppo peso su di esso neanche. 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;)


2
Nota: si fa riferimento al Volume III due volte e mai al Volume II, denominando il Volume III due nomi diversi.
alternativa il

Grazie per avermelo fatto notare (+1). L'ordine che intendevo era il seguente: primo volume I (algoritmi fondamentali), poi volume III (ricerca e ordinamento), poi volume IV (algoritmi combinatori) e poi volume II (algoritmi semi-numerici.)
luis.espinal

6
+1 Non è perché le cose sono difficili che non osiamo; è perché non osiamo che siano difficili. - Seneca
mouviciel,

4

Prima ancora di iniziare Knuth, ho dovuto percorrere quattro diversi libri. I primi due sono i 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 versioni C ++ e Java là fuori.

Dopo di che ho lavorato su una buona parte del libro di Cormen sugli algoritmi e ho usato Sedgewick e L' introduzione all'analisi degli algoritmi di Sedgewick come testo complementare, poiché è più sulla scia del rigore matematico di Knuth che del libro di 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 dei 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.

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.