Come apprendere meglio gli algoritmi in profondità


8

Ho letto questo sito con molto interesse, ma trovo che molto mi vada in testa. Questo mi ha fatto desiderare di imparare molto di più sugli algoritmi e sul CS in generale. Per quanto ne so dalla mia ricerca, ci sono 2 modi principali per farlo.

  1. Riesco a leggere un bel grosso libro pesante e ad attraversarlo lentamente ma sicuramente.

  2. Posso "imparare facendo" e con un bel libro, ma invece di leggerlo copertina per copertina, passare alle parti che mi interessano e lavorare sull'implementazione e l'applicazione di algoritmi che mi piacciono.

  3. ?

La mia domanda è: quale delle precedenti ha usato e consiglieresti lo stesso approccio a qualcun altro?


1
Potresti trovare utile la mia risposta su Cstheory .
Dai

Risposte:


15

Ho imparato degli algoritmi in un corso universitario anni fa. Ma se devi fare algoritmi usando un libro, allora ne hai bisogno uno buono. Due libri si distinguono per me come il modo per entrare negli algoritmi:

  • The Algorithm Design Manual di Steven S. Skiena
  • Introduzione agli algoritmi di T Cormen, C Leiserson, R Rivest e C Stein

Il primo è forse più un manuale pratico, mentre il secondo è più simile alla Bibbia, ma con prove.

La strategia che potresti seguire consisterebbe nel leggere, fare gli esercizi teorici e quindi implementare il più possibile, concentrandoti su algoritmi / problemi che ritieni interessanti o stimolanti o entrambi. Quindi, cerca di coprire tutti gli aspetti degli algoritmi, non solo di implementarli. Ciò includerà lo studio della complessità del tempo e dello spazio e la dimostrazione della loro correttezza. Lo studio degli algoritmi va oltre l'implementazione di algoritmi.

Dopo aver acquisito sufficiente esperienza, inizia a specializzarti. Se ti interessano la geometria computazionale o algoritmi non bloccanti, ad esempio, inizia a esplorare libri e documenti di ricerca in quest'area.

La specializzazione è buona, ma è anche utile campionare tecniche di altre aree, quindi leggere ampiamente gli algoritmi (e implementare tali algoritmi) è un buon modo per mantenere un ampio set di competenze.

EDIT: Dopo aver esaminato gli algoritmi introduttivi, puoi consultare libri come Algorithms randomizzati di Motwani & Raghavan o Approximation Algorithms di Vazirani . Questi libri sono un sondaggio (e in una certa misura, un buon esercizio di apprendimento in tecniche matematiche) in tecniche di progettazione di algoritmi più avanzate. Ampliano anche la tua conoscenza di molti altri campi in CS come grafici e reti, progettazione di strutture dati e ottimizzazione.


Ho iniziato a leggere una copia del Manuale di progettazione algoritmi online e adoro finora! Grazie!
Daniel Gratzer,

3
Vorrei riformulare leggermente una frase: lo studio degli algoritmi riguarda solo incidentalmente l' implementazione di algoritmi.
JeffE,

13

Insegnare a una classe di algoritmi.

O forse anche meglio:

scrivere un manuale di algoritmi.


3
+1. Inizialmente l'ho considerato uno scherzo, ma lo ho riconsiderato e mi sono reso conto che nulla ti permette di capire a fondo qualcosa come quando sei costretto ad aiutare qualcun altro a imparare gli stessi concetti. Questo ovviamente include, per un professore, entrambe le lezioni, la preparazione di appunti per le lezioni, appunti e, naturalmente, la scrittura di libri di testo ;-) I miei due centesimi: preparare esercizi aiuta anche parecchio. Per uno studente, sono d'accordo con la strategia proposta da @Dave Clarke.
Massimo Cafaro,

No, @vzn, questa risposta è completamente seria.
JeffE,

ah beh ne avevo paura - allora una risposta appropriata / adatta a chiunque non sia un insegnante o un professore (che è un sottogruppo molto ristretto della popolazione) potrebbe essere "insegnare l'algoritmo al tuo amico" o "scrivere una descrizione del algoritmo dalla memoria e
chiedi a

5
Non essere così rigido. Perché devi essere pagato per insegnare (o scrivere) per insegnare (o scrivere)? Insegna ai tuoi colleghi. Insegna ai tuoi figli. Volontariato presso una scuola superiore locale o un college della comunità. Realizza video di YouTube nei tuoi giorni liberi. Inizia un algoritmo Pechakucha Night.
JeffE,

touche. suppongo che funzioni se il "libro di testo" è anche vagamente considerato "scrivere in un quaderno rilegato a spirale, non pubblicato"
vzn

2

Prova a risolvere i problemi basati su un algoritmo non appena ne leggi uno. Inoltre, per comprendere gli algoritmi e implementarli meglio è necessario avere una migliore comprensione delle strutture dei dati. C'è un bel libro di strutture dati scritto da Sahni. Puoi usarlo e per gli algoritmi puoi risolvere i problemi del libro delle sfide di programmazione. Le domande sono piuttosto belle lì.


1

Se non hai appreso degli algoritmi all'università, ti consiglio di seguire una delle lezioni online, potresti prendere in considerazione la possibilità di iscriverti a uno dei corsi su coursera.org o di seguire i video pubblicati dalla Stanford University.


Udacity offre anche un corso su udacity.com/overview/Course/cs215 .
jonsca,
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.