Come apprendo algoritmi e strutture dati? [chiuso]


38

Questo è in seguito alla mia precedente domanda in cui ho posto la domanda è necessario imparare algoritmi e strutture di dati. Sento di si.

Ora lavoro in un ambiente in cui non avrò mai la possibilità di impararlo sperimentando o praticamente o in qualsiasi incarico. Qual è l'approccio giusto come i libri giusti, il giusto tipo di problemi, il giusto tipo di risorse che posso passare per dare sei mesi o un anno o due per imparare algoritmi e strutture di dati? E anche plasmare la mia mente in modo tale da poter mettere in relazione problemi con strutture dati e algoritmi.


3
Cormen è tuo amico :)
Lukasz Madon

1
@lukas: Comunque non l'ho ancora finito, ci sono parecchi calcoli in cui non mi sento a mio agio. Ha fatto molto di più per la mia conoscenza degli algoritmi, delle strutture di dati e della loro analisi, che qualsiasi altra singola fonte però :)
Matthieu M.

Puoi anche provare il mio progetto, che descrive algoritmi e strutture di dati popolari in modo più diretto di Wikipedia e contiene codici Souce quasi per ogni articolo (struttura, approccio, algoritmo) ... en.algoritmy.net
malejpavouk

Risposte:


40

Leggere.

No, davvero, leggi.

Leggi tutto sull'algoritmo e sul design che puoi trovare. Ci sono libri fenomenali là fuori. I libri dell'algoritmo di Sedgewick sono buoni. Anche il manuale di progettazione algoritmi di Skiena è buono. Insieme, questi libri mi seguono su ogni libreria in ogni lavoro a cui vado, insieme a The Mythical Man-Month.

Allora chiedi.

Parla con le persone che rispetti. Chiedi loro quali punti di decisione avevano e perché hanno preso le decisioni che hanno preso. I bravi saranno sempre in grado di dirti "Ho scelto di fare X perché è meglio di A, B in questi modi. Avrei potuto scegliere C, ma ho pensato che fosse una scelta migliore per questo".

Quindi, fallo.

Costruisci roba. Costruisci cose che non userai mai. Costruisci cose che non ti serviranno mai. Vai a scrivere un programma che risolva un puzzle di Sudoku. Ora vai di nuovo. E di nuovo. Costruiscilo in 5 modi completamente diversi. Costruisci un programma che genera rompicapo di Sudoku e alimentalo nei solutori. Trova quale solutore è il più veloce. E poi...

Scopri perché.

Il "cosa" non è quasi mai importante. Voglio dire, sì, è fondamentale per finire il progetto a portata di mano, ma alla fine se conosci il "cosa" senza sapere il "perché", allora potresti non averlo mai fatto. Hai un punto elenco sul tuo curriculum. Vai a prendere un biscotto e congratulati con te stesso. Il "perché" è molto più importante del "cosa".

E per la cronaca, Sudoku è stato un esempio. Ho trascorso molto tempo libero durante l'esercizio con una tonnellata di enigmi logici su Kongregate e ho imparato molto sulla strada.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/


risposta davvero molto buona! Mi piace il modo in cui hai espresso il tuo consiglio!
paxRoman,

Porto anche con me i libri di Sedgewick e Skienna ovunque! questo è probabilmente un altro motivo per cui ho adorato la tua risposta!
paxRoman,

e Cormen al mix per favore.
AruniRC

1
Nell'era di un sempre crescente impulso all'informazione su Internet, è importante aggiungere: leggere libri (non esclusivamente, ovviamente). Un'introduzione coerente e coerente in una questione che è più lunga di 2-3 pagine HTML separate da pubblicità è A Good Thing ™ ! Non sottovalutarlo (e sì, ovviamente gli ebook vanno bene).
Joachim Sauer

1
Concordato. La coerenza è la chiave. È difficile individuare strutture di dati quando ne ricevi una o due da una dozzina di fonti diverse. I libri tendono anche ad avere diagrammi migliori (alcuni blog / fonti online lo fanno, ma come libri di generalizzazione sono migliori). I libri di Sedgewick presentano una combinazione particolarmente buona di diagrammi, codice e descrizione semplici da seguire.
Hounshell,

10

algoritmi

Ho preso lezioni di magia in un ambiente di gruppo quando avevo dodici anni. Il mago si chiamava Joe Carota. Una volta ha fatto un trucco e io ho sbottonato, "Come hai fatto?" Ha detto qualcosa quel giorno che è rimasto con me da allora.

La risposta di Joe, "Michael, se vuoi davvero sapere come viene fatto quel trucco devi capire come lo faresti tu stesso."

Ovviamente non è quello che volevo sentire ma mi ha focalizzato sulla risoluzione dei problemi. Questo è stato il problem solving dal mio punto di vista. Se il mio primo tentativo di risolvere il problema ha avuto diciassette passaggi ed è stato davvero divertente, la buona notizia è che ho risolto il problema.

Quindi, esaminando la soluzione che avevo sviluppato e cercando modi per perfezionare quella soluzione, imparerei come ottimizzare il risultato finale. Più tardi nella mia vita di programmazione per computer ho scoperto che questo processo è stato chiamato "Stepwise Refinement". Penso che oggi lo chiamino refactoring.

Funzionava allora funziona ancora adesso.



2

Vedi se riesci a seguire un corso online o essere tutorato. In caso contrario, è spuntato in una rapida ricerca su Google. Ho appena tenuto un corso su questa scorsa primavera (la prima volta in assoluto, sono passato da EE al software) e non è stato troppo difficile da prendere se capisci bene i suggerimenti .



1

Cerca di iscriverti a un corso di laurea in strutture dati e algoritmi, è sempre bene imparare questi concetti insieme ad altri.


Sono laureato in informatica e sono passati sei anni da allora. Non mi sono mai concentrato su questi argomenti: il web, l'usabilità, il server client mi hanno attratto e sto lavorando solo su questi campi, ma ora sento che dovrei imparare anche loro. Quali sono i tuoi pensieri.
sushil bharwani,

Torna indietro e segui un corso di aggiornamento :-)
Martijn Verburg,

1

Inizia a lavorare per risolvere problemi classici su sfera online , ad esempio il sito potrebbe non sembrare così elegante ma ragazzo, questi sono problemi di programmazione classica che richiedono molte delle importanti strutture di dati e algoritmi in uso oggi.

Le soluzioni possono essere inviate in una varietà di linguaggi di programmazione da C / C ++ a JavaScript, Lisp, Smalltalk, assemblatore + circa altri 40. Quindi puoi concentrarti interamente sulla risoluzione del problema con qualunque linguaggio di programmazione ti senti a tuo agio.


1

CLRS

Questa è di gran lunga la mia risorsa preferita. L'ho usato nel mio corso di algoritmi di informatica e ho finito per acquistare il libro 4 anni dopo per leggere da solo per prepararmi ai corsi di MS Comp Sci. Non è facile da leggere in alcun modo, ma se lavori per capire alcune delle prove matematiche / prove presentate e quindi implementa lo pseudo-codice nelle tue lingue preferite, vale la pena il prezzo piuttosto alto. Anche il manuale di progettazione degli algoritmi menzionato da altri è un'ottima risorsa per l'apprendimento dell'identificazione dei problemi, ma ho scoperto che CLRS è migliore per i dettagli puri.


0

Puoi sempre provare qualcosa del genere: http://codekata.pragprog.com/

Ho sempre imparato meglio pensandolo invece di leggere. Tuttavia, è necessario disporre di documentazione / materiale di lettura disponibile per cercare risposte.


0

Compra questo libro , prestalo o rubalo! Il resto seguirà :)

Introduzione agli algoritmi di Rivest e Cormen. All'inizio sarà molto difficile seguire una volta superata la spiegazione del Mergesort nell'introduzione. Tutto ti si svolge magnificamente.

Inoltre migliorerai di più se risolvi i problemi indicati nel libro. Non ho mai voluto davvero separarmi dal libro anche dopo essermi laureato. È così buono.

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.